diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 0000000000..58815450cd --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,25 @@ +--- + +version: 2 + +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" + + - package-ecosystem: "npm" + directory: "/electron" + schedule: + interval: "daily" + + - package-ecosystem: "npm" + directory: "/website" + schedule: + interval: "daily" + + - package-ecosystem: "gomod" + directory: "src/jetstream/" + schedule: + interval: "daily" + diff --git a/.github/workflows/backend_tests.yml b/.github/workflows/backend_tests.yml new file mode 100644 index 0000000000..0212ece21b --- /dev/null +++ b/.github/workflows/backend_tests.yml @@ -0,0 +1,35 @@ +name: Backend Tests + +on: + push: + branches: + - develop + - master + pull_request: + +jobs: + test_suite: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v4 + with: + go-version: '1.21.0' + cache-dependency-path: | + src/jetstream/go.sum + + - name: Create extra_plugins.go + run: | + echo 'package main + // This file is auto-generated - DO NOT EDIT + import _ "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/autoscaler" + import _ "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/cloudfoundry" + import _ "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/cfapppush" + import _ "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/cfappssh" + import _ "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/userinvite" + import _ "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/analysis" + import _ "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes" + import _ "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/monocular"' > src/jetstream/extra_plugins.go + + - name: Run tests + run: build/bk-build.sh test diff --git a/.github/workflows/container-push-base-images-develop.yaml b/.github/workflows/container-push-base-images-develop.yaml new file mode 100644 index 0000000000..b37fd4fe78 --- /dev/null +++ b/.github/workflows/container-push-base-images-develop.yaml @@ -0,0 +1,28 @@ +name: container-push-base-images-develop + +on: + push: + branches: + - develop + workflow_dispatch: + +jobs: + push-store-image: + runs-on: ubuntu-latest + permissions: + packages: write + + steps: + - name: 'Log into GHCR' + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{secrets.DOCKERHUB_USERNAME}} + password: ${{secrets.DOCKERHUB_TOKEN}} + - name: 'Checkout current develop' + uses: actions/checkout@v3 + with: + ref: "develop" + - name: 'Build stratos base images' + run: | + ./deploy/stratos-base-images/build-base-images.sh -r ghcr.io -o anynines -p -s \ No newline at end of file diff --git a/.github/workflows/frontend_tests.yml b/.github/workflows/frontend_tests.yml new file mode 100644 index 0000000000..b77ba951db --- /dev/null +++ b/.github/workflows/frontend_tests.yml @@ -0,0 +1,43 @@ +name: Frontend Tests + +on: + push: + branches: + - develop + - master + pull_request: + +env: + NODE_OPTIONS: --max-old-space-size=5500 + +jobs: + test_suite: + runs-on: ubuntu-latest + steps: + - name: Set up Node + uses: actions/setup-node@v3 + with: + node-version: 16 + + - uses: actions/checkout@v2 + + - name: Get npm cache directory + id: npm-cache-dir + shell: bash + run: echo "dir=$(npm config get cache)" >> ${GITHUB_OUTPUT} + + - uses: actions/cache@v3 + id: npm-cache # use this to check for `cache-hit` ==> if: steps.npm-cache.outputs.cache-hit != 'true' + with: + path: ${{ steps.npm-cache-dir.outputs.dir }} + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install Dependencies + run: npm install + + - name: Run Tests + uses: coactions/setup-xvfb@v1 + with: + run: npm run test diff --git a/.gitignore b/.gitignore index 8305cd8f77..a480e85256 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ !.vscode/extensions.json # misc +/.angular/cache /.sass-cache /connect.lock /coverage @@ -139,6 +140,9 @@ website/versioned_sidebars website/versions.json website/versions-repo +# Npm package builds +/npm_pkg + /scan_tmp # Desktop app using Electron diff --git a/CHANGELOG.md b/CHANGELOG.md index 622d5f1057..d6b20f640c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,32 @@ +### 4.5.0 - 2023-11-10 +* Make builds work and abstract away architecture (#1) +* Improvements in vulnerability checking (#8) +* Fix the CVEs in the jetstream backend (#12) +* Fix backend unit tests (also code quality improvements) (#15) +* Theme Builder: Cast types (#16) +* Update required disk space (#17) +* Migrate to github.com/pressly/goose (#18) +* Move repository/interfaces to its own submodule: api (#19) +* Build and push base images on push to develop (#11) +* Add Helm support for local repos in desktop mode (#14) +* Fix dependency for database migrations (#20) +* Adapt https://github.com/cloudfoundry/stratos/pull/4580: Update store references in core package to refer to @stratosui/store (#26) +* Fix database migrations by casting dialect correctly (#22) +* add Github Actions for Backend and Frontend Tests (#29) +* Add script to help with building as packages and fix devkit and package info +* Fix typo (#31) +* Code quality improvements via `staticcheck` (#24) +* tidy up github action workflow for backend tests to resolve wrong golang version during tests (#32) +* Update to node v20 (#34) +* Remove sass-lint and stratos-protractor-reporter (#37) +* Apply changes from https://github.com/cloudfoundry/stratos/pull/4583 (#33) +* Upgrade code.cloudfoundry.org/cli to v8 (#42) +* Cherry pick commit 69ac7dc from other branch; now works without any restrictions; original commit message: (#45) +* fix gogoproto related panic when retrieving logs upgrade github.com/cloudfoundry/noaa/consumer to 2.3.0 (#46) +* Fix frontend CVEs (#40) +* feat: add errorz package to combine errors as enum in there (#47) +* allow newer pgsql versions (#51) + # Change Log ## 4.4.0 diff --git a/angular.json b/angular.json index 6e4c5a829a..efafa31e2f 100644 --- a/angular.json +++ b/angular.json @@ -63,9 +63,7 @@ "optimization": true, "outputHashing": "all", "sourceMap": false, - "extractCss": true, "namedChunks": false, - "aot": true, "extractLicenses": true, "vendorChunk": false, "buildOptimizer": true, @@ -78,9 +76,7 @@ "optimization": false, "outputHashing": "all", "sourceMap": false, - "extractCss": true, "namedChunks": false, - "aot": false, "extractLicenses": true, "vendorChunk": false, "buildOptimizer": false, @@ -95,7 +91,6 @@ "serve": { "builder": "@angular-builders/custom-webpack:dev-server", "options": { - "aot": true, "sslCert": "dev-ssl/server.crt", "proxyConfig": "proxy.conf.js", "ssl": true, @@ -154,7 +149,7 @@ "schematics": {}, "architect": { "build": { - "builder": "@angular-devkit/build-ng-packagr:build", + "builder": "@angular-devkit/build-angular:ng-packagr", "options": { "preserveSymlinks": true, "outputPath": "dist/core", @@ -168,20 +163,22 @@ }, "configurations": { "production": { - "budgets": [{ - "type": "anyComponentStyle", - "maximumWarning": "6kb" - }], - "fileReplacements": [{ - "replace": "src/frontend/packages/core/src/environments/environment.ts", - "with": "src/frontend/packages/core/src/environments/environment.prod.ts" - }], + "budgets": [ + { + "type": "anyComponentStyle", + "maximumWarning": "6kb" + } + ], + "fileReplacements": [ + { + "replace": "src/frontend/packages/core/src/environments/environment.ts", + "with": "src/frontend/packages/core/src/environments/environment.prod.ts" + } + ], "optimization": true, "outputHashing": "all", "sourceMap": false, - "extractCss": true, "namedChunks": false, - "aot": true, "extractLicenses": true, "vendorChunk": false, "buildOptimizer": true @@ -214,18 +211,6 @@ } ] } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [ - "src/tsconfig.json" - ], - "tslintConfig": "src/frontend/packages/core/tslint.json", - "files": [ - "src/frontend/packages/core/src/**/*.ts" - ] - } } } }, @@ -236,7 +221,7 @@ "prefix": "lib", "architect": { "build": { - "builder": "@angular-devkit/build-ng-packagr:build", + "builder": "@angular-devkit/build-angular:ng-packagr", "options": { "tsConfig": "src/frontend/packages/store/tsconfig.lib.json", "project": "src/frontend/packages/store/ng-package.json" @@ -254,6 +239,34 @@ "tsConfig": "src/frontend/packages/store/tsconfig.spec.json", "karmaConfig": "src/frontend/packages/store/karma.conf.js" } + } + } + }, + "extension": { + "root": "src/frontend/packages/extension", + "sourceRoot": "src/frontend/packages/extension/src", + "projectType": "library", + "prefix": "ext", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "src/frontend/packages/extension/tsconfig.lib.json", + "project": "src/frontend/packages/extension/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "src/frontend/packages/extension/tsconfig.lib.prod.json" + } + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/frontend/packages/extension/src/test.ts", + "tsConfig": "src/frontend/packages/extension/tsconfig.spec.json", + "karmaConfig": "src/frontend/packages/extension/karma.conf.js" + } }, "lint": { "builder": "@angular-devkit/build-angular:tslint", @@ -261,14 +274,14 @@ "tsConfig": [ "src/tsconfig.json" ], - "tslintConfig": "src/frontend/packages/store/tslint.json", + "tslintConfig": "src/frontend/packages/extension/tslint.json", "files": [ - "src/frontend/packages/store/src/**/*.ts" + "src/frontend/packages/extension/src/**/*.ts" ] } } } - }, + }, "shared": { "root": "src/frontend/packages/shared", "sourceRoot": "src/frontend/packages/shared/src", @@ -276,7 +289,7 @@ "prefix": "lib", "architect": { "build": { - "builder": "@angular-devkit/build-ng-packagr:build", + "builder": "@angular-devkit/build-angular:ng-packagr", "options": { "tsConfig": "src/frontend/packages/shared/tsconfig.lib.json", "project": "src/frontend/packages/shared/ng-package.json" @@ -289,14 +302,6 @@ "tsConfig": "src/frontend/packages/shared/tsconfig.spec.json", "karmaConfig": "src/frontend/packages/shared/karma.conf.js" } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": ["src/tsconfig.json"], - "tslintConfig": "src/frontend/packages/shared/tslint.json", - "files": ["src/frontend/packages/shared/src/**/*.ts"] - } } } }, @@ -307,7 +312,7 @@ "prefix": "lib", "architect": { "build": { - "builder": "@angular-devkit/build-ng-packagr:build", + "builder": "@angular-devkit/build-angular:ng-packagr", "options": { "tsConfig": "src/frontend/packages/cloud-foundry/tsconfig.lib.json", "project": "src/frontend/packages/cloud-foundry/ng-package.json" @@ -325,18 +330,6 @@ "tsConfig": "src/frontend/packages/cloud-foundry/tsconfig.spec.json", "karmaConfig": "src/frontend/packages/cloud-foundry/karma.conf.js" } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [ - "src/tsconfig.json" - ], - "tslintConfig": "src/frontend/packages/cloud-foundry/tslint.json", - "files": [ - "src/frontend/packages/cloud-foundry/src/**/*.ts" - ] - } } } }, @@ -347,7 +340,7 @@ "prefix": "lib", "architect": { "build": { - "builder": "@angular-devkit/build-ng-packagr:build", + "builder": "@angular-devkit/build-angular:ng-packagr", "options": { "tsConfig": "src/frontend/packages/cf-autoscaler/tsconfig.lib.json", "project": "src/frontend/packages/cf-autoscaler/ng-package.json" @@ -365,18 +358,6 @@ "tsConfig": "src/frontend/packages/cf-autoscaler/tsconfig.spec.json", "karmaConfig": "src/frontend/packages/cf-autoscaler/karma.conf.js" } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [ - "src/tsconfig.json" - ], - "tslintConfig": "src/frontend/packages/cf-autoscaler/tslint.json", - "files": [ - "src/frontend/packages/cf-autoscaler/src/**/*.ts" - ] - } } } }, @@ -393,18 +374,6 @@ "tsConfig": "src/frontend/packages/kubernetes/tsconfig.spec.json", "karmaConfig": "src/frontend/packages/kubernetes/karma.conf.js" } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [ - "src/tsconfig.json" - ], - "tslintConfig": "src/frontend/packages/kubernetes/tslint.json", - "files": [ - "src/frontend/packages/kubernetes/src/**/*.ts" - ] - } } } }, @@ -421,24 +390,11 @@ "tsConfig": "src/frontend/packages/git/tsconfig.spec.json", "karmaConfig": "src/frontend/packages/git/karma.conf.js" } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": [ - "src/tsconfig.json" - ], - "tslintConfig": "src/frontend/packages/git/tslint.json", - "files": [ - "src/frontend/packages/git/src/**/*.ts" - ] - } } } } }, - "defaultProject": "stratos", "schematics": { "@schematics/angular:component": { "prefix": "app", diff --git a/build/bk-build.sh b/build/bk-build.sh index 9957457157..2c959ae031 100755 --- a/build/bk-build.sh +++ b/build/bk-build.sh @@ -34,7 +34,7 @@ go env # Need to install swag in both cases echo "Generating OpenAPI documentation..." -go get github.com/swaggo/swag/cmd/swag@v1.6.7 +go install github.com/swaggo/swag/cmd/swag@v1.6.7 swag init if [ "${ACTION}" == "build" ]; then diff --git a/build/karma.conf.creator.js b/build/karma.conf.creator.js index d516e0fceb..344b5db711 100644 --- a/build/karma.conf.creator.js +++ b/build/karma.conf.creator.js @@ -12,7 +12,7 @@ module.exports = function (project) { require('karma-jasmine'), require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), - require('karma-coverage-istanbul-reporter'), + require('karma-coverage'), require('karma-spec-reporter'), require('@angular-devkit/build-angular/plugins/karma'), require(path.join(repoRoot, 'build/karma.test.reporter.js')) @@ -24,16 +24,14 @@ module.exports = function (project) { random: false } }, - coverageIstanbulReporter: { + coverageReporter: { dir: path.join(repoRoot, 'coverage', project), - reports: ['html', 'lcovonly', 'json'], - fixWebpackSourcePaths: true, - 'report-config': { - json: { - // Collate all coverage-final files into a single dir for nyc to combine (it can't pick them out from `coverage`) - file: path.join('..', 'nyc', project + '-coverage-final.json') - } - }, + subdir: ".", + reporters: [ + { type: 'html' }, + { type: 'json', file: path.join('..', 'nyc', project + '-coverage-final.json')}, + { type: 'lcovonly' } + ], }, reporters: ['spec', 'kjhtml', 'stratos'], specReporter: { diff --git a/build/ngbuild.sh b/build/ngbuild.sh new file mode 100644 index 0000000000..4cf9156e1c --- /dev/null +++ b/build/ngbuild.sh @@ -0,0 +1,272 @@ +#!/usr/bin/env bash + +# Build the front-end packages ready + +# This should be moved into devkit at some point as a library builder + +# Script folder +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" +STRATOS="`cd "${DIR}/..";pwd`" + +# Colours +CYAN="\033[96m" +YELLOW="\033[93m" +RED="\033[91m" +RESET="\033[0m" +BOLD="\033[1m" + +BUILD="false" +PUBLISH="false" +UNPUBLISH="false" +LINK="false" +INSTALL_LINKS="false" + +function show_help() { + + echo + echo -e "${CYAN}${BOLD}ngbuild - tool to help build Stratos as packages${RESET}" + echo + echo -e "Run with: ${BOLD}build/ngbuild.sh ${RESET}" + echo + echo "Flags can be:" + echo + echo " -b Build packages" + echo " -p Publish packages to npm" + echo " -u Unpublish packages from npm" + echo " -l Link packages using npm link" + echo " -i Install linked packages into node_modules" + echo + echo "With no packages specified, all are used, otherwise you can specify one or more of:" + echo " core" + echo " store" + echo " devkit" + echo " theme" + echo " shared" + echo +} + +while getopts "hbpuli" opt; do + case $opt in + h) + show_help + exit 0 + ;; + b) + BUILD="true" + ;; + p) + PUBLISH="true" + ;; + u) + UNPUBLISH="true" + ;; + l) + LINK="true" + ;; + i) + INSTALL_LINKS="true" + ;; + esac +done + +shift $(expr $OPTIND - 1 ) + +PKGS="$@" +if [ -z "$PKGS" ]; then + PKGS="shared store devkit theme core" +fi + +echo -e "${CYAN}${BOLD}=============================${RESET}" +echo -e "${CYAN}${BOLD}= Building Stratos packages =${RESET}" +echo -e "${CYAN}${BOLD}=============================${RESET}" + +# =================================================================================================== +# Store +# =================================================================================================== + +function build_store() { + echo + echo -e "${YELLOW}${BOLD}= Package: @stratosui/store${RESET}" + echo + + ng build store + + rm -rf ${STRATOS}/npm_pkg/store + cp -r ${STRATOS}/dist/store ${STRATOS}/npm_pkg + + # Patch version number + jq '.version = "'${VERSION}'"' ${STRATOS}/npm_pkg/store/package.json > ${STRATOS}/npm_pkg/store/package.json.up + # Remove script + jq '.scripts = {}' ${STRATOS}/npm_pkg/store/package.json.up > ${STRATOS}/npm_pkg/store/package.json +} + +# =================================================================================================== +# Shared +# =================================================================================================== + +function build_shared() { + echo + echo -e "${YELLOW}${BOLD}= Package: @stratosui/shared${RESET}" + echo + + ng build shared + + rm -rf ${STRATOS}/npm_pkg/shared + cp -r ${STRATOS}/dist/shared ${STRATOS}/npm_pkg + + # Patch version number + jq '.version = "'${VERSION}'"' ${STRATOS}/npm_pkg/shared/package.json > ${STRATOS}/npm_pkg/shared/package.json.up + # Remove script + jq '.scripts = {}' ${STRATOS}/npm_pkg/shared/package.json.up > ${STRATOS}/npm_pkg/shared/package.json + rm ${STRATOS}/npm_pkg/shared/package.json.up + + # Need to copy other files - sass files for shared + cp -r ${STRATOS}/src/frontend/packages/shared/sass ${STRATOS}/npm_pkg/shared/sass +} + +# =================================================================================================== +# Theme +# =================================================================================================== + +function build_theme() { + echo + echo -e "${YELLOW}${BOLD}= Package: @stratosui/theme${RESET}" + echo + + pushd ${STRATOS} > /dev/null + ng build theme + popd > /dev/null + + rm -rf ${STRATOS}/npm_pkg/theme + cp -r ${STRATOS}/dist/theme ${STRATOS}/npm_pkg + + # Patch version number + jq '.version = "'${VERSION}'"' ${STRATOS}/npm_pkg/theme/package.json > ${STRATOS}/npm_pkg/theme/package.json.up + mv ${STRATOS}/npm_pkg/theme/package.json.up ${STRATOS}/npm_pkg/theme/package.json +} + +# =================================================================================================== +# Devkit +# =================================================================================================== + +function build_devkit() { + echo + echo -e "${YELLOW}${BOLD}= Package: @stratosui/devkit${RESET}" + echo + + npm run build-devkit + + rm -rf ${STRATOS}/npm_pkg/devkit + cp -r ${STRATOS}/dist-devkit ${STRATOS}/npm_pkg/devkit + + # Patch version number + jq '.version = "'${VERSION}'"' ${STRATOS}/npm_pkg/devkit/package.json > ${STRATOS}/npm_pkg/devkit/package.json.up + jq '.scripts = {}' ${STRATOS}/npm_pkg/devkit/package.json.up > ${STRATOS}/npm_pkg/devkit/package.json + rm ${STRATOS}/npm_pkg/devkit/package.json.up +} + +# =================================================================================================== +# Core +# =================================================================================================== + +function build_core { + echo + echo -e "${YELLOW}${BOLD}= Package: @stratosui/core${RESET}" + echo + + rm -rf ${STRATOS}/npm_pkg/core + mkdir -p ${STRATOS}/npm_pkg/core + cp -r ${STRATOS}/src/frontend/packages/core/ ${STRATOS}/npm_pkg + + # Some files/folder we don't need + rm -rf ${STRATOS}/npm_pkg/core/test-framework + rm -rf ${STRATOS}/npm_pkg/core/tsconfig.spec.json + rm -rf ${STRATOS}/npm_pkg/core/tsconfig.lib.json + + # Patch version + jq '.version = "'${VERSION}'"' ${STRATOS}/npm_pkg/core/package.json > ${STRATOS}/npm_pkg/core/package.json.up + mv ${STRATOS}/npm_pkg/core/package.json.up ${STRATOS}/npm_pkg/core/package.json + + # Delete node_modules + rm -rf ${STRATOS}/npm_pkg/core/node_modules + + # Delete test files + rm -f ${STRATOS}/npm_pkg/core/src/test.ts + find ${STRATOS}/npm_pkg/core/src -type f -name "*.spec.ts" -delete + + # Dev files + mkdir ${STRATOS}/npm_pkg/core/dev + cp ${STRATOS}/dev-ssl/server.* ${STRATOS}/npm_pkg/core/dev/ + cp ${STRATOS}/proxy.conf.js ${STRATOS}/npm_pkg/core/dev/ +} + +echo -e "${CYAN}${BOLD}Packages: $PKGS${RESET}" +VERSION=$(cat "${STRATOS}/package.json" | jq -r .version) +echo -e "${CYAN}Current version: ${BOLD}${VERSION}${RESET}" + +if [ ${BUILD} == "true" ]; then + echo + echo -e "${CYAN}${BOLD}Building packages to ${STRATOS}/npm_pkg${RESET}" + mkdir -p ${STRATOS}/npm_pkg + for pkg in $PKGS + do + BUILD_TARGET="build_$pkg" + $BUILD_TARGET + done +fi + +if [ "${UNPUBLISH}" == "true" ]; then + for PKG in "$PKGS" + do + echo + echo -e "${YELLOW}${BOLD}= Unpublishing package: @stratosui/${PKG}${RESET}" + echo + npm unpublish "@stratosui/${PKG}@${VERSION}" + done +fi + +if [ ${PUBLISH} == "true" ]; then + echo + echo -e "${CYAN}${BOLD}Publishing packages to npm${RESET}" + echo + + for PKG in $PKGS + do # Delete test files + rm -f ${STRATOS}/npm_pkg/core/src/test.ts + find ${STRATOS}/npm_pkg/core/src -type f -name "*.spec.ts" -delete + echo + echo -e "${YELLOW}${BOLD}= Publishing package: @stratosui/${PKG}${RESET}" + echo + pushd ${STRATOS}/npm_pkg/$PKG > /dev/null + npm publish --access public + popd > /dev/null + done +fi + +# Run npm link +if [ ${LINK} == "true" ]; then + echo + echo -e "${CYAN}${BOLD}Linking packages${RESET}" + echo + + for PKG in $PKGS + do + echo -e "${YELLOW}${BOLD}= Linking package: @stratosui/${PKG}${RESET}" + pushd ${STRATOS}/npm_pkg/$PKG > /dev/null + npm link + popd > /dev/null + done +fi + +# Run npm link for each of the packages to install them in the node_modules folder +if [ ${INSTALL_LINKS} == "true" ]; then + echo + echo -e "${CYAN}${BOLD}NPM Linking packages${RESET}" + echo + + for PKG in $PKGS + do + echo -e "${YELLOW}${BOLD}= NPM Linking package: @stratosui/${PKG}${RESET}" + npm link @stratosui/${PKG} + done +fi \ No newline at end of file diff --git a/deploy/all-in-one/build.sh b/deploy/all-in-one/build.sh index 87611e610a..8d0a8fb78c 100755 --- a/deploy/all-in-one/build.sh +++ b/deploy/all-in-one/build.sh @@ -17,9 +17,9 @@ BOLD="\033[1m" # Set defaults PROD_RELEASE=false -DOCKER_REGISTRY=docker.io -DOCKER_ORG=splatform -BASE_IMAGE_TAG=leap15_1 +DOCKER_REGISTRY=ghcr.io +DOCKER_ORG=anynines +BASE_IMAGE_TAG=centos7 TAG=$(date -u +"%Y%m%dT%H%M%SZ") ADD_OFFICIAL_TAG="false" TAG_LATEST="false" @@ -151,7 +151,7 @@ function patchDockerfile { if [ "${DOCKER_REG_DEFAULTS}" == "false" ]; then sed -i.bak "s@splatform@${DOCKER_REGISTRY}/${DOCKER_ORG}@g" ${FOLDER}/${PATCHED_DOCKER_FILE} fi - sed -i.bak "s/opensuse/${BASE_IMAGE_TAG}/g" ${FOLDER}/${PATCHED_DOCKER_FILE} + sed -i.bak "s/leap15_2/${BASE_IMAGE_TAG}/g" ${FOLDER}/${PATCHED_DOCKER_FILE} popd > /dev/null 2>&1 } diff --git a/deploy/cloud-foundry/build.sh b/deploy/cloud-foundry/build.sh index 8e047f3016..9324f39f38 100755 --- a/deploy/cloud-foundry/build.sh +++ b/deploy/cloud-foundry/build.sh @@ -20,7 +20,7 @@ function log { log "Preparing application folder for Cloud Foundry deployment" $CYAN $BOLD -CF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +CF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TOP_LEVEL=${CF_DIR}/../../ export STRATOS_TEMP=$(mktemp -d) @@ -97,7 +97,7 @@ rm -rf ./tmp log "Disk usage for cache and app folders:" $CYAN -du -h -c --summarize ${CACHE_DIR} -du -h -c --summarize ${BUILD_DIR} +du -h -c -s ${CACHE_DIR} +du -h -c -s ${BUILD_DIR} log "All done" $CYAN $BOLD diff --git a/deploy/containers/kube-terminal/Dockerfile.kubeterminal b/deploy/containers/kube-terminal/Dockerfile.kubeterminal index c2dc207688..509af8b4e3 100644 --- a/deploy/containers/kube-terminal/Dockerfile.kubeterminal +++ b/deploy/containers/kube-terminal/Dockerfile.kubeterminal @@ -45,12 +45,13 @@ RUN useradd -ms /bin/bash stratos -K MAIL_DIR=/dev/null RUN chown -R stratos /stratos && \ chgrp -R users /stratos -# Remove a few packages -RUN zypper rm -y diffutils shadow fillup openssl +# Keep them for the time being, as their removal was causing problems +# # Remove a few packages +# RUN zypper rm -y diffutils shadow fillup openssl -# Remove zypper -RUN zypper rm -y dirmngr && \ - rm -rf /usr/bin/rpm* +# # Remove zypper +# RUN zypper rm -y dirmngr && \ +# rm -rf /usr/bin/rpm* USER stratos WORKDIR /home/stratos diff --git a/deploy/kubernetes/build.sh b/deploy/kubernetes/build.sh index 04d4a083e0..5ebc9d98d9 100755 --- a/deploy/kubernetes/build.sh +++ b/deploy/kubernetes/build.sh @@ -17,9 +17,9 @@ BOLD="\033[1m" # Set defaults PROD_RELEASE=false -DOCKER_REGISTRY=docker.io -DOCKER_ORG=splatform -BASE_IMAGE_TAG=leap15_2 +DOCKER_REGISTRY=ghcr.io +DOCKER_ORG=anynines +BASE_IMAGE_TAG=centos7 OFFICIAL_TAG=cap TAG=$(date -u +"%Y%m%dT%H%M%SZ") ADD_OFFICIAL_TAG="false" diff --git a/deploy/kubernetes/custom/customize-helm.sh b/deploy/kubernetes/custom/customize-helm.sh new file mode 100755 index 0000000000..bc421cfb45 --- /dev/null +++ b/deploy/kubernetes/custom/customize-helm.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +# Set imagePullPolicy to IfNotPresent for deployments without registry +sed -i.bak -e 's/imagePullPolicy: Always/imagePullPolicy: IfNotPresent/g' values.yaml diff --git a/deploy/stratos-base-images/Dockerfile.stratos-base.tmpl b/deploy/stratos-base-images/Dockerfile.stratos-base.tmpl index b956a582b7..701a2fbde5 100644 --- a/deploy/stratos-base-images/Dockerfile.stratos-base.tmpl +++ b/deploy/stratos-base-images/Dockerfile.stratos-base.tmpl @@ -1,7 +1,3 @@ FROM {{BASE_IMAGE}} -{{#IS_SLE}} -RUN rm -f /usr/lib/zypp/plugins/services/container-suseconnect-zypp -{{/IS_SLE}} - WORKDIR /srv diff --git a/deploy/stratos-base-images/Dockerfile.stratos-bk-base.tmpl b/deploy/stratos-base-images/Dockerfile.stratos-bk-base.tmpl index 70102de398..318aefb6d8 100644 --- a/deploy/stratos-base-images/Dockerfile.stratos-bk-base.tmpl +++ b/deploy/stratos-base-images/Dockerfile.stratos-bk-base.tmpl @@ -1,39 +1,12 @@ FROM {{BASE_IMAGE}} -{{#IS_SLE}} -RUN rm -f /usr/lib/zypp/plugins/services/container-suseconnect-zypp -RUN zypper addrepo -G -c -p 90 '{{ZYP_REPO_BASE_GA}}' base_ga -RUN zypper addrepo -G -c -p 80 '{{ZYP_REPO_BASE_UPDATE}}' base_update -RUN zypper addrepo -G -c -p 70 '{{ZYP_REPO_SP_GA}}' sp_ga -RUN zypper addrepo -G -c -p 60 '{{ZYP_REPO_SP_UPDATE}}' sp_update -RUN zypper ref -{{/IS_SLE}} -RUN zypper in -y ca-certificates && \ - zypper in -y curl && \ - zypper in -y bind-utils && \ - zypper in -y hostname && \ +RUN yum install -y ca-certificates && \ + yum install -y curl && \ + yum install -y bind-utils && \ + yum install -y hostname && \ mkdir -p /srv && \ mkdir -p /root/.npm-global -# Install latest git from devel/tools/scm repository -{{^IS_SLE}} -RUN zypper ar -p 50 http://download.opensuse.org/repositories/devel:/tools:/scm/openSUSE_Leap_15.1/devel:tools:scm.repo && \ - zypper --no-gpg-checks in -y git && \ - zypper rr devel_tools_scm && \ - zypper clean -a && \ - rm -f /var/log/zypper.log /var/log/zypp/history -{{/IS_SLE}} -{{#IS_SLE}} -RUN zypper ar http://download.opensuse.org/repositories/devel:/tools:/scm/SLE_15/devel:tools:scm.repo && \ - zypper --no-gpg-checks in -y git && \ - zypper rr devel_tools_scm && \ - zypper clean -a && \ - rm -f /var/log/zypper.log /var/log/zypp/history -{{/IS_SLE}} + +RUN yum install -y git -{{#IS_SLE}} -RUN zypper rr base_ga -RUN zypper rr base_update -RUN zypper rr sp_ga -RUN zypper rr sp_update -{{/IS_SLE}} WORKDIR /srv diff --git a/deploy/stratos-base-images/Dockerfile.stratos-bk-build-base.tmpl b/deploy/stratos-base-images/Dockerfile.stratos-bk-build-base.tmpl index 04137d442f..bccf37f6ca 100644 --- a/deploy/stratos-base-images/Dockerfile.stratos-bk-build-base.tmpl +++ b/deploy/stratos-base-images/Dockerfile.stratos-bk-build-base.tmpl @@ -5,12 +5,14 @@ RUN useradd -ms /bin/bash stratos && \ chown -R stratos /home/stratos && \ chgrp -R users /home/stratos -RUN cd / && wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz && \ - tar -xf node-v12.13.0-linux-x64.tar.xz && \ - rm node-v12.13.0-linux-x64.tar.xz +RUN cd / && wget https://nodejs.org/dist/v12.22.9/node-v12.22.9-linux-{{NODE_ARCH}}.tar.gz && \ + tar -xzf node-v12.22.9-linux-{{NODE_ARCH}}.tar.gz && \ + rm node-v12.22.9-linux-{{NODE_ARCH}}.tar.gz + ENV USER=stratos -ENV PATH=$PATH:/node-v12.13.0-linux-x64/bin -USER stratos -WORKDIR /home/stratos +ENV PATH=$PATH:/node-v12.22.9-linux-{{NODE_ARCH}}/bin + +USER stratos +WORKDIR /home/stratos \ No newline at end of file diff --git a/deploy/stratos-base-images/Dockerfile.stratos-bk-init-base.tmpl b/deploy/stratos-base-images/Dockerfile.stratos-bk-init-base.tmpl index 16af5f9911..7d947f6557 100644 --- a/deploy/stratos-base-images/Dockerfile.stratos-bk-init-base.tmpl +++ b/deploy/stratos-base-images/Dockerfile.stratos-bk-init-base.tmpl @@ -1,26 +1,14 @@ FROM {{BASE_IMAGE}} -{{#IS_SLE}} -RUN rm -f /usr/lib/zypp/plugins/services/container-suseconnect-zypp -RUN zypper addrepo -G -c -p 90 '{{ZYP_REPO_BASE_GA}}' base_ga -RUN zypper addrepo -G -c -p 80 '{{ZYP_REPO_BASE_UPDATE}}' base_update -RUN zypper addrepo -G -c -p 70 '{{ZYP_REPO_SP_GA}}' sp_ga -RUN zypper addrepo -G -c -p 60 '{{ZYP_REPO_SP_UPDATE}}' sp_update -RUN zypper ref -{{/IS_SLE}} -RUN zypper in -y ca-certificates && \ - zypper in -y curl && \ - zypper in -y openssh && \ - zypper in -y jq && \ - zypper in -y bind-utils && \ - zypper in -y hostname && \ +RUN yum install -y ca-certificates && \ + yum install -y curl && \ + yum install -y openssl \ + yum install -y openssh && \ + yum install -y epel-release \ + yum install -y jq && \ + yum install -y bind-utils && \ + yum install -y hostname && \ mkdir -p /srv && \ mkdir -p /root/.npm-global -{{#IS_SLE}} -RUN zypper rr base_ga -RUN zypper rr base_update -RUN zypper rr sp_ga -RUN zypper rr sp_update -{{/IS_SLE}} WORKDIR /srv diff --git a/deploy/stratos-base-images/Dockerfile.stratos-go-build-base.tmpl b/deploy/stratos-base-images/Dockerfile.stratos-go-build-base.tmpl index 9f09602c1b..37ed18863b 100644 --- a/deploy/stratos-base-images/Dockerfile.stratos-go-build-base.tmpl +++ b/deploy/stratos-base-images/Dockerfile.stratos-go-build-base.tmpl @@ -1,34 +1,15 @@ FROM {{BASE_IMAGE}} -{{#IS_SLE}} -RUN rm -f /usr/lib/zypp/plugins/services/container-suseconnect-zypp -RUN zypper addrepo -G -c -p 90 '{{ZYP_REPO_BASE_GA}}' base_ga -RUN zypper addrepo -G -c -p 80 '{{ZYP_REPO_BASE_UPDATE}}' base_update -RUN zypper addrepo -G -c -p 70 '{{ZYP_REPO_SP_GA}}' sp_ga -RUN zypper addrepo -G -c -p 60 '{{ZYP_REPO_SP_UPDATE}}' sp_update -RUN zypper ref -{{/IS_SLE}} - -RUN zypper -n ref && \ - zypper -n up && \ - zypper in -y which tar git gcc curl wget gzip xz unzip make && \ - zypper clean -a && \ - rm -f /var/log/zypper.log /var/log/zypp/history - -RUN wget https://storage.googleapis.com/golang/go1.13.4.linux-amd64.tar.gz && \ - tar -xzf go1.13.4.linux-amd64.tar.gz -C /usr/local/ && \ - rm go1.13.4.linux-amd64.tar.gz && \ +RUN yum update -y && \ + yum install -y git gcc wget gzip xz unzip + +RUN wget https://storage.googleapis.com/golang/go1.20.7.linux-{{GO_ARCH}}.tar.gz && \ + tar -xzf go1.20.7.linux-{{GO_ARCH}}.tar.gz -C /usr/local/ && \ + rm go1.20.7.linux-{{GO_ARCH}}.tar.gz && \ mkdir -p /home/stratos/go/bin && \ mkdir -p /home/stratos/go/src ENV PATH $PATH:/usr/local/go/bin:/home/stratos/go/bin ENV GOPATH /home/stratos/go -{{#IS_SLE}} -RUN zypper rr base_ga -RUN zypper rr base_update -RUN zypper rr sp_ga -RUN zypper rr sp_update -{{/IS_SLE}} - WORKDIR /home/stratos/go diff --git a/deploy/stratos-base-images/Dockerfile.stratos-mariadb-base.tmpl b/deploy/stratos-base-images/Dockerfile.stratos-mariadb-base.tmpl index d4c1dc778f..83fe6e4857 100644 --- a/deploy/stratos-base-images/Dockerfile.stratos-mariadb-base.tmpl +++ b/deploy/stratos-base-images/Dockerfile.stratos-mariadb-base.tmpl @@ -1,49 +1,24 @@ FROM {{BASE_IMAGE}} -{{#IS_SLE}} -RUN rm -f /usr/lib/zypp/plugins/services/container-suseconnect-zypp -RUN zypper addrepo -G -c -p 90 '{{ZYP_REPO_BASE_GA}}' base_ga -RUN zypper addrepo -G -c -p 80 '{{ZYP_REPO_BASE_UPDATE}}' base_update -RUN zypper addrepo -G -c -p 70 '{{ZYP_REPO_SP_GA}}' sp_ga -RUN zypper addrepo -G -c -p 60 '{{ZYP_REPO_SP_UPDATE}}' sp_update -RUN zypper ref -{{/IS_SLE}} - # Default password for root of mariadb ENV MYSQL_ROOT_PASSWORD mysecretpassword # Install specific version of MariaDB = 10.2.34 -# OpenSUSE Leap -{{^IS_SLE}} -RUN zypper in -y curl wget && \ - rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB && \ - zypper addrepo --gpgcheck --refresh https://yum.mariadb.org/10.2/opensuse/15/x86_64 mariadb -{{/IS_SLE}} +# centos 7 +RUN rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB && \ + yum-config-manager --add-repo https://mirror.mariadb.org/yum/10.2.44/{{MARIADB_ARCH}}/ -# SLSES -{{#IS_SLE}} -RUN zypper in -y curl wget && \ - rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB && \ - zypper addrepo --gpgcheck --refresh https://yum.mariadb.org/10.2/sles/15/x86_64 mariadb -{{/IS_SLE}} # Install packages -RUN zypper --gpg-auto-import-keys refresh && \ - zypper in -y MariaDB-server=10.2.34-1 && \ - zypper in -y MariaDB-client=10.2.34-1 +RUN yum install -y mariadb-client mariadb-server -RUN zypper in -y net-tools timezone wget awk grep && \ - zypper clean -a && \ - rm -f /var/log/zypper.log /var/log/zypp/history +RUN yum install -y net-tools wget -# Install from default repository -# RUN zypper in -y mariadb net-tools mariadb-tools timezone wget awk grep && \ -# zypper clean -a && \ -# rm -f /var/log/zypper.log /var/log/zypp/history +RUN yum install -y net-tools wget grep ARG GOSU_VERSION=1.11 -RUN wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-amd64" \ +RUN wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-{{GOSU_ARCH}}" \ && chmod +x /usr/local/bin/gosu # Config for mariadb @@ -53,11 +28,4 @@ RUN rm -rf /var/lib/mysql \ && touch /var/log/mysql/mysqld.log \ && chown -R mysql:mysql /var/log/mysql -{{#IS_SLE}} -RUN zypper rr base_ga -RUN zypper rr base_update -RUN zypper rr sp_ga -RUN zypper rr sp_update -{{/IS_SLE}} - VOLUME ["/var/lib/mysql"] \ No newline at end of file diff --git a/deploy/stratos-base-images/Dockerfile.stratos-nginx-base.tmpl b/deploy/stratos-base-images/Dockerfile.stratos-nginx-base.tmpl index af69700a28..f10131d15d 100644 --- a/deploy/stratos-base-images/Dockerfile.stratos-nginx-base.tmpl +++ b/deploy/stratos-base-images/Dockerfile.stratos-nginx-base.tmpl @@ -1,23 +1,7 @@ FROM {{BASE_IMAGE}} -{{#IS_SLE}} -RUN rm -f /usr/lib/zypp/plugins/services/container-suseconnect-zypp -RUN zypper addrepo -G -c -p 90 '{{ZYP_REPO_BASE_GA}}' base_ga -RUN zypper addrepo -G -c -p 80 '{{ZYP_REPO_BASE_UPDATE}}' base_update -RUN zypper addrepo -G -c -p 70 '{{ZYP_REPO_SP_GA}}' sp_ga -RUN zypper addrepo -G -c -p 60 '{{ZYP_REPO_SP_UPDATE}}' sp_update -RUN zypper addrepo -G -c -p 50 'http://nginx.org/packages/sles/15' nginx -{{/IS_SLE}} -RUN zypper -n ref && \ - zypper -n up && \ - zypper in -y nginx apache2-utils && \ - zypper clean -a && \ - rm -f /var/log/zypper.log /var/log/zypp/history +RUN echo -e "[nginx]\nname=nginx repo\nbaseurl=https://nginx.org/packages/{{NGINX_ARCH}}/\ngpgcheck=0\nenabled=1" >> /etc/yum.repos.d/nginx.repo -{{#IS_SLE}} -RUN zypper rr nginx -RUN zypper rr base_ga -RUN zypper rr base_update -RUN zypper rr sp_ga -RUN zypper rr sp_update -{{/IS_SLE}} \ No newline at end of file +RUN yum update -y && \ + yum install -y epel-release && \ + yum install -y nginx apache2-utils \ No newline at end of file diff --git a/deploy/stratos-base-images/Dockerfile.stratos-ruby-base.tmpl b/deploy/stratos-base-images/Dockerfile.stratos-ruby-base.tmpl index 7bee2b1f39..a264b6cb33 100644 --- a/deploy/stratos-base-images/Dockerfile.stratos-ruby-base.tmpl +++ b/deploy/stratos-base-images/Dockerfile.stratos-ruby-base.tmpl @@ -1,27 +1,8 @@ FROM {{BASE_IMAGE}} -{{#IS_SLE}} -RUN rm -f /usr/lib/zypp/plugins/services/container-suseconnect-zypp -RUN zypper addrepo -G -c -p 90 '{{ZYP_REPO_BASE_GA}}' base_ga -RUN zypper addrepo -G -c -p 80 '{{ZYP_REPO_BASE_UPDATE}}' base_update -RUN zypper addrepo -G -c -p 70 '{{ZYP_REPO_SP_GA}}' sp_ga -RUN zypper addrepo -G -c -p 60 '{{ZYP_REPO_SP_UPDATE}}' sp_update -RUN zypper ref -{{/IS_SLE}} - -RUN zypper -n ref && \ - zypper -n up && \ - zypper in -y which tar curl wget gzip jq && \ - zypper in -y ruby && \ - zypper clean -a && \ - rm -f /var/log/zypper.log /var/log/zypp/history +RUN yum install -y epel-release && \ + yum install -y which tar curl wget gzip jq && \ + yum install -y ruby WORKDIR / USER root - -{{#IS_SLE}} -RUN zypper rr base_ga -RUN zypper rr base_update -RUN zypper rr sp_ga -RUN zypper rr sp_update -{{/IS_SLE}} diff --git a/deploy/stratos-base-images/Dockerfile.stratos-ruby-build-base.tmpl b/deploy/stratos-base-images/Dockerfile.stratos-ruby-build-base.tmpl index 38b0ecf713..84f7cfea69 100644 --- a/deploy/stratos-base-images/Dockerfile.stratos-ruby-build-base.tmpl +++ b/deploy/stratos-base-images/Dockerfile.stratos-ruby-build-base.tmpl @@ -1,30 +1,12 @@ FROM {{BASE_IMAGE}} -{{#IS_SLE}} -RUN rm -f /usr/lib/zypp/plugins/services/container-suseconnect-zypp -RUN zypper addrepo -G -c -p 90 '{{ZYP_REPO_BASE_GA}}' base_ga -RUN zypper addrepo -G -c -p 80 '{{ZYP_REPO_BASE_UPDATE}}' base_update -RUN zypper addrepo -G -c -p 70 '{{ZYP_REPO_SP_GA}}' sp_ga -RUN zypper addrepo -G -c -p 60 '{{ZYP_REPO_SP_UPDATE}}' sp_update -RUN zypper ref -{{/IS_SLE}} - -RUN zypper -n ref && \ - zypper -n up && \ - zypper in -y which tar curl wget gzip jq && \ - zypper in -y ruby && \ - zypper in -y make gcc-c++ && \ - zypper in -y libopenssl-devel readline-devel && \ - zypper in -y ruby-devel && \ - zypper clean -a && \ - rm -f /var/log/zypper.log /var/log/zypp/history +RUN yum update -y && \ + yum install -y epel-release && \ + yum install -y which tar curl wget gzip jq && \ + yum install -y ruby && \ + yum install -y make gcc-c++ && \ + yum install -y openssl-devel readline-devel && \ + yum install -y ruby-devel WORKDIR / -USER root - -{{#IS_SLE}} -RUN zypper rr base_ga -RUN zypper rr base_update -RUN zypper rr sp_ga -RUN zypper rr sp_update -{{/IS_SLE}} +USER root \ No newline at end of file diff --git a/deploy/stratos-base-images/Dockerfile.stratos-ui-build-base.tmpl b/deploy/stratos-base-images/Dockerfile.stratos-ui-build-base.tmpl index 08861d7917..af1e57ee1d 100644 --- a/deploy/stratos-base-images/Dockerfile.stratos-ui-build-base.tmpl +++ b/deploy/stratos-base-images/Dockerfile.stratos-ui-build-base.tmpl @@ -1,24 +1,12 @@ FROM {{BASE_IMAGE}} -{{#IS_SLE}} -RUN rm -f /usr/lib/zypp/plugins/services/container-suseconnect-zypp -RUN zypper addrepo -G -c -p 90 '{{ZYP_REPO_BASE_GA}}' base_ga -RUN zypper addrepo -G -c -p 80 '{{ZYP_REPO_BASE_UPDATE}}' base_update -RUN zypper addrepo -G -c -p 70 '{{ZYP_REPO_SP_GA}}' sp_ga -RUN zypper addrepo -G -c -p 60 '{{ZYP_REPO_SP_UPDATE}}' sp_update -RUN zypper ref -{{/IS_SLE}} +RUN yum update -y && \ + yum install -y wget tar git xz -RUN zypper -n ref && \ - zypper -n up && \ - zypper in -y wget tar git xz && \ - zypper clean -a && \ - rm -f /var/log/zypper.log /var/log/zypp/history - -RUN cd / && wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz && \ - tar -xf node-v12.13.0-linux-x64.tar.xz +RUN cd / && wget https://nodejs.org/dist/v12.22.9/node-v12.22.9-linux-{{NODE_ARCH}}.tar.xz && \ + tar -xf node-v12.22.9-linux-{{NODE_ARCH}}.tar.xz ENV USER=stratos -ENV PATH=$PATH:/node-v12.13.0-linux-x64/bin +ENV PATH=$PATH:/node-v12.22.9-linux-{{NODE_ARCH}}/bin RUN useradd -ms /bin/bash stratos && \ mkdir -p /home/stratos && \ chown -R stratos /home/stratos && \ @@ -27,12 +15,5 @@ RUN useradd -ms /bin/bash stratos && \ chown stratos /usr/dist && \ chgrp users /usr/dist -{{#IS_SLE}} -RUN zypper rr base_ga -RUN zypper rr base_update -RUN zypper rr sp_ga -RUN zypper rr sp_update -{{/IS_SLE}} - USER stratos WORKDIR /home/stratos diff --git a/deploy/stratos-base-images/build-base-images.sh b/deploy/stratos-base-images/build-base-images.sh index f02691ebb7..49a96c846a 100755 --- a/deploy/stratos-base-images/build-base-images.sh +++ b/deploy/stratos-base-images/build-base-images.sh @@ -7,30 +7,56 @@ YELLOW="\033[93m" RESET="\033[0m" BOLD="\033[1m" -BASE_IMAGE=opensuse/leap:15.2 -REGISTRY=docker.io -ORGANIZATION=splatform -TAG=leap15_2 +BASE_IMAGE=centos:7 +REGISTRY=ghcr.io +ORGANIZATION=anynines +TAG=centos7 +ARCH=amd64 PROG=$(basename ${BASH_SOURCE[0]}) SQUASH_ARGS="--squash" NO_SQUASH="stratos-base" DIR=$(dirname $PROG) +NODE_ARCH=x64 +GO_ARCH=amd64 +MARIADB_ARCH=centos7-amd64 +GOSU_ARCH=amd64 +NGINX_ARCH=centos/7/x86_64 + function usage { - echo "usage: $PROG [-b BASE] [-r REGISTRY] [-o ORGANIZATION] [-t TAG] [-p] [h]" + echo "usage: $PROG [-b BASE] [-r REGISTRY] [-o ORGANIZATION] [-t TAG] [-s] [-p] [h]" + echo " -a Value System Architecture (amd64 or arm64)" echo " -b Value Base Image" echo " -r Value Docker registry" echo " -o Value Organization in Docker registry" + echo " -s Don't squash images" echo " -t Value Tag for images" echo " -p Push images to registry" - echo " -s Is SLE build" echo " -h Help" exit 1 } -while getopts "b:r:o:t:psh" opt ; do +while getopts "a:b:r:o:t:ph:s" opt ; do case $opt in + a) + ARCH=${OPTARG} + case $ARCH in + amd64) + ;; + arm64) + NODE_ARCH=arm64 + GO_ARCH=arm64 + MARIADB_ARCH=centos7-aarch64 + GOSU_ARCH=arm64 + NGINX_ARCH=centos/7/aarch64 + ;; + *) + echo "Invalid architecture $OPTARG" >&2 + usage + ;; + esac + ;; b) BASE_IMAGE=${OPTARG} ;; @@ -46,12 +72,12 @@ while getopts "b:r:o:t:psh" opt ; do p) PUSH_IMAGES=true ;; - s) - IS_SLE="true" - ;; h) usage ;; + s) + SQUASH_ARGS="" + ;; \?) echo "Invalid option -$OPTARG" >&2 usage @@ -65,11 +91,12 @@ echo "Stratos Base Image Builder" echo "==========================" printf "${CYAN}" echo "" +echo "ARCHITECTURE : ${ARCH}" echo "BASE IMAGE : ${BASE_IMAGE}" echo "REGISTRY : ${REGISTRY}" echo "ORG : ${ORGANIZATION}" echo "TAG : ${TAG}" -echo "IS_SLE : ${IS_SLE}" +echo "SQUASH: : ${SQUASH_ARGS}" echo "PUSH IMAGES : ${PUSH_IMAGES}" echo "" printf "${RESET}" @@ -80,14 +107,6 @@ if [ -z ${PUSH_IMAGES} ]; then echo "========================================" fi -if [ -n "${IS_SLE}" ]; then - # Check env vars - : "${ZYP_REPO_BASE_GA?Environment variable must be set when building SLE images}" - : "${ZYP_REPO_BASE_UPDATE?Environment variable must be set when building SLE images}" - : "${ZYP_REPO_SP_GA?Environment variable must be set when building SLE images}" - : "${ZYP_REPO_SP_UPDATE?Environment variable must be set when building SLE images}" -fi - set -x __DIRNAME="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -104,7 +123,7 @@ cp ${__DIRNAME}/install-ruby.sh . GO_BUILD_BASE=${REGISTRY}/${ORGANIZATION}/stratos-go-build-base:${TAG} for i in ${DOCKERFILES}; do - BASE_IMAGE=${BASE_IMAGE} GO_BUILD_BASE=${GO_BUILD_BASE} IS_SLE=${IS_SLE} ./mo ${__DIRNAME}/$i > ${i/.tmpl} + BASE_IMAGE=${BASE_IMAGE} GO_BUILD_BASE=${GO_BUILD_BASE} ARCH=${ARCH} NODE_ARCH=${NODE_ARCH} GO_ARCH=${GO_ARCH} MARIADB_ARCH=${MARIADB_ARCH} GOSU_ARCH=${GOSU_ARCH} NGINX_ARCH=${NGINX_ARCH} ./mo ${__DIRNAME}/$i > ${i/.tmpl} done pwd diff --git a/deploy/stratos-base-images/imagelist.txt b/deploy/stratos-base-images/imagelist.txt index 71f993263e..9f2cb31d22 100644 --- a/deploy/stratos-base-images/imagelist.txt +++ b/deploy/stratos-base-images/imagelist.txt @@ -1,10 +1,10 @@ -stratos-base:leap15_2 -stratos-ruby-base:leap15_2 -stratos-ruby-build-base:leap15_2 -stratos-go-build-base:leap15_2 -stratos-ui-build-base:leap15_2 -stratos-bk-base:leap15_2 -stratos-nginx-base:leap15_2 -stratos-bk-build-base:leap15_2 -stratos-db-base:leap15_2 -stratos-bk-init-base:leap15_2 +stratos-base:centos7 +stratos-ruby-base:centos7 +stratos-ruby-build-base:centos7 +stratos-go-build-base:centos7 +stratos-ui-build-base:centos7 +stratos-bk-base:centos7 +stratos-nginx-base:centos7 +stratos-bk-build-base:centos7 +stratos-db-base:centos7 +stratos-bk-init-base:centos7 diff --git a/manifest-docker.yml b/manifest-docker.yml index 739a955e51..1987057234 100644 --- a/manifest-docker.yml +++ b/manifest-docker.yml @@ -4,7 +4,7 @@ applications: image: splatform/stratos:stable instances: 1 memory: 128M - disk_quota: 384M + disk_quota: 512M # services: # - console_db # env: diff --git a/package-lock.json b/package-lock.json index 68189fc08a..0e38efeda5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21581 +1,19189 @@ { "name": "stratos", "version": "4.4.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@angular-builders/custom-webpack": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@angular-builders/custom-webpack/-/custom-webpack-10.0.1.tgz", - "integrity": "sha512-YDy5zEKVwXdoXLjmbsY6kGaEbmunQxaPipxrwLUc9hIjRLU2WcrX9vopf1R9Pgj4POad73IPBNGu+ibqNRFIEQ==", + "packages": { + "": { + "name": "stratos", + "version": "4.4.0", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@ajsf/core": "^0.7.0", + "@ajsf/material": "^0.7.0", + "@angular/animations": "^14.3.0", + "@angular/cdk": "^14.2.7", + "@angular/common": "^14.3.0", + "@angular/core": "^14.3.0", + "@angular/flex-layout": "^14.0.0-beta.41", + "@angular/forms": "^14.3.0", + "@angular/material": "^14.2.7", + "@angular/material-moment-adapter": "^14.2.7", + "@angular/platform-browser": "^14.3.0", + "@angular/platform-browser-dynamic": "^14.3.0", + "@angular/platform-server": "^14.3.0", + "@angular/router": "^14.3.0", + "@cfstratos/monaco-yaml": "^2.5.0", + "@ngrx/effects": "^14.3.3", + "@ngrx/router-store": "^14.3.3", + "@ngrx/store": "^14.3.3", + "@ngrx/store-devtools": "^14.3.3", + "@swimlane/ngx-charts": "^20.4.1", + "@swimlane/ngx-graph": "^8.2.2", + "@types/moment-timezone": "^0.5.13", + "angular2-virtual-scroll": "^0.4.16", + "core-js": "^3.6.5", + "immer": "^10.0.3", + "intersect": "^1.0.1", + "lodash": "^4.17.20", + "lodash-es": "^4.17.14", + "mappy-breakpoints": "^0.2.3", + "marked": "^4.3.0", + "moment": "^2.24.0", + "moment-timezone": "^0.5.13", + "ngrx-store-localstorage": "^14.0.0", + "ngx-moment": "^3.5.0", + "ngx-monaco-editor": "^9.0.0", + "normalizr": "^3.6.0", + "reselect": "^4.0.0", + "rxjs": "^6.6.3", + "rxjs-spy": "^7.5.2", + "rxjs-websockets": "~8.0.1", + "ts-md5": "^1.2.7", + "tslib": "^2.0.0", + "xterm": "^4.5.0", + "xterm-addon-fit": "^0.3.0", + "zone.js": "~0.11.4" + }, + "devDependencies": { + "@angular-builders/custom-webpack": "^14.1.0", + "@angular-devkit/architect": "^0.1402.12", + "@angular-devkit/build-angular": "^14.2.12", + "@angular-devkit/core": "^14.2.12", + "@angular-devkit/schematics": "^14.2.12", + "@angular/cli": "^14.2.12", + "@angular/language-service": "^14.2.12", + "@cypress/request": "^3.0.0", + "@schematics/angular": "^9.1.5", + "@types/jasmine": "~3.6.0", + "@types/jasminewd2": "~2.0.8", + "@types/js-yaml": "^3.12.5", + "@types/karma": "^6.3.5", + "@types/node": "^20.6.1", + "acorn": "^7.1.1", + "adm-zip": "^0.4.16", + "browserstack-local": "^1.4.5", + "codecov": "^3.7.1", + "copy-webpack-plugin": "^6.2.0", + "delete": "^1.1.0", + "fs-extra": "^9.0.1", + "globby": "^11.0.0", + "istanbul": "^0.4.5", + "istanbul-api": "2.1.6", + "istanbul-reports": "3.0.2", + "jasmine-core": "~3.8.0", + "jasmine-protractor-browser-log-reporter": "cf-stratos/jasmine-protractor-browser-log-reporter", + "jasmine-spec-reporter": "~5.0.0", + "js-yaml": "~3.14.0", + "json-schema-to-typescript": "^9.1.0", + "karma": "~6.4.2", + "karma-chrome-launcher": "~3.1.0", + "karma-cli": "~2.0.0", + "karma-coverage": "^2.2.1", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "^1.5.0", + "karma-spec-reporter": "0.0.32", + "kind-of": "^6.0.3", + "mem": "6.1.0", + "mktemp": "^1.0.0", + "ng-packagr": "^14.2.2", + "npm-run-all": "^4.1.5", + "nyc": "^15.1.0", + "protractor": "^7.0.0", + "ps-node": "^0.1.6", + "q": "^1.4.1", + "rxjs-tslint": "^0.1.8", + "ts-node": "^8.8.2", + "tslint": "~6.1.0", + "typescript": "4.6.4" + }, + "engines": { + "node": "^20.6", + "npm": ">=8.3" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.3.1", "dev": true, - "requires": { - "@angular-devkit/architect": ">=0.1000.0 < 0.1100.0", - "@angular-devkit/build-angular": ">=0.1000.0 < 0.1100.0", - "@angular-devkit/core": "^10.0.0", - "lodash": "^4.17.15", - "ts-node": "^9.0.0", - "webpack-merge": "^4.2.2" - }, - "dependencies": { - "ts-node": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.0.0.tgz", - "integrity": "sha512-/TqB4SnererCDR/vb4S/QvSZvzQMJN8daAslg7MeaiHvD8rDZsSfXmNeNumyZZzMned72Xoq/isQljYSt8Ynfg==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - } - } + "license": "MIT" }, - "@angular-devkit/architect": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.0.tgz", - "integrity": "sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w==", - "dev": true, - "requires": { - "@angular-devkit/core": "10.2.0", - "rxjs": "6.6.2" - }, + "node_modules/@ajsf/core": { + "version": "0.7.0", + "license": "MIT", "dependencies": { - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "ajv": "^6.10.0", + "lodash-es": "~4.17.21", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=13.0.0", + "@angular/core": ">=13.0.0", + "@angular/forms": ">=13.0.0", + "@angular/platform-browser": ">=13.0.0", + "rxjs": "^6.0.0 || ^7.0.0" } }, - "@angular-devkit/build-angular": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1002.0.tgz", - "integrity": "sha512-cPkdp1GceokGHc79Wg0hACMqqmnJ4W3H9kY4c9qp1Xz18b3vk1aq09JNawOpfUN09S9vBCnn4glg22lRyqmJNA==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1002.0", - "@angular-devkit/build-optimizer": "0.1002.0", - "@angular-devkit/build-webpack": "0.1002.0", - "@angular-devkit/core": "10.2.0", - "@babel/core": "7.11.1", - "@babel/generator": "7.11.0", - "@babel/plugin-transform-runtime": "7.11.0", - "@babel/preset-env": "7.11.0", - "@babel/runtime": "7.11.2", - "@babel/template": "7.10.4", - "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "10.2.0", - "autoprefixer": "9.8.6", - "babel-loader": "8.1.0", - "browserslist": "^4.9.1", - "cacache": "15.0.5", - "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.0", - "copy-webpack-plugin": "6.0.3", - "core-js": "3.6.4", - "css-loader": "4.2.2", - "cssnano": "4.1.10", - "file-loader": "6.0.0", - "find-cache-dir": "3.3.1", - "glob": "7.1.6", - "jest-worker": "26.3.0", - "karma-source-map-support": "1.4.0", - "less-loader": "6.2.0", - "license-webpack-plugin": "2.3.0", - "loader-utils": "2.0.0", - "mini-css-extract-plugin": "0.10.0", - "minimatch": "3.0.4", - "open": "7.2.0", - "parse5": "6.0.1", - "parse5-htmlparser2-tree-adapter": "6.0.1", - "pnp-webpack-plugin": "1.6.4", - "postcss": "7.0.32", - "postcss-import": "12.0.1", - "postcss-loader": "3.0.0", - "raw-loader": "4.0.1", - "regenerator-runtime": "0.13.7", - "resolve-url-loader": "3.1.2", - "rimraf": "3.0.2", - "rollup": "2.26.5", - "rxjs": "6.6.2", - "sass": "1.26.10", - "sass-loader": "10.0.1", - "semver": "7.3.2", - "source-map": "0.7.3", - "source-map-loader": "1.0.2", - "source-map-support": "0.5.19", - "speed-measure-webpack-plugin": "1.3.3", - "style-loader": "1.2.1", - "stylus": "0.54.8", - "stylus-loader": "3.0.2", - "terser": "5.3.0", - "terser-webpack-plugin": "4.1.0", - "tree-kill": "1.2.2", - "webpack": "4.44.1", - "webpack-dev-middleware": "3.7.2", - "webpack-dev-server": "3.11.0", - "webpack-merge": "4.2.2", - "webpack-sources": "1.4.3", - "webpack-subresource-integrity": "1.4.1", - "worker-plugin": "5.0.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/core": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", - "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.1", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.0", - "@babel/types": "^7.11.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "copy-webpack-plugin": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz", - "integrity": "sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA==", - "dev": true, - "requires": { - "cacache": "^15.0.4", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.1", - "schema-utils": "^2.7.0", - "serialize-javascript": "^4.0.0", - "webpack-sources": "^1.4.3" - } - }, - "core-js": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", - "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==", - "dev": true - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "sass": { - "version": "1.26.10", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.10.tgz", - "integrity": "sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw==", - "dev": true, - "requires": { - "chokidar": ">=2.0.0 <4.0.0" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "stylus": { - "version": "0.54.8", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", - "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", - "dev": true, - "requires": { - "css-parse": "~2.0.0", - "debug": "~3.1.0", - "glob": "^7.1.6", - "mkdirp": "~1.0.4", - "safer-buffer": "^2.1.2", - "sax": "~1.2.4", - "semver": "^6.3.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "node_modules/@ajsf/material": { + "version": "0.7.0", + "license": "MIT", + "dependencies": { + "@ajsf/core": "~0.7.0", + "lodash-es": "~4.17.21", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/cdk": ">=13.0.0", + "@angular/flex-layout": ">=13.0.0-beta.38", + "@angular/material": ">=13.0.0" } }, - "@angular-devkit/build-ng-packagr": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.1002.0.tgz", - "integrity": "sha512-JngcuLuPpu2oOhi1qBPzco+ETjDbv90zyWZELO3qXeCelug1z83E0Qi2sLgnNYayzSHfrivrRamL8CbYYT+M9Q==", + "node_modules/@ampproject/remapping": { + "version": "2.2.0", "dev": true, - "requires": { - "@angular-devkit/architect": "0.1002.0", - "rxjs": "6.6.2" - }, + "license": "Apache-2.0", "dependencies": { - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@angular-devkit/build-optimizer": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1002.0.tgz", - "integrity": "sha512-ACnm9doPMbRtSy1UZN5ir7smeLMx0g0oW7jX3jyPepeQKZ+9U1Bn09t10NLZQH+Z509jWZgvNJH/aOh85P6euw==", + "node_modules/@angular-builders/custom-webpack": { + "version": "14.1.0", "dev": true, - "requires": { - "loader-utils": "2.0.0", - "source-map": "0.7.3", - "tslib": "2.0.1", - "typescript": "4.0.2", - "webpack-sources": "1.4.3" - }, + "license": "MIT", "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "tslib": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", - "integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==", - "dev": true - }, - "typescript": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", - "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", - "dev": true - } + "@angular-devkit/architect": ">=0.1400.0 < 0.1500.0", + "@angular-devkit/build-angular": "^14.0.0", + "@angular-devkit/core": "^14.0.0", + "lodash": "^4.17.15", + "ts-node": "^10.0.0", + "tsconfig-paths": "^3.9.0", + "webpack-merge": "^5.7.3" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^14.0.0" } }, - "@angular-devkit/build-webpack": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1002.0.tgz", - "integrity": "sha512-TLBBQ6ANOLKXOPxpCOnxAtoknwHA7XhsLuueN06w5qqF+QNNbWUMPoieKFGs2TnotfCgbiq6x57IDEZTyT6V0w==", + "node_modules/@angular-builders/custom-webpack/node_modules/acorn": { + "version": "8.10.0", "dev": true, - "requires": { - "@angular-devkit/architect": "0.1002.0", - "@angular-devkit/core": "10.2.0", - "rxjs": "6.6.2" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, - "dependencies": { - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "engines": { + "node": ">=0.4.0" } }, - "@angular-devkit/core": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.0.tgz", - "integrity": "sha512-XAszFhSF3mZw1VjoOsYGbArr5NJLcStjOvcCGjBPl1UBM2AKpuCQXHxI9XJGYKL3B93Vp5G58d8qkHvamT53OA==", + "node_modules/@angular-builders/custom-webpack/node_modules/ts-node": { + "version": "10.9.1", "dev": true, - "requires": { - "ajv": "6.12.4", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.2", - "source-map": "0.7.3" - }, + "license": "MIT", "dependencies": { - "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.2.0.tgz", - "integrity": "sha512-TQI5NnE6iM3ChF5gZQ9qb+lZgMWa7aLoF5ksOyT3zrmOuICiQYJhA6SsjV95q7J4M55qYymwBib8KTqU/xuQww==", - "dev": true, - "requires": { - "@angular-devkit/core": "10.2.0", - "ora": "5.0.0", - "rxjs": "6.6.2" - }, - "dependencies": { - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "@swc/wasm": { + "optional": true } } }, - "@angular/animations": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-10.2.0.tgz", - "integrity": "sha512-lKjC2Jm2Al4GCW2zKutdskMWqe5S23gknPvp65ybmR5D1Pz/YgzDOHXmTHqDn5qXJgzpFt/fJgNi805XrAOm4g==", - "requires": { - "tslib": "^2.0.0" - } - }, - "@angular/cdk": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-10.2.5.tgz", - "integrity": "sha512-SI/YdaxfkttG92A0uGRixyJkfTKHn0GIU+7BCSRq0d31ru3Ugfln+jr+5/xttxWr88CNPTfpGaUt0ZuSqYCzqw==", - "requires": { - "parse5": "^5.0.0", - "tslib": "^2.0.0" + "node_modules/@angular-devkit/architect": { + "version": "0.1402.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "14.2.12", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "@angular/cli": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-10.2.0.tgz", - "integrity": "sha512-YBzwkFBmG6CdUJk8onsPXxHX/ByU5MERBQgYhLC873e2nZlXMUu+Ttq2Wai6apyskGvsXKxZNPOQSFZTGKXzXg==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1002.0", - "@angular-devkit/core": "10.2.0", - "@angular-devkit/schematics": "10.2.0", - "@schematics/angular": "10.2.0", - "@schematics/update": "0.1002.0", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.1", - "debug": "4.1.1", - "ini": "1.3.5", - "inquirer": "7.3.3", - "npm-package-arg": "8.0.1", - "npm-pick-manifest": "6.1.0", - "open": "7.2.0", - "pacote": "9.5.12", - "read-package-tree": "5.3.1", - "rimraf": "3.0.2", - "semver": "7.3.2", - "symbol-observable": "1.2.0", - "universal-analytics": "0.4.23", - "uuid": "8.3.0" - }, - "dependencies": { - "@angular-devkit/architect": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.0.tgz", - "integrity": "sha512-twM8V03ujBIGVpgV1PBlSDodUdxtUb7WakutfWafAvEHUsgwzfvQz2VtKWvjNZ9AiYjnCuwkQaclqVv0VHNo9w==", - "dev": true, - "requires": { - "@angular-devkit/core": "10.2.0", - "rxjs": "6.6.2" - } - }, - "@schematics/angular": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-10.2.0.tgz", - "integrity": "sha512-rJRTTTL8CMMFb3ebCvAVHKHxuNzRqy/HtbXhJ82l5Xo/jXcm74eV2Q0RBUrNo1yBKWFIR+FIwiXLJaGcC/R9Pw==", - "dev": true, - "requires": { - "@angular-devkit/core": "10.2.0", - "@angular-devkit/schematics": "10.2.0", - "jsonc-parser": "2.3.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "jsonc-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.0.tgz", - "integrity": "sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "open": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.2.0.tgz", - "integrity": "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } + "node_modules/@angular-devkit/build-angular": { + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.13.tgz", + "integrity": "sha512-FJZKQ3xYFvEJ807sxVy4bCVyGU2NMl3UUPNfLIdIdzwwDEP9tx/cc+c4VtVPEZZfU8jVenu8XOvL6L0vpjt3yg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.0", + "@angular-devkit/architect": "0.1402.13", + "@angular-devkit/build-webpack": "0.1402.13", + "@angular-devkit/core": "14.2.13", + "@babel/core": "7.18.10", + "@babel/generator": "7.18.12", + "@babel/helper-annotate-as-pure": "7.18.6", + "@babel/plugin-proposal-async-generator-functions": "7.18.10", + "@babel/plugin-transform-async-to-generator": "7.18.6", + "@babel/plugin-transform-runtime": "7.18.10", + "@babel/preset-env": "7.18.10", + "@babel/runtime": "7.18.9", + "@babel/template": "7.18.10", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "14.2.13", + "ansi-colors": "4.1.3", + "babel-loader": "8.2.5", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.9.1", + "cacache": "16.1.2", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.16", + "css-loader": "6.7.1", + "esbuild-wasm": "0.15.5", + "glob": "8.0.3", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.1.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.0.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "mini-css-extract-plugin": "2.6.1", + "minimatch": "5.1.0", + "open": "8.4.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "6.0.1", + "piscina": "3.2.0", + "postcss": "8.4.31", + "postcss-import": "15.0.0", + "postcss-loader": "7.0.1", + "postcss-preset-env": "7.8.0", + "regenerator-runtime": "0.13.9", + "resolve-url-loader": "5.0.0", + "rxjs": "6.6.7", + "sass": "1.54.4", + "sass-loader": "13.0.2", + "semver": "7.5.3", + "source-map-loader": "4.0.0", + "source-map-support": "0.5.21", + "stylus": "0.59.0", + "stylus-loader": "7.0.0", + "terser": "5.14.2", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.4.0", + "webpack": "5.76.1", + "webpack-dev-middleware": "5.3.3", + "webpack-dev-server": "4.11.0", + "webpack-merge": "5.8.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.15.5" + }, + "peerDependencies": { + "@angular/compiler-cli": "^14.0.0", + "@angular/localize": "^14.0.0", + "@angular/service-worker": "^14.0.0", + "karma": "^6.3.0", + "ng-packagr": "^14.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.6.2 <4.9" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "@angular/service-worker": { + "optional": true }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } + "karma": { + "optional": true }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "ng-packagr": { + "optional": true }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "protractor": { + "optional": true }, - "uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==", - "dev": true + "tailwindcss": { + "optional": true } } }, - "@angular/common": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-10.2.0.tgz", - "integrity": "sha512-4q7cb6Z18R1nQ8dN8uj6cckuk4jzY40lF7kpxf/wja0pQBUBtWwExwXsdHTVWGZ/mgQv9a5dTAPQq8/tSmf+hw==", - "requires": { - "tslib": "^2.0.0" - } - }, - "@angular/compiler": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-10.2.0.tgz", - "integrity": "sha512-r+zNEDJmfH7pyQULgs6iQgMv/zH/CokepTuemrVbBKkUjd8F9Q84XdflR2Tx2rukiAAl4B0BuG+v4tSb9pR1WQ==", - "requires": { - "tslib": "^2.0.0" + "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { + "version": "0.1402.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.13.tgz", + "integrity": "sha512-n0ISBuvkZHoOpAzuAZql1TU9VLHUE9e/a9g4VNOPHewjMzpN02VqeGKvJfOCKtzkCs6gVssIlILm2/SXxkIFxQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "14.2.13", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "@angular/compiler-cli": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.2.0.tgz", - "integrity": "sha512-NWTNg15LLL14MgooXV1Xb4w49I4OAfWakcc0J7XQm3B3mRFuue/UfXE9dKMStenTfmtUnNO9c+xjZRhTWYJkfw==", + "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.13.tgz", + "integrity": "sha512-aIefeZcbjghQg/V6U9CTLtyB5fXDJ63KwYqVYkWP+i0XriS5A9puFgq2u/OVsWxAfYvqpDqp5AdQ0g0bi3CAsA==", "dev": true, - "requires": { - "canonical-path": "1.0.0", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.7.2", - "fs-extra": "4.0.2", - "magic-string": "^0.25.0", - "minimist": "^1.2.0", - "reflect-metadata": "^0.1.2", - "semver": "^6.3.0", - "source-map": "^0.6.1", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.0.0", - "yargs": "15.3.0" - }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-extra": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", - "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.0.tgz", - "integrity": "sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.0" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.1.0", + "rxjs": "6.6.7", + "source-map": "0.7.4" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true } } }, - "@angular/core": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-10.2.0.tgz", - "integrity": "sha512-pj+0cIDHMfeTFFrxbxM1qanSqhnA3ybCYMQm+Fs/WAPlLSvB6s/vVhq6tCdicHzd7/fujGXPcb8Hvtx+km8TqQ==", - "requires": { - "tslib": "^2.0.0" + "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "@angular/flex-layout": { - "version": "10.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-10.0.0-beta.32.tgz", - "integrity": "sha512-JvuY4dUoy5jyCTIrFiq7n30Znakh1pD3nbg0h0hs2r3t1OiDQb0ZSI1wcumosG/vYHsuJQTuNhbfaIZzA1x8nA==", - "requires": { - "tslib": "^2.0.0" - } + "node_modules/@angular-devkit/build-angular/node_modules/@types/estree": { + "version": "0.0.51", + "dev": true, + "license": "MIT" }, - "@angular/forms": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-10.2.0.tgz", - "integrity": "sha512-pRQP5AWyB37rJWtgvZRWA3H+EMcP9M7QybOAfCf7z9CMRhKK+jVvd5yQqyqOYWOEBuS0kUD3HM/vrpZywhK/6g==", - "requires": { - "tslib": "^2.0.0" + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, - "@angular/language-service": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-10.2.0.tgz", - "integrity": "sha512-p2yJ8QhJPrNAoeGJ2abX22rNMDyQAmGsMV0GUCpGfmrJ4wDLPW+hy7tbL44qGn2B4KY5lvj30yIxjxL8HtBCVw==", - "dev": true - }, - "@angular/material": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-10.2.5.tgz", - "integrity": "sha512-gYFqpXdLLuRYb9N1jVj9Gig/AlqsEfT/m+RtzHm4mawmHqeQbEV+0C0Qvc6fKRb1060Nkzfz8TDNGu5B+Xzq5A==", - "requires": { - "tslib": "^2.0.0" - } + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "dev": true, + "license": "MIT" }, - "@angular/material-moment-adapter": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-10.2.5.tgz", - "integrity": "sha512-2nIYwG5Xfd2XTaag8ZZKc7zUKHeh3xkFZA/+iCEDA+i0kuS+6OUUj5+wBxsl8TWC6joxoWdKMrReXjfJOlwD0A==", - "requires": { - "tslib": "^2.0.0" - } + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "dev": true, + "license": "MIT" }, - "@angular/platform-browser": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.2.0.tgz", - "integrity": "sha512-GqO4MH7sddzvirr6AwxPXIfFFQp1+Xs5BCguSajyqt7i1j7vA0mKvFCvO7tIYmJmepWa0YPs9cXtq8nxDAoqVA==", - "requires": { - "tslib": "^2.0.0" - } + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "dev": true, + "license": "MIT" }, - "@angular/platform-browser-dynamic": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.2.0.tgz", - "integrity": "sha512-S1yBpoJjQcGrvkoHhy+We1lMi/TONzSAUTYz05WexDC6N8eLX4NpbjOUHxtYH5JfXltQ2B32zycyjwyB2t2ulA==", - "requires": { - "tslib": "^2.0.0" + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "@angular/platform-server": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-10.2.0.tgz", - "integrity": "sha512-eIc7xiGPylQ6uExx+LeTOHFRDtsbRe4sqgbjsfmlQfvxuVbYRzacXctvymjqr1cGzYW+CpB/3eQoz7uX/BGOog==", - "requires": { - "domino": "^2.1.2", - "tslib": "^2.0.0", - "xhr2": "^0.2.0" - } + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "dev": true, + "license": "MIT" }, - "@angular/router": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-10.2.0.tgz", - "integrity": "sha512-iAaJqcFrwduL1YopLrw4ax6kWd2FrqcGjcf0GY2ZUEEcwo5hQVMrKAt7MUJPVHGZf+OzSYJBgP7ApU60oZ43AA==", - "requires": { - "tslib": "^2.0.0" + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, - "@apidevtools/json-schema-ref-parser": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz", - "integrity": "sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==", + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", "dev": true, - "requires": { - "@jsdevtools/ono": "^7.1.3", - "call-me-maybe": "^1.0.1", - "js-yaml": "^3.13.1" + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" } }, - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "@babel/compat-data": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", - "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==", - "dev": true + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "dev": true, + "license": "MIT" }, - "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, - "@babel/generator": { - "version": "7.9.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.3.tgz", - "integrity": "sha512-RpxM252EYsz9qLUIq6F7YJyK1sv0wWDBFuztfDGWaQKzHjqDHysxSiRUpA/X9jmfqo+WzkAVKFaUily5h+gDCQ==", + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", "dev": true, - "requires": { - "@babel/types": "^7.9.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "@babel/helper-compilation-targets": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", - "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", + "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", "dev": true, - "requires": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.12.0", - "semver": "^5.5.0" + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "node_modules/@angular-devkit/build-angular/node_modules/acorn": { + "version": "8.10.0", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "engines": { + "node": ">=0.4.0" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", - "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.1" - }, - "dependencies": { - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - } + "node_modules/@angular-devkit/build-angular/node_modules/acorn-import-assertions": { + "version": "1.9.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "node_modules/@angular-devkit/build-angular/node_modules/ajv": { + "version": "8.12.0", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - }, + "license": "MIT", "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "node_modules/@angular-devkit/build-angular/node_modules/ajv-keywords": { + "version": "5.1.0", "dev": true, - "requires": { - "@babel/types": "^7.12.1" - }, + "license": "MIT", "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "node_modules/@angular-devkit/build-angular/node_modules/copy-webpack-plugin": { + "version": "11.0.0", "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "node_modules/@angular-devkit/build-angular/node_modules/es-module-lexer": { + "version": "0.9.3", "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } + "license": "MIT" }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", + "node_modules/@angular-devkit/build-angular/node_modules/glob-parent": { + "version": "6.0.2", "dev": true, - "requires": { - "@babel/types": "^7.10.1" - }, + "license": "ISC", "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", + "node_modules/@angular-devkit/build-angular/node_modules/globby": { + "version": "13.2.2", "dev": true, - "requires": { - "@babel/types": "^7.10.1" - }, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/helper-module-transforms": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", - "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } - } + "node_modules/@angular-devkit/build-angular/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", + "node_modules/@angular-devkit/build-angular/node_modules/schema-utils": { + "version": "4.2.0", "dev": true, - "requires": { - "@babel/types": "^7.10.1" - }, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - } + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "node_modules/@angular-devkit/build-angular/node_modules/serialize-javascript": { + "version": "6.0.1", "dev": true, - "requires": { - "lodash": "^4.17.19" + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" } }, - "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "node_modules/@angular-devkit/build-angular/node_modules/slash": { + "version": "4.0.0", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "license": "MIT", + "engines": { + "node": ">=12" }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.4.0", "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } + "license": "0BSD" }, - "@babel/helper-simple-access": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", - "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", + "node_modules/@angular-devkit/build-angular/node_modules/webpack": { + "version": "5.76.1", "dev": true, - "requires": { - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - }, + "license": "MIT", "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "node_modules/@angular-devkit/build-angular/node_modules/webpack-merge": { + "version": "5.8.0", "dev": true, - "requires": { - "@babel/types": "^7.12.1" - }, + "license": "MIT", "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "node_modules/@angular-devkit/build-angular/node_modules/webpack-sources": { + "version": "3.2.3", "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", - "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz", - "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz", - "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz", - "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz", - "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz", - "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "license": "MIT", + "engines": { + "node": ">=10.13.0" } }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "node_modules/@angular-devkit/build-angular/node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - }, + "license": "MIT", "dependencies": { - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - } + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "node_modules/@angular-devkit/build-angular/node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "node_modules/@angular-devkit/build-angular/node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "MIT" }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "node_modules/@angular-devkit/build-angular/node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1402.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.13.tgz", + "integrity": "sha512-K27aJmuw86ZOdiu5PoGeGDJ2v7g2ZCK0bGwc8jzkjTLRfvd4FRKIIZumGv3hbQ3vQRLikiU6WMDRTFyCZky/EA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "dependencies": { + "@angular-devkit/architect": "0.1402.13", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { + "version": "0.1402.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.13.tgz", + "integrity": "sha512-n0ISBuvkZHoOpAzuAZql1TU9VLHUE9e/a9g4VNOPHewjMzpN02VqeGKvJfOCKtzkCs6gVssIlILm2/SXxkIFxQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "dependencies": { + "@angular-devkit/core": "14.2.13", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.13.tgz", + "integrity": "sha512-aIefeZcbjghQg/V6U9CTLtyB5fXDJ63KwYqVYkWP+i0XriS5A9puFgq2u/OVsWxAfYvqpDqp5AdQ0g0bi3CAsA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "dependencies": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.1.0", + "rxjs": "6.6.7", + "source-map": "0.7.4" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "node_modules/@angular-devkit/build-webpack/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", - "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "node_modules/@angular-devkit/build-webpack/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/@angular-devkit/core": { + "version": "14.2.12", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "license": "MIT", + "dependencies": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.1.0", + "rxjs": "6.6.7", + "source-map": "0.7.4" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "node_modules/@angular-devkit/core/node_modules/ajv": { + "version": "8.11.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "node_modules/@angular-devkit/core/node_modules/json-schema-traverse": { + "version": "1.0.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } + "license": "MIT" }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", - "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "node_modules/@angular-devkit/schematics": { + "version": "14.2.12", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "14.2.12", + "jsonc-parser": "3.1.0", + "magic-string": "0.26.2", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/@angular/animations": { + "version": "14.3.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/core": "14.3.0" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/@angular/cdk": { + "version": "14.2.7", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^5.0.0" + }, + "peerDependencies": { + "@angular/common": "^14.0.0 || ^15.0.0", + "@angular/core": "^14.0.0 || ^15.0.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@angular/cli": { + "version": "14.2.12", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1402.12", + "@angular-devkit/core": "14.2.12", + "@angular-devkit/schematics": "14.2.12", + "@schematics/angular": "14.2.12", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "debug": "4.3.4", + "ini": "3.0.0", + "inquirer": "8.2.4", + "jsonc-parser": "3.1.0", + "npm-package-arg": "9.1.0", + "npm-pick-manifest": "7.0.1", + "open": "8.4.0", + "ora": "5.4.1", + "pacote": "13.6.2", + "resolve": "1.22.1", + "semver": "7.5.3", + "symbol-observable": "4.0.0", + "uuid": "8.3.2", + "yargs": "17.5.1" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "node_modules/@angular/cli/node_modules/@schematics/angular": { + "version": "14.2.12", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "14.2.12", + "@angular-devkit/schematics": "14.2.12", + "jsonc-parser": "3.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@angular/common": { + "version": "14.3.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/core": "14.3.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "node_modules/@angular/compiler": { + "version": "14.3.0", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/core": "14.3.0" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/@angular/compiler-cli": { + "version": "14.3.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.17.2", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.11.0", + "magic-string": "^0.26.0", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "sourcemap-codec": "^1.4.8", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/main-ngcc.js" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/compiler": "14.3.0", + "typescript": ">=4.6.2 <4.9" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/@angular/core": { + "version": "14.3.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.11.4 || ~0.12.0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@angular/flex-layout": { + "version": "14.0.0-beta.41", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": "^14.0.0", + "@angular/common": "^14.0.0", + "@angular/core": "^14.0.0", + "@angular/platform-browser": "^14.0.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/@angular/forms": { + "version": "14.3.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/common": "14.3.0", + "@angular/core": "14.3.0", + "@angular/platform-browser": "14.3.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@angular/language-service": { + "version": "14.3.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "license": "MIT", + "engines": { + "node": "^14.15.0 || >=16.10.0" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@angular/material": { + "version": "14.2.7", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^14.0.0 || ^15.0.0", + "@angular/cdk": "14.2.7", + "@angular/common": "^14.0.0 || ^15.0.0", + "@angular/core": "^14.0.0 || ^15.0.0", + "@angular/forms": "^14.0.0 || ^15.0.0", + "@angular/platform-browser": "^14.0.0 || ^15.0.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@angular/material-moment-adapter": { + "version": "14.2.7", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/core": "^14.0.0 || ^15.0.0", + "@angular/material": "14.2.7", + "moment": "^2.18.1" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/@angular/platform-browser": { + "version": "14.3.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/animations": "14.3.0", + "@angular/common": "14.3.0", + "@angular/core": "14.3.0" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/@angular/platform-browser-dynamic": { + "version": "14.3.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/common": "14.3.0", + "@angular/compiler": "14.3.0", + "@angular/core": "14.3.0", + "@angular/platform-browser": "14.3.0" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "node_modules/@angular/platform-server": { + "version": "14.3.0", + "license": "MIT", + "dependencies": { + "domino": "^2.1.2", + "tslib": "^2.3.0", + "xhr2": "^0.2.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" }, + "peerDependencies": { + "@angular/animations": "14.3.0", + "@angular/common": "14.3.0", + "@angular/compiler": "14.3.0", + "@angular/core": "14.3.0", + "@angular/platform-browser": "14.3.0", + "@angular/platform-browser-dynamic": "14.3.0" + } + }, + "node_modules/@angular/router": { + "version": "14.3.0", + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/common": "14.3.0", + "@angular/core": "14.3.0", + "@angular/platform-browser": "14.3.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.0.9", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { + "version": "2.0.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "license": "Python-2.0" }, - "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { + "version": "4.1.0", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - }, + "license": "MIT", "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "Apache-2.0" + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "node_modules/@babel/compat-data": { + "version": "7.22.20", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "node_modules/@babel/core": { + "version": "7.18.10", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "node_modules/@babel/generator": { + "version": "7.18.12", "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.15", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, + "license": "MIT", "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, + "license": "MIT", "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" - }, + "license": "MIT", "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" - }, + "license": "MIT", "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", - "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.1", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.22.15", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-runtime": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz", - "integrity": "sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", - "semver": "^5.5.1" + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.0", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", - "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/preset-env": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", - "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.11.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.11.0", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.0", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/helper-module-imports": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", - "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - }, + "license": "MIT", "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - } + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/traverse": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", - "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", + "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { + "version": "7.22.15", "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", - "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", + "node_modules/@babel/helpers": { + "version": "7.23.1", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - }, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - } + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@cfstratos/ajsf-core": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@cfstratos/ajsf-core/-/ajsf-core-0.1.6.tgz", - "integrity": "sha512-G47ZAvn7ynuUkB2XzeewxhDB9yB5EYcBWfmBYB6FeEkFzX9PpcaCm8QK72IO6Kis+HjAvO5kwqiud9TXUPhMNw==", - "requires": { - "ajv": "^6.10.0", - "lodash-es": "^4.17.15" + "node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "7.22.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "@cfstratos/ajsf-material": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@cfstratos/ajsf-material/-/ajsf-material-0.1.6.tgz", - "integrity": "sha512-dUV2aqwQoRCaedNh31ZVZUgDhWqdiJnikag/Nws5h4fFs6sdmL2sS8A18e6onLA8t9t4n0y8PEib6qgxqr3ezw==", - "requires": { - "@cfstratos/ajsf-core": "~0.1.5", - "lodash-es": "^4.17.15" + "node_modules/@babel/highlight": { + "version": "7.22.20", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@cfstratos/monaco-yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@cfstratos/monaco-yaml/-/monaco-yaml-2.5.0.tgz", - "integrity": "sha512-4ojHL0lnXZHHW8k2J8ipaXsl+aQj3bOXVdJEIwyhLtsJcYpq3npEiQkQs/U7ySi4Ehm/3qTdccXlilAyuWLxyw==", - "requires": { - "js-yaml": "^3.12.0", - "prettier": "^1.19.1", - "vscode-json-languageservice": "^3.8.3", - "vscode-languageserver": "^6.1.1", - "vscode-uri": "^2.1.2" + "node_modules/@babel/parser": { + "version": "7.23.0", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" }, - "dependencies": { - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "optional": true - } + "engines": { + "node": ">=6.0.0" } }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.15", "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, + "license": "MIT", "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true - }, - "@jsdevtools/coverage-istanbul-loader": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", - "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.15", "dev": true, - "requires": { - "convert-source-map": "^1.7.0", - "istanbul-lib-instrument": "^4.0.3", - "loader-utils": "^2.0.0", - "merge-source-map": "^1.1.0", - "schema-utils": "^2.7.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true - }, - "@ngrx/effects": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-10.0.1.tgz", - "integrity": "sha512-pw0hRQNlyBBRHH1NRWl3TF+RtEAS4XOSnoTHPtQ84Ib/bEribvexsdEq3k6yLWvR3tLTudb5J6SYwYawcM6omA==", - "requires": { - "tslib": "^2.0.0" + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@ngrx/router-store": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-10.0.1.tgz", - "integrity": "sha512-UuTIYJWKhYv5xlhcJw3pz3C+DbLk5DzTWYJ03B7J+O2ELnKlbMDdjoejzNVDGOGKKWjzg/irNvkC/Opu2Zspqg==", - "requires": { - "tslib": "^2.0.0" + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@ngrx/store": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-10.0.1.tgz", - "integrity": "sha512-ZbPvhp/tRYnS3jZ28mDOX2LH3jfySXT0uv8ffIboM/o9QxBGHpAJyBct2zkpy4duYBc3i/sIbRn+CEpAjLXjHw==", - "requires": { - "tslib": "^2.0.0" + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "@ngrx/store-devtools": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-10.0.1.tgz", - "integrity": "sha512-kwgF1yjjVn0FER+AG83OLCYSMuX4/E3L+DN4doSoZs4BNO9FdkYIIA4ul1nXT5d6SLiFFTmlufmbgc6HCF3pjQ==", - "requires": { - "tslib": "^2.0.0" + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@ngtools/webpack": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.2.0.tgz", - "integrity": "sha512-W4SSFNQhIiC8JRhIn3c4mb1+fsFKiHp+THVMAUNo+wRZEt/rgzsCdnqv0EmQJJojZhnilUIyB/wVYJu2+S/Bxg==", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", "dev": true, - "requires": { - "@angular-devkit/core": "10.2.0", - "enhanced-resolve": "4.3.0", - "webpack-sources": "1.4.3" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", "dev": true, - "requires": { - "mkdirp": "^1.0.4" - }, + "license": "MIT", "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@rollup/plugin-commonjs": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz", - "integrity": "sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ==", + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "dependencies": { - "resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", - "dev": true, - "requires": { - "is-core-module": "^2.0.0", - "path-parse": "^1.0.6" - } - } + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@rollup/plugin-json": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", "dev": true, - "requires": { - "@rollup/pluginutils": "^3.0.8" + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@rollup/plugin-node-resolve": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz", - "integrity": "sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg==", + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.17.0" - }, + "license": "MIT", "dependencies": { - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", - "dev": true, - "requires": { - "is-core-module": "^2.0.0", - "path-parse": "^1.0.6" - } - } + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, + "license": "MIT", "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@schematics/angular": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.7.tgz", - "integrity": "sha512-ld3WcoMWvup04V3OWioQ+AFGQBzz7IDM4Fxc5+Qc3wILWkDJnNkrc4EmJAow96Ab4/T1+Wl1vof3tV4At0BTzA==", - "dev": true, - "requires": { - "@angular-devkit/core": "9.1.7", - "@angular-devkit/schematics": "9.1.7" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.7.tgz", - "integrity": "sha512-guvolu9Cl+qYMTtedLZD9wCqustJjdqzJ2psD2C1Sr1LrX9T0mprmDldR/YnhsitThveJEb6sM/0EvqWxoSvKw==", - "dev": true, - "requires": { - "ajv": "6.12.0", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.5.4", - "source-map": "0.7.3" - } - }, - "@angular-devkit/schematics": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-9.1.7.tgz", - "integrity": "sha512-oeHPJePBcPp/bd94jHQeFUnft93PGF5iJiKV9szxqS8WWC5OMZ5eK7icRY0PwvLyfenspAZxdZcNaqJqPMul5A==", - "dev": true, - "requires": { - "@angular-devkit/core": "9.1.7", - "ora": "4.0.3", - "rxjs": "6.5.4" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ora": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.3.tgz", - "integrity": "sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@schematics/update": { - "version": "0.1002.0", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1002.0.tgz", - "integrity": "sha512-g2bfJSAj3x/YL0GNhnHsDSQmO6DoxSnLxoFLqNN5+ukxK5jq7OZNDwMJGxZ3X6RcSMWKEkIKL/wlq9yhj2T/kw==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", "dev": true, - "requires": { - "@angular-devkit/core": "10.2.0", - "@angular-devkit/schematics": "10.2.0", - "@yarnpkg/lockfile": "1.1.0", - "ini": "1.3.5", - "npm-package-arg": "^8.0.0", - "pacote": "9.5.12", - "semver": "7.3.2", - "semver-intersect": "1.4.0" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@swimlane/ngx-charts": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@swimlane/ngx-charts/-/ngx-charts-16.0.0.tgz", - "integrity": "sha512-ltbyA7qhnbdNcjWD0NerObHrDzWgDDja8M8R1RVgBZnkaoJFpB/KZ1W3+Ch9F1y9pCy/zdpWSzwd/RzCEhsQhA==", - "requires": { - "d3-array": "^2.4.0", - "d3-brush": "^1.1.5", - "d3-color": "^1.4.0", - "d3-format": "^1.4.2", - "d3-hierarchy": "^1.1.9", - "d3-interpolate": "^1.4.0", - "d3-scale": "^3.2.1", - "d3-selection": "^1.4.1", - "d3-shape": "^1.3.7", - "d3-time-format": "^2.2.2", - "d3-transition": "^1.3.2", - "tslib": "^2.0.0" + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@swimlane/ngx-graph": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@swimlane/ngx-graph/-/ngx-graph-7.2.0.tgz", - "integrity": "sha512-W9/UfwxKp5+vevATgka1alMQwB5g0GYcZf1EkBp4cPOXUthDl3hgmw4v1fXAszO92qT9jzSgGGpufKlZDt0yJQ==", - "requires": { - "@swimlane/ngx-charts": "^16.0.0", - "d3-dispatch": "^1.0.3", - "d3-ease": "^1.0.5", - "d3-force": "^1.1.0", - "d3-selection": "^1.2.0", - "d3-shape": "^1.2.0", - "d3-timer": "^1.0.7", - "d3-transition": "^1.1.1", - "dagre": "^0.8.4", - "transformation-matrix": "^1.15.3", - "tslib": "^2.0.0", - "webcola": "^3.3.8" + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@tweenjs/tween.js": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-17.4.0.tgz", - "integrity": "sha512-J3fzl1F6wvh8KXVVcIuHN12xi1ZDcPA/0Vix+ZcJYwZWVHUwfIqfvzYXXEw7ybeev6477KCTt9fKydU+ajUqcg==" - }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, - "@types/circular-json": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@types/circular-json/-/circular-json-0.4.0.tgz", - "integrity": "sha512-7+kYB7x5a7nFWW1YPBh3KxhwKfiaI4PbZ1RvzBU91LZy7lWJO822CI+pqzSre/DZ7KsCuMKdHnLHHFu8AyXbQg==" - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@types/jasmine": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.5.10.tgz", - "integrity": "sha512-3F8qpwBAiVc5+HPJeXJpbrl+XjawGmciN5LgiO7Gv1pl1RHtjoMNqZpqEksaPJW05ViKe8snYInRs6xB25Xdew==", - "dev": true - }, - "@types/jasminewd2": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.8.tgz", - "integrity": "sha512-d9p31r7Nxk0ZH0U39PTH0hiDlJ+qNVGjlt1ucOoTUptxb2v+Y5VMnsxfwN+i3hK4yQnqBi3FMmoMFcd1JHDxdg==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", "dev": true, - "requires": { - "@types/jasmine": "*" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@types/js-yaml": { - "version": "3.12.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.5.tgz", - "integrity": "sha512-JCcp6J0GV66Y4ZMDAQCXot4xprYB+Zfd3meK9+INSJeVZwJmHAW30BBEEkPzXswMXuiyReUGOP3GxrADc9wPww==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", - "dev": true - }, - "@types/karma": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/karma/-/karma-5.0.0.tgz", - "integrity": "sha512-5quuLnxdJWkzJCEwFatOClM6O7EkeDWfXltGySb01LQnBVjtbLzIky9JLW0IKt+JfzurUjwj7b7Sb/Omsx4QYA==", + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", "dev": true, - "requires": { - "@types/node": "*", - "log4js": "^4.0.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@types/marked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-1.1.0.tgz", - "integrity": "sha512-j8XXj6/l9kFvCwMyVqozznqpd/nk80krrW+QiIJN60Uu9gX5Pvn4/qPJ2YngQrR3QREPwmrE1f9/EWKVTFzoEw==" - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "@types/moment-timezone": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@types/moment-timezone/-/moment-timezone-0.5.13.tgz", - "integrity": "sha512-SWk1qM8DRssS5YR9L4eEX7WUhK/wc96aIr4nMa6p0kTk9YhGGOJjECVhIdPEj13fvJw72Xun69gScXSZ/UmcPg==", - "requires": { - "moment": ">=2.14.0" + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@types/node": { - "version": "13.13.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.11.tgz", - "integrity": "sha512-FX7mIFKfnGCfq10DGWNhfCNxhACEeqH5uulT6wRRA1KEt7zgLe0HdrAd9/QQkObDqp2Z0KEV3OAmNgs0lTx5tQ==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, - "@types/request": { - "version": "2.48.4", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.4.tgz", - "integrity": "sha512-W1t1MTKYR8PxICH+A4HgEIPuAC3sbljoEVfyZbeFJJDbr30guDspJri2XOaM2E+Un7ZjrihaDi7cf6fPa2tbgw==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", "dev": true, - "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - }, - "dependencies": { - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", "dev": true, - "requires": { - "@types/node": "*" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@types/selenium-webdriver": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz", - "integrity": "sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw==", - "dev": true - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/stacktrace-js": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/stacktrace-js/-/stacktrace-js-0.0.33.tgz", - "integrity": "sha512-aqJ6QM9QThNL4dHBhwl1f9B0oDqiREkYLn9RldghUKsGeFWWGlCsqsRWxbh+hDvvmptMFqc4aIfFIGz9BBu8Qg==" - }, - "@types/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", - "dev": true - }, - "@types/webpack-sources": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz", - "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" - }, + "license": "MIT", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", "dev": true, - "requires": { - "@xtuc/long": "4.2.2" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.0", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "node_modules/@babel/plugin-transform-computed-properties/node_modules/@babel/template": { + "version": "7.22.15", "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" } }, - "acorn": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", - "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.0", "dev": true, - "requires": { - "acorn": "^3.0.4" - }, + "license": "MIT", "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", "dev": true, - "requires": { - "es6-promisify": "^5.0.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "agentkeepalive": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", - "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", "dev": true, - "requires": { - "humanize-ms": "^1.2.1" + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.15", "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "angular2-virtual-scroll": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/angular2-virtual-scroll/-/angular2-virtual-scroll-0.4.16.tgz", - "integrity": "sha512-6NWk0DjCh4ebU8+LgfBoKYyp3McxDA/k5vTnEiV32VpVnyhN//eThZpVpggI1D2fJBqgTAY09C8v++qXHHLP7A==", - "requires": { - "@tweenjs/tween.js": "^17.1.0" + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.0", "dev": true, - "requires": { - "type-fest": "^0.11.0" + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.0", "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "app-root-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", - "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==", - "dev": true + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", - "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", - "dev": true - }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", "dev": true, - "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.18.10", "dev": true, - "requires": { - "array-uniq": "^1.0.1" + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", "dev": true, - "requires": { - "safer-buffer": "~2.1.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, + "license": "MIT", "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, + "license": "MIT", "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", "dev": true, - "requires": { - "lodash": "^4.17.14" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "async-array-reduce": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/async-array-reduce/-/async-array-reduce-0.2.1.tgz", - "integrity": "sha1-yL4BCitc0A3qlsgRFgNGk9/dgtE=", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "9.7.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz", - "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", "dev": true, - "requires": { - "browserslist": "^4.8.3", - "caniuse-lite": "^1.0.30001020", - "chalk": "^2.4.2", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.26", - "postcss-value-parser": "^4.0.2" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true - }, - "axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", "dev": true, - "requires": { - "ast-types-flow": "0.0.7" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", "dev": true, - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, + "license": "MIT", "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "node_modules/@babel/preset-env": { + "version": "7.18.10", "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bent": { - "version": "7.3.12", - "resolved": "https://registry.npmjs.org/bent/-/bent-7.3.12.tgz", - "integrity": "sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==", - "requires": { - "bytesish": "^0.4.1", - "caseless": "~0.12.0", - "is-stream": "^2.0.0" - }, + "license": "MIT", "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - } + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", "dev": true, - "requires": { - "callsite": "1.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "node_modules/@babel/preset-modules": { + "version": "0.1.6", "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "blocking-proxy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", - "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", + "node_modules/@babel/regjsgen": { + "version": "0.8.0", "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true + "license": "MIT" }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "node_modules/@babel/runtime": { + "version": "7.18.9", "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, + "license": "MIT", "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "node_modules/@babel/template": { + "version": "7.18.10", "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true + "node_modules/@babel/traverse": { + "version": "7.23.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.23.0", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" + "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true + "node_modules/@babel/types": { + "version": "7.23.0", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "node_modules/@cfstratos/monaco-yaml": { + "version": "2.5.0", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.12.0", + "vscode-json-languageservice": "^3.8.3", + "vscode-languageserver": "^6.1.1", + "vscode-uri": "^2.1.2" + }, + "optionalDependencies": { + "prettier": "^1.19.1" + }, + "peerDependencies": { + "monaco-editor": "^0.20.0" } }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "node_modules/@colors/colors": { + "version": "1.5.0", "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=0.1.90" } }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" } }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, + "license": "MIT", "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", "dev": true, - "requires": { - "pako": "~1.0.5" + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "browserslist": { - "version": "4.14.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", - "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001135", - "electron-to-chromium": "^1.3.571", - "escalade": "^3.1.0", - "node-releases": "^1.1.61" + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "browserstack": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", - "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", "dev": true, - "requires": { - "https-proxy-agent": "^2.2.1" - }, + "license": "CC0-1.0", "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "browserstack-local": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/browserstack-local/-/browserstack-local-1.4.5.tgz", - "integrity": "sha512-0/VdSv2YVXmcnwBb64XThMvjM1HnZJnPdv7CUgQbC5y/N9Wsr0Fu+j1oknE9fC/VPx9CpoSC6CJ0kza42skMSA==", + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", "dev": true, - "requires": { - "https-proxy-agent": "^4.0.0", - "is-running": "^2.1.0", - "ps-tree": "=1.2.0", - "temp-fs": "^0.9.9" - }, + "license": "CC0-1.0", "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, - "requires": { - "agent-base": "5", - "debug": "4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "bytesish": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz", - "integrity": "sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==" - }, - "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.0", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, + "license": "CC0-1.0", "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "cache-base": { + "node_modules/@csstools/postcss-normalize-display-values": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, - "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, + "license": "CC0-1.0", "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", "dev": true, - "requires": { - "callsites": "^2.0.0" + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", "dev": true, - "requires": { - "caller-callsite": "^2.0.0" + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "caniuse-lite": { - "version": "1.0.30001151", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001151.tgz", - "integrity": "sha512-Zh3sHqskX6mHNrqUerh+fkf0N72cMxrmflzje/JyVImfpknscMnkeJrlFGJcqTmaa0iszdYptGpWMJCRQDkBVw==", - "dev": true - }, - "canonical-path": { + "node_modules/@csstools/postcss-text-decoration-shorthand": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "license": "CC0-1.0", "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { + "node_modules/@csstools/postcss-unset-value": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, - "requires": { - "tslib": "^1.9.0" + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" } }, - "circular-dependency-plugin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz", - "integrity": "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==", - "dev": true - }, - "circular-json": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", - "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==" - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "node_modules/@cypress/request": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", + "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.10.4", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.0.tgz", - "integrity": "sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A==", + "node_modules/@cypress/request/node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", "dev": true, - "requires": { - "ansi-regex": "^2.1.1", - "d": "^1.0.1", - "es5-ext": "^0.10.51", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.14", - "timers-ext": "^0.1.7" + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" } }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/@cypress/request/node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", "dev": true, - "requires": { - "restore-cursor": "^3.1.0" + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" } }, - "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", - "dev": true - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "node_modules/@cypress/request/node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "codecov": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.7.1.tgz", - "integrity": "sha512-JHWxyPTkMLLJn9SmKJnwAnvY09kg2Os2+Ux+GG7LwZ9g8gzDDISpIN5wAsH1UBaafA/yGcd3KofMaorE8qd6Lw==", + "node_modules/@cypress/request/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, - "requires": { - "argv": "0.0.2", - "ignore-walk": "3.0.3", - "js-yaml": "3.13.1", - "teeny-request": "6.0.1", - "urlgrey": "0.4.4" - }, - "dependencies": { - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } + "engines": { + "node": ">= 4.0.0" } }, - "codelyzer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.1.tgz", - "integrity": "sha512-cOyGQgMdhnRYtW2xrJUNrNYDjEgwQ+BrE2y93Bwz3h4DJ6vJRLfupemU5N3pbYsUlBHJf0u1j1UGk+NLW4d97g==", - "dev": true, - "requires": { - "@angular/compiler": "9.0.0", - "@angular/core": "9.0.0", - "app-root-path": "^3.0.0", - "aria-query": "^3.0.0", - "axobject-query": "2.0.2", - "css-selector-tokenizer": "^0.7.1", - "cssauron": "^1.4.0", - "damerau-levenshtein": "^1.0.4", - "rxjs": "^6.5.3", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.7", - "sprintf-js": "^1.1.2", - "tslib": "^1.10.0", - "zone.js": "~0.10.3" - }, - "dependencies": { - "@angular/compiler": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", - "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", - "dev": true - }, - "@angular/core": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", - "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "node_modules/@gar/promisify": { + "version": "1.1.3", "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } + "license": "MIT" }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", "dev": true, - "requires": { - "delayed-stream": "~1.0.0" + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", "dev": true, - "requires": { - "arity-n": "^1.0.4" + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" } }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "connected-domain": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/connected-domain/-/connected-domain-1.0.0.tgz", - "integrity": "sha1-v+dyOMdL5FOnnwy2BY3utPI1jpM=", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", "dev": true, - "requires": { - "safe-buffer": "5.1.2" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", "dev": true, - "requires": { - "safe-buffer": "~5.1.1" + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "license": "MIT" }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } + "license": "MIT" }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, - "copy-webpack-plugin": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.2.0.tgz", - "integrity": "sha512-1s/VbhIX73FBFBYF4D0KdeBLkjEnAlCQn0Ufo2a/IyJ41jHpQ9ZzM4JAfbE7yTOhbmwRFkARErJ/XIiLceja6Q==", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^2.7.1", - "serialize-javascript": "^5.0.1", - "webpack-sources": "^1.4.3" - }, + "node_modules/@ngrx/effects": { + "version": "14.3.3", + "license": "MIT", "dependencies": { - "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", - "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.0", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": "^14.0.0", + "@ngrx/store": "14.3.3", + "rxjs": "^6.5.3 || ^7.5.0" } }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "dev": true, - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, + "node_modules/@ngrx/router-store": { + "version": "14.3.3", + "license": "MIT", "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "^14.0.0", + "@angular/core": "^14.0.0", + "@angular/router": "^14.0.0", + "@ngrx/store": "14.3.3", + "rxjs": "^6.5.3 || ^7.5.0" } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "node_modules/@ngrx/store": { + "version": "14.3.3", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": "^14.0.0", + "rxjs": "^6.5.3 || ^7.5.0" + } }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "node_modules/@ngrx/store-devtools": { + "version": "14.3.3", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@ngrx/store": "14.3.3", + "rxjs": "^6.5.3 || ^7.5.0" } }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "node_modules/@ngtools/webpack": { + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.13.tgz", + "integrity": "sha512-RQx/rGX7K/+R55x1R6Ax1JzyeHi8cW11dEXpzHWipyuSpusQLUN53F02eMB4VTakXsL3mFNWWy4bX3/LSq8/9w==", "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "peerDependencies": { + "@angular/compiler-cli": "^14.0.0", + "typescript": ">=4.6.2 <4.9", + "webpack": "^5.54.0" } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "license": "MIT", + "engines": { + "node": ">= 8" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "node_modules/@npmcli/fs": { + "version": "2.1.2", "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "node_modules/@npmcli/git": { + "version": "3.0.2", "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, + "license": "ISC", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" + "license": "ISC", + "engines": { + "node": ">=12" } }, - "css-loader": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.2.2.tgz", - "integrity": "sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg==", + "node_modules/@npmcli/git/node_modules/which": { + "version": "2.0.2", "dev": true, - "requires": { - "camelcase": "^6.0.0", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^2.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.3", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^7.3.2" - }, - "dependencies": { - "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "css-parse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", - "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", "dev": true, - "requires": { - "css": "^2.0.0" + "license": "ISC", + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" } }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "node_modules/@npmcli/move-file": { + "version": "2.0.1", "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "node_modules/@npmcli/node-gyp": { + "version": "2.0.0", "dev": true, - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "node_modules/@npmcli/promise-spawn": { + "version": "3.0.0", "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, + "license": "ISC", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "infer-owner": "^1.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "node_modules/@npmcli/run-script": { + "version": "4.2.1", "dev": true, - "requires": { - "through": "X.X.X" + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "2.0.2", "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", - "dev": true, - "requires": { - "css-tree": "1.0.0-alpha.39" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", - "dev": true, - "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" } }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", - "dev": true - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "node_modules/@rollup/plugin-json": { + "version": "4.1.0", "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.0.8" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" } }, - "d3-array": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.8.0.tgz", - "integrity": "sha512-6V272gsOeg7+9pTW1jSYOR1QE37g95I3my1hBmY+vOUNHRrk9yt4OTz/gK7PMkVAVDrYYq4mq3grTiZ8iJdNIw==" - }, - "d3-brush": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", - "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" } }, - "d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" - }, - "d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" - }, - "d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" - }, - "d3-drag": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", - "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", - "requires": { - "d3-dispatch": "1", - "d3-selection": "1" + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, - "d3-ease": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.6.tgz", - "integrity": "sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ==" - }, - "d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", - "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" + "node_modules/@schematics/angular": { + "version": "9.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "9.1.13", + "@angular-devkit/schematics": "9.1.13" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" } }, - "d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" - }, - "d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" - }, - "d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "requires": { - "d3-color": "1" + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "9.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "6.12.3", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.5.4", + "source-map": "0.7.3" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" } }, - "d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "d3-quadtree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", - "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" - }, - "d3-scale": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.2.3.tgz", - "integrity": "sha512-8E37oWEmEzj57bHcnjPVOBS3n4jqakOeuv1EDdQSiSrYnMCBdMd3nc4HtKk7uia8DUHcY/CGuJ42xxgtEYrX0g==", - "requires": { - "d3-array": "^2.3.0", - "d3-format": "1 - 2", - "d3-interpolate": "1.2.0 - 2", - "d3-time": "1 - 2", - "d3-time-format": "2 - 3" + "node_modules/@schematics/angular/node_modules/@angular-devkit/schematics": { + "version": "9.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "9.1.13", + "ora": "4.0.3", + "rxjs": "6.5.4" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 6.11.0", + "yarn": ">= 1.13.0" } }, - "d3-selection": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.1.tgz", - "integrity": "sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA==" - }, - "d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "requires": { - "d3-path": "1" + "node_modules/@schematics/angular/node_modules/ajv": { + "version": "6.12.3", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "d3-time": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.0.0.tgz", - "integrity": "sha512-2mvhstTFcMvwStWd9Tj3e6CEqtOivtD8AUiHT8ido/xmzrI9ijrUUihZ6nHuf/vsScRBonagOdj0Vv+SEL5G3Q==" - }, - "d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "requires": { - "d3-time": "1" - }, + "node_modules/@schematics/angular/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" - }, - "d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", - "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", - "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" + "node_modules/@schematics/angular/node_modules/chalk": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "requires": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" + "node_modules/@schematics/angular/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "damerau-levenshtein": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", - "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", - "dev": true + "node_modules/@schematics/angular/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "node_modules/@schematics/angular/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "requires": { - "assert-plus": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "node_modules/@schematics/angular/node_modules/log-symbols": { + "version": "3.0.0", "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" } }, - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@schematics/angular/node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, - "requires": { - "ms": "2.0.0" + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "node_modules/@schematics/angular/node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "node_modules/@schematics/angular/node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } }, - "deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" + "node_modules/@schematics/angular/node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "node_modules/@schematics/angular/node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "node_modules/@schematics/angular/node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", "dev": true, - "requires": { - "strip-bom": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "node_modules/@schematics/angular/node_modules/magic-string": { + "version": "0.25.7", "dev": true, - "requires": { - "clone": "^1.0.2" - }, + "license": "MIT", "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - } + "sourcemap-codec": "^1.4.4" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "node_modules/@schematics/angular/node_modules/ora": { + "version": "4.0.3", "dev": true, - "requires": { - "object-keys": "^1.0.12" + "license": "MIT", + "dependencies": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=8" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/@schematics/angular/node_modules/rxjs": { + "version": "6.5.4", "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, + "license": "Apache-2.0", "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" } }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } + "node_modules/@schematics/angular/node_modules/source-map": { + "version": "0.7.3", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delete": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/delete/-/delete-1.1.0.tgz", - "integrity": "sha512-bdhJatRNYsJnOhSRx9Eej3ABBtxQQw/uz2RprpYL5R3jCC2XMYVBcQWwvQLl+iNDk4LCLEKhdIP3uZSqRWi/tw==", + "node_modules/@schematics/angular/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "requires": { - "async-each": "^1.0.1", - "extend-shallow": "^2.0.1", - "matched": "^1.0.2", - "rimraf": "^2.6.1" - }, + "license": "MIT", "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "dependency-graph": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", - "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", - "dev": true + "node_modules/@schematics/angular/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "license": "MIT" + }, + "node_modules/@swimlane/ngx-charts": { + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/@swimlane/ngx-charts/-/ngx-charts-20.4.1.tgz", + "integrity": "sha512-DyTQe0fcqLDoLEZca45gkdjxP8iLH7kh4pCkr+TCFIkmgEdfQ5DpavNBOOVO0qd5J5uV/tbtSnkYWSx8JkbFpg==", + "dependencies": { + "d3-array": "^3.1.1", + "d3-brush": "^3.0.0", + "d3-color": "^3.1.0", + "d3-ease": "^3.0.1", + "d3-format": "^3.1.0", + "d3-hierarchy": "^3.1.0", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-selection": "^3.0.0", + "d3-shape": "^3.2.0", + "d3-time-format": "^3.0.0", + "d3-transition": "^3.0.1", + "rfdc": "^1.3.0", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/animations": ">=12.0.0", + "@angular/cdk": ">=12.0.0", + "@angular/common": ">=12.0.0", + "@angular/core": ">=12.0.0", + "@angular/forms": ">=12.0.0", + "@angular/platform-browser": ">=12.0.0", + "@angular/platform-browser-dynamic": ">=12.0.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "node_modules/@swimlane/ngx-charts/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true + "node_modules/@swimlane/ngx-charts/node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } }, - "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" + "node_modules/@swimlane/ngx-charts/node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" } }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true + "node_modules/@swimlane/ngx-charts/node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } }, - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true + "node_modules/@swimlane/ngx-charts/node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "node_modules/@swimlane/ngx-charts/node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@swimlane/ngx-charts/node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true + "node_modules/@swimlane/ngx-graph": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@swimlane/ngx-graph/-/ngx-graph-8.2.2.tgz", + "integrity": "sha512-GKiwqz0IlXGErLXIyppeIhVqAPDkO/IbxlujVVsFEgZ0qw7sxetJS6GJr/2HfZPK+GysQW3/OFeHhl6z3KToQQ==", + "dependencies": { + "d3-dispatch": "^1.0.3", + "d3-ease": "^1.0.5", + "d3-force": "^1.1.0", + "d3-scale": "^3.2.3", + "d3-selection": "^1.2.0", + "d3-shape": "^1.2.0", + "d3-timer": "^1.0.7", + "d3-transition": "^3.0.1", + "dagre": "^0.8.4", + "transformation-matrix": "^1.15.3", + "tslib": "^2.0.0", + "webcola": "^3.3.8" + }, + "peerDependencies": { + "@angular/animations": "10.x || 11.x || 12.x || 13.x || 14.x || 15.x || 16.x", + "@angular/cdk": "10.x || 11.x || 12.x || 13.x || 14.x || 15.x || 16.x", + "@angular/common": "10.x || 11.x || 12.x || 13.x || 14.x || 15.x || 16.x", + "@angular/core": "10.x || 11.x || 12.x || 13.x || 14.x || 15.x || 16.x", + "rxjs": "6.x || 7.x" + } }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "node_modules/@swimlane/ngx-graph/node_modules/d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "license": "MIT", + "engines": { + "node": ">= 10" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "node_modules/@tsconfig/node10": { + "version": "1.0.9", "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } + "license": "MIT" }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "node_modules/@tsconfig/node12": { + "version": "1.0.11", "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } + "license": "MIT" }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "node_modules/@tsconfig/node14": { + "version": "1.0.3", "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } + "license": "MIT" }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@tweenjs/tween.js": { + "version": "17.6.0", + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", + "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, "dependencies": { - "domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", - "dev": true - } + "@types/connect": "*", + "@types/node": "*" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + "node_modules/@types/bonjour": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.11.tgz", + "integrity": "sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, - "domino": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz", - "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==" + "node_modules/@types/circular-json": { + "version": "0.4.0", + "license": "MIT" }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dependencies": { + "@types/node": "*" } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz", + "integrity": "sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==", "dev": true, - "requires": { - "is-obj": "^2.0.0" + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" } }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true + "node_modules/@types/cookie": { + "version": "0.4.1", + "dev": true, + "license": "MIT" }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/@types/cors": { + "version": "2.8.14", "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "node_modules/@types/eslint": { + "version": "8.44.3", "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "node_modules/@types/eslint-scope": { + "version": "3.7.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } }, - "electron-to-chromium": { - "version": "1.3.584", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.584.tgz", - "integrity": "sha512-NB3DzrTzJFhWkUp+nl2KtUtoFzrfGXTir2S+BU4tXGyXH9vlluPuFpE3pTKeH7+PY460tHLjKzh6K2+TWwW+Ww==", - "dev": true + "node_modules/@types/estree": { + "version": "0.0.39", + "dev": true, + "license": "MIT" }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "node_modules/@types/express": { + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", + "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + "node_modules/@types/express-serve-static-core": { + "version": "4.17.37", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", + "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "node_modules/@types/http-errors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", + "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", "dev": true }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/@types/http-proxy": { + "version": "1.17.12", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.12.tgz", + "integrity": "sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw==", "dev": true, - "requires": { - "iconv-lite": "^0.6.2" - }, "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } + "@types/node": "*" } }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/@types/jasmine": { + "version": "3.6.11", "dev": true, - "requires": { - "once": "^1.4.0" - } + "license": "MIT" }, - "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "node_modules/@types/jasminewd2": { + "version": "2.0.11", "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" - }, - "dependencies": { - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } + "license": "MIT", + "dependencies": { + "@types/jasmine": "*" } }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } + "node_modules/@types/js-yaml": { + "version": "3.12.8", + "dev": true, + "license": "MIT" }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "node_modules/@types/json-schema": { + "version": "7.0.13", "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } + "license": "MIT" }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "node_modules/@types/json5": { + "version": "0.0.29", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "license": "MIT" + }, + "node_modules/@types/karma": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/@types/karma/-/karma-6.3.5.tgz", + "integrity": "sha512-TOct2CFocHyc+Y9M9Mu6H6FK5hikTFOOJV5iKYlk8SMouuMR0mgC6VS07vCxu40FWjmQqK2ZKHWP/AOeJnDvvw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "log4js": "^6.4.1" } }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "node_modules/@types/mime": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", + "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", "dev": true }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "node_modules/@types/moment-timezone": { + "version": "0.5.30", + "license": "MIT", + "dependencies": { + "moment-timezone": "*" + } + }, + "node_modules/@types/node": { + "version": "20.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/q": { + "version": "0.0.32", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.8", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", + "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", "dev": true }, - "err-code": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", - "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "node_modules/@types/range-parser": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", + "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", "dev": true }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "node_modules/@types/resolve": { + "version": "1.17.1", "dev": true, - "requires": { - "prr": "~1.0.1" + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/selenium-webdriver": { + "version": "3.0.24", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } + "license": "MIT" }, - "error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", - "requires": { - "stackframe": "^1.1.1" + "node_modules/@types/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", + "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, - "es-abstract": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz", - "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==", + "node_modules/@types/serve-index": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig==", "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", - "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.0.0", - "string.prototype.trimright": "^2.0.0" + "dependencies": { + "@types/express": "*" } }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "node_modules/@types/serve-static": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", + "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" } }, - "es5-ext": { - "version": "0.10.51", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz", - "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==", + "node_modules/@types/sockjs": { + "version": "0.3.34", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.34.tgz", + "integrity": "sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g==", "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" + "dependencies": { + "@types/node": "*" } }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true + "node_modules/@types/stacktrace-js": { + "version": "0.0.33", + "license": "MIT" }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "node_modules/@types/ws": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz", + "integrity": "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==", "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "dependencies": { + "@types/node": "*" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } + "license": "MIT", + "peer": true }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - }, - "dependencies": { - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - } - } + "license": "MIT", + "peer": true }, - "es6-symbol": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz", - "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==", + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", "dev": true, - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.51" - } + "license": "MIT", + "peer": true }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - }, + "license": "MIT", + "peer": true, "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "@xtuc/ieee754": "^1.2.0" } }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", "dev": true, - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "eslint": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.13.1.tgz", - "integrity": "sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=", + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", "dev": true, - "requires": { - "chalk": "^1.1.3", - "concat-stream": "^1.4.6", - "debug": "^2.1.1", - "doctrine": "^1.2.2", - "es6-map": "^0.1.3", - "escope": "^3.6.0", - "espree": "^3.1.6", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^1.1.1", - "glob": "^7.0.3", - "globals": "^9.2.0", - "ignore": "^3.1.2", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "optionator": "^0.8.1", - "path-is-absolute": "^1.0.0", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.6.0", - "strip-json-comments": "~1.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "^1.3.0" - } - }, - "shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=", - "dev": true - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", "dev": true, - "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" - }, + "license": "MIT", + "peer": true, "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - } + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", "dev": true, - "requires": { - "estraverse": "^4.1.0" + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" }, - "estree-walker": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.1.tgz", - "integrity": "sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg==", - "dev": true + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause" }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "node_modules/abab": { + "version": "2.0.6", + "dev": true, + "license": "BSD-3-Clause" }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "node_modules/abbrev": { + "version": "1.0.9", "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } + "license": "ISC" }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "node_modules/accepts": { + "version": "1.3.8", "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "node_modules/acorn": { + "version": "7.4.1", "dev": true, - "requires": { - "original": "^1.0.0" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/acorn-walk": { + "version": "8.2.0", "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "license": "MIT", + "engines": { + "node": ">=0.4.0" } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "node_modules/adm-zip": { + "version": "0.4.16", "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" + "license": "MIT", + "engines": { + "node": ">=0.3.0" } }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "node_modules/agent-base": { + "version": "6.0.2", "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, + "license": "MIT", "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "node_modules/agentkeepalive": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" } }, - "external-editor": { + "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" - }, - "fast-glob": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", - "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", + "node_modules/ajv-formats": { + "version": "2.1.1", "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - }, + "license": "MIT", "dependencies": { - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true } } }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", "dev": true, - "requires": { - "reusify": "^1.0.4" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } + "license": "MIT" }, - "figgy-pudding": { + "node_modules/ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" } }, - "file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", + "node_modules/amdefine": { + "version": "1.0.1", "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "license": "BSD-3-Clause OR MIT", + "optional": true, + "engines": { + "node": ">=0.4.2" } }, - "file-loader": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz", - "integrity": "sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.5" + "node_modules/angular2-virtual-scroll": { + "version": "0.4.16", + "license": "MIT", + "dependencies": { + "@tweenjs/tween.js": "^17.1.0" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "node_modules/ansi-colors": { + "version": "4.1.3", "dev": true, - "optional": true + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "node_modules/ansi-escapes": { + "version": "4.3.2", "dev": true, - "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, - "requires": { - "to-regex-range": "^5.0.1" + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/any-promise": { + "version": "1.3.0", "dev": true, - "requires": { - "locate-path": "^3.0.0" - } + "license": "MIT" }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - }, + "license": "ISC", "dependencies": { - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "node_modules/append-transform": { + "version": "1.0.0", "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "license": "MIT", + "dependencies": { + "default-require-extensions": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "follow-redirects": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", - "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", + "node_modules/aproba": { + "version": "2.0.0", "dev": true, - "requires": { - "debug": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } + "license": "ISC" }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "node_modules/archy": { + "version": "1.0.0", + "dev": true, + "license": "MIT" }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "node_modules/are-we-there-yet": { + "version": "3.0.1", "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, + "license": "ISC", "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/arg": { + "version": "4.1.3", "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true + "node_modules/argparse/node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause" }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/argv": { + "version": "0.0.2", "dev": true, - "requires": { - "map-cache": "^0.2.2" + "engines": { + "node": ">=0.6.10" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true + "node_modules/arr-union": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "fromentries": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz", - "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==", + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, - "front-matter": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-2.1.2.tgz", - "integrity": "sha1-91mDufL0E75ljJPf172M5AePXNs=", + "node_modules/array-union": { + "version": "2.1.0", "dev": true, - "requires": { - "js-yaml": "^3.4.6" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "node_modules/array-uniq": { + "version": "1.0.3", "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "dependencies": { - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true - } + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", "dev": true, - "requires": { - "minipass": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "node_modules/arrify": { + "version": "1.0.1", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "node_modules/asn1": { + "version": "0.2.6", "dev": true, - "requires": { - "is-property": "^1.0.2" + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" } }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "node_modules/assert-plus": { + "version": "1.0.0", "dev": true, - "requires": { - "is-property": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=0.8" } }, - "genfun": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", - "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/async": { + "version": "1.5.2", "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "license": "MIT" }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "node_modules/async-array-reduce": { + "version": "0.2.1", "dev": true, - "requires": { - "assert-plus": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "node_modules/async-each": { + "version": "1.0.6", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "node_modules/asynckit": { + "version": "0.4.0", "dev": true, - "requires": { - "is-glob": "^4.0.1" - } + "license": "MIT" }, - "global-modules": { + "node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "license": "ISC", + "engines": { + "node": ">= 4.0.0" } }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "node_modules/atob": { + "version": "2.1.2", "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "node_modules/autoprefixer": { + "version": "10.4.16", "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "globule": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", - "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "node_modules/available-typed-arrays": { + "version": "1.0.5", "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "gonzales-pe-sl": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/gonzales-pe-sl/-/gonzales-pe-sl-4.2.3.tgz", - "integrity": "sha1-aoaLw4BkXxQf7rBCxvl/zHG1n+Y=", + "node_modules/aws-sign2": { + "version": "0.7.0", "dev": true, - "requires": { - "minimist": "1.1.x" - }, - "dependencies": { - "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", - "dev": true - } + "license": "Apache-2.0", + "engines": { + "node": "*" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "node_modules/aws4": { + "version": "1.12.0", + "dev": true, + "license": "MIT" }, - "graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "requires": { - "lodash": "^4.17.15" + "node_modules/babel-loader": { + "version": "8.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "2.0.4", "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - }, + "license": "MIT", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", "dev": true, - "requires": { - "function-bind": "^1.1.1" + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", "dev": true, - "requires": { - "ansi-regex": "^2.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.3", "dev": true, - "requires": { - "isarray": "2.0.1" - }, + "license": "MIT", "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", - "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", "dev": true, - "requires": { - "is-glob": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/base64-js": { + "version": "1.5.1", "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ], + "license": "MIT" }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/base64id": { + "version": "2.0.0", "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" } }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" } }, - "hasha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz", - "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, + "node_modules/bent": { + "version": "7.3.12", + "license": "Apache-2.0", "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + "bytesish": "^0.4.1", + "caseless": "~0.12.0", + "is-stream": "^2.0.0" } }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "node_modules/big.js": { + "version": "5.2.2", "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "license": "MIT", + "engines": { + "node": "*" } }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/binary-extensions": { + "version": "2.2.0", "dev": true, - "requires": { - "parse-passwd": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "hosted-git-info": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", - "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "node_modules/bl": { + "version": "4.1.0", "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, - "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", - "dev": true + "node_modules/blocking-proxy": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "blocking-proxy": "built/lib/bin.js" + }, + "engines": { + "node": ">=6.9.x" + } }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "node_modules/body-parser": { + "version": "1.20.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/boolbase": { + "version": "1.0.0", "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "node_modules/braces": { + "version": "3.0.2", "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, + "license": "MIT", "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "node_modules/browserslist": { + "version": "4.22.1", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "node_modules/browserstack": { + "version": "1.6.1", "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "license": "MIT", + "dependencies": { + "https-proxy-agent": "^2.2.1" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true + "node_modules/browserstack-local": { + "version": "1.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "https-proxy-agent": "^5.0.1", + "is-running": "^2.1.0", + "ps-tree": "=1.2.0", + "temp-fs": "^0.9.9" + } + }, + "node_modules/browserstack/node_modules/agent-base": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/browserstack/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } }, - "https-proxy-agent": { + "node_modules/browserstack/node_modules/https-proxy-agent": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "node_modules/buffer-from": { + "version": "1.1.2", "dev": true, - "requires": { - "ms": "^2.0.0" + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/builtins": { + "version": "5.0.1", "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" } }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "node_modules/bytes": { + "version": "3.1.2", "dev": true, - "requires": { - "postcss": "^7.0.14" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true + "node_modules/bytesish": { + "version": "0.4.4", + "license": "(Apache-2.0 AND MIT)" }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true + "node_modules/cacache": { + "version": "16.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "node_modules/caching-transform": { + "version": "4.0.0", "dev": true, - "requires": { - "minimatch": "^3.0.4" + "license": "MIT", + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "node_modules/call-bind": { + "version": "1.0.2", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true + "node_modules/call-me-maybe": { + "version": "1.0.2", + "dev": true, + "license": "MIT" }, - "immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "node_modules/camelcase": { + "version": "5.3.1", "dev": true, - "requires": { - "import-from": "^2.1.0" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "node_modules/caniuse-lite": { + "version": "1.0.30001542", "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", "dev": true, - "requires": { - "resolve-from": "^3.0.0" + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "import-local": { + "node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "license": "ISC", + "engines": { + "node": ">=10" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true + "node_modules/circular-json": { + "version": "0.5.9", + "license": "MIT" }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "node_modules/cli-color": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } }, - "injection-js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.3.1.tgz", - "integrity": "sha512-t+kpDAOL/DUZ68JncAhsb8C91qhJ6dXRMcOuvJfNA7sp63etdiQe6KQoxE/nZ5b2eTi0TQX6OothOCm89cLAJQ==", + "node_modules/cli-spinners": { + "version": "2.9.1", "dev": true, - "requires": { - "tslib": "^1.9.3" + "license": "MIT", + "engines": { + "node": ">=6" }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/cli-width": { + "version": "3.0.0", "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "license": "ISC", + "engines": { + "node": ">= 10" } }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "node_modules/cliui": { + "version": "7.0.4", "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "intersect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/intersect/-/intersect-1.0.1.tgz", - "integrity": "sha1-MyZQ4QhU2MCsWMGSvcJ6i/fnoww=" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "node_modules/clone": { + "version": "1.0.4", "dev": true, - "requires": { - "loose-envify": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=0.8" } }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/clone-deep": { + "version": "4.0.1", "dev": true, - "requires": { - "kind-of": "^3.0.2" + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/codecov": { + "version": "3.8.3", + "dev": true, + "license": "MIT", "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "argv": "0.0.2", + "ignore-walk": "3.0.4", + "js-yaml": "3.14.1", + "teeny-request": "7.1.1", + "urlgrey": "1.0.0" + }, + "bin": { + "codecov": "bin/codecov" + }, + "engines": { + "node": ">=4.0" } }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/color-support": { + "version": "1.1.3", "dev": true, - "requires": { - "binary-extensions": "^2.0.0" + "license": "ISC", + "bin": { + "color-support": "bin.js" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "node_modules/colors": { + "version": "1.4.0", "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=0.1.90" } }, - "is-core-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", - "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "node_modules/combined-stream": { + "version": "1.0.8", "dev": true, - "requires": { - "has": "^1.0.3" + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/commander": { + "version": "2.20.3", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "license": "MIT" }, - "is-date-object": { + "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "dev": true, + "license": "MIT" }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/compare-versions": { + "version": "3.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, - "requires": { - "number-is-nan": "^1.0.0" + "engines": { + "node": ">= 0.8" } }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "requires": { - "is-extglob": "^2.1.1" + "dependencies": { + "ms": "2.0.0" } }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" }, - "is-my-json-valid": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", - "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", + "node_modules/connect": { + "version": "3.7.0", "dev": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" } }, - "is-negative-zero": { + "node_modules/connect-history-api-fallback": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } }, - "is-obj": { + "node_modules/connect/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true + "dev": true, + "license": "MIT" }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true + "node_modules/connected-domain": { + "version": "1.0.0", + "dev": true, + "license": "MIT" }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "requires": { - "is-path-inside": "^2.1.0" + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" } }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "node_modules/content-type": { + "version": "1.0.5", "dev": true, - "requires": { - "path-is-inside": "^1.0.2" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT" }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/cookie": { + "version": "0.4.2", "dev": true, - "requires": { - "isobject": "^3.0.1" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "node_modules/copy-anything": { + "version": "2.0.6", "dev": true, - "requires": { - "@types/estree": "*" + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" } }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "node_modules/copy-webpack-plugin": { + "version": "6.4.1", "dev": true, - "requires": { - "has": "^1.0.1" + "license": "MIT", + "dependencies": { + "cacache": "^15.0.5", + "fast-glob": "^3.2.4", + "find-cache-dir": "^3.3.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-running": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-running/-/is-running-2.1.0.tgz", - "integrity": "sha1-MKc/9cw4VOT8JUkICen1q/jeCeA=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "node_modules/copy-webpack-plugin/node_modules/@npmcli/fs": { + "version": "1.1.1", "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" } }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "node_modules/copy-webpack-plugin/node_modules/@npmcli/move-file": { + "version": "1.1.2", "dev": true, - "requires": { - "has-symbols": "^1.0.0" + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/copy-webpack-plugin/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "is-docker": "^2.0.0" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", - "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "node_modules/copy-webpack-plugin/node_modules/cacache": { + "version": "15.3.0", "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, + "license": "ISC", "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" } }, - "istanbul-api": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.6.tgz", - "integrity": "sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA==", + "node_modules/copy-webpack-plugin/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "async": "^2.6.2", - "compare-versions": "^3.4.0", - "fileset": "^2.0.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "minimatch": "^3.0.4", - "once": "^1.4.0" - }, + "license": "ISC", "dependencies": { - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "node_modules/copy-webpack-plugin/node_modules/loader-utils": { + "version": "2.0.4", "dev": true, - "requires": { - "append-transform": "^1.0.0" + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "node_modules/copy-webpack-plugin/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, + "license": "ISC", "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "node_modules/copy-webpack-plugin/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, + "license": "MIT", "dependencies": { - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - } + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "node_modules/copy-webpack-plugin/node_modules/ssri": { + "version": "8.0.1", "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, + "license": "ISC", "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" } }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "node_modules/copy-webpack-plugin/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "make-dir": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz", - "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "license": "ISC" + }, + "node_modules/core-js": { + "version": "3.33.0", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "jasmine": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", - "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "node_modules/core-js-compat": { + "version": "3.33.0", "dev": true, - "requires": { - "exit": "^0.1.2", - "glob": "^7.0.6", - "jasmine-core": "~2.8.0" - }, + "license": "MIT", "dependencies": { - "jasmine-core": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", - "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", - "dev": true - } + "browserslist": "^4.22.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "jasmine-core": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz", - "integrity": "sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA==", - "dev": true + "node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT" }, - "jasmine-protractor-browser-log-reporter": { - "version": "github:cf-stratos/jasmine-protractor-browser-log-reporter#5c9170221db6562f6f2eb128f0652e1c3cf2d668", - "from": "github:cf-stratos/jasmine-protractor-browser-log-reporter", + "node_modules/cors": { + "version": "2.8.5", "dev": true, - "requires": { - "chalk": "^4.1.0" - }, + "license": "MIT", "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" } }, - "jasmine-spec-reporter": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-5.0.1.tgz", - "integrity": "sha512-RrOZ+bSPnbk1/9KKs5lm0Nl0cqDCh/XXVlCmu3nkhEJH6HTDh4hoJZu3q8e9aq37C0eXEf/JEJnYy+t4m3arZQ==", + "node_modules/cosmiconfig": { + "version": "7.1.0", "dev": true, - "requires": { - "colors": "1.4.0" - }, + "license": "MIT", "dependencies": { - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - } + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" } }, - "jasminewd2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", - "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", - "dev": true + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" }, - "jest-worker": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.3.0.tgz", - "integrity": "sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==", + "node_modules/critters": { + "version": "0.0.16", "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, + "license": "Apache-2.0", "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "chalk": "^4.1.0", + "css-select": "^4.2.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", + "pretty-bytes": "^5.3.0" } }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-ref-parser": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz", - "integrity": "sha512-z0JGv7rRD3CnJbZY/qCpscyArdtLJhr/wRBmFUdoZ8xMjsFyNdILSprG2degqRLjBjyhZHAEBpGOxniO9rKTxA==", + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "requires": { - "@apidevtools/json-schema-ref-parser": "9.0.6" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "json-schema-to-typescript": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-9.1.1.tgz", - "integrity": "sha512-VrdxmwQROjPBRlHxXwGUa2xzhOMPiNZIVsxZrZjMYtbI7suRFMiEktqaD/gqhfSya7Djy+x8dnJT+H0/0sZO0Q==", + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "cli-color": "^2.0.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "json-schema-ref-parser": "^9.0.1", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "mz": "^2.7.0", - "prettier": "^2.0.5", - "stdin": "0.0.1" - }, + "license": "MIT", "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "requires": { - "kind-of": "^6.0.2" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "node_modules/critters/node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "node_modules/cross-spawn": { + "version": "6.0.5", "dev": true, - "requires": { - "minimist": "^1.2.5" + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" } }, - "jsonc-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", - "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==" + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "node_modules/css-blank-pseudo": { + "version": "3.0.3", "dev": true, - "requires": { - "graceful-fs": "^4.1.6" + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "node_modules/css-has-pseudo": { + "version": "3.0.4", "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "jszip": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.3.0.tgz", - "integrity": "sha512-EJ9k766htB1ZWnsV5ZMDkKLgA+201r/ouFF8R2OigVjVdcm2rurcBrrdXaeqBJbqnUVMko512PYmlncBKE1Huw==", + "node_modules/css-loader": { + "version": "6.7.1", "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "karma": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-5.0.1.tgz", - "integrity": "sha512-xrDGtZ0mykEQjx1BUHOP1ITi39MDsCGocmSvLJWHxUQpxuKwxk3ZUrC6HI2VWh1plLC6+7cA3B19m12yzO/FRw==", + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", "dev": true, - "requires": { - "body-parser": "^1.16.1", - "braces": "^3.0.2", - "chokidar": "^3.0.0", - "colors": "^1.1.0", - "connect": "^3.6.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "flatted": "^2.0.0", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^4.0.2", - "lodash": "^4.17.14", - "log4js": "^4.0.0", - "mime": "^2.3.1", - "minimatch": "^3.0.2", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "socket.io": "2.1.1", - "source-map": "^0.6.1", - "tmp": "0.0.33", - "ua-parser-js": "0.7.21", - "yargs": "^15.3.1" + "license": "CC0-1.0", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.7" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" - } - }, - "yargs-parser": { - "version": "18.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.2.tgz", - "integrity": "sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "karma-chrome-launcher": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", + "node_modules/css-select": { + "version": "4.3.0", "dev": true, - "requires": { - "which": "^1.2.1" + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "karma-cli": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-2.0.0.tgz", - "integrity": "sha512-1Kb28UILg1ZsfqQmeELbPzuEb5C6GZJfVIk0qOr8LNYQuYWmAaqP16WpbpKEjhejDrDYyYOwwJXSZO6u7q5Pvw==", + "node_modules/css-what": { + "version": "6.1.0", "dev": true, - "requires": { - "resolve": "^1.3.3" + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "karma-coverage-istanbul-reporter": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.1.1.tgz", - "integrity": "sha512-CH8lTi8+kKXGvrhy94+EkEMldLCiUA0xMOiL31vvli9qK0T+qcXJAwWBRVJWnVWxYkTmyWar8lPz63dxX6/z1A==", + "node_modules/cssdb": { + "version": "7.7.2", "dev": true, - "requires": { - "istanbul-api": "^2.1.6", - "minimatch": "^3.0.4" - }, - "dependencies": { - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==" - }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "istanbul-api": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.7.tgz", - "integrity": "sha512-LYTOa2UrYFyJ/aSczZi/6lBykVMjCCvUmT64gOe+jPZFy4w6FYfPGqFT2IiQ2BxVHHDOvCD7qrIXb0EOh4uGWw==", - "dev": true, - "requires": { - "async": "^2.6.2", - "compare-versions": "^3.4.0", - "fileset": "^2.0.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.5", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "minimatch": "^3.0.4", - "once": "^1.4.0" - } - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0" - } - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + { + "type": "github", + "url": "https://github.com/sponsors/csstools" } - } + ], + "license": "CC0-1.0" }, - "karma-jasmine": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-3.1.1.tgz", - "integrity": "sha512-pxBmv5K7IkBRLsFSTOpgiK/HzicQT3mfFF+oHAC7nxMfYKhaYFgxOa5qjnHW4sL5rUnmdkSajoudOnnOdPyW4Q==", + "node_modules/cssesc": { + "version": "3.0.0", "dev": true, - "requires": { - "jasmine-core": "^3.5.0" + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" } }, - "karma-jasmine-html-reporter": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.3.tgz", - "integrity": "sha512-ci0VrjuCaFj+9d1tYlTE3KIPUCp0rz874zWWU3JgCMqGIyw5ke+BXWFPOAGAqUdCJcrMwneyvp1zFXA74MiPUA==", - "dev": true - }, - "karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "node_modules/cuint": { + "version": "0.2.2", "dev": true, - "requires": { - "source-map-support": "^0.5.5" - } + "license": "MIT" }, - "karma-spec-reporter": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.32.tgz", - "integrity": "sha1-LpxyB+pyZ3EmAln4K+y1QyCeRAo=", + "node_modules/custom-event": { + "version": "1.0.1", "dev": true, - "requires": { - "colors": "^1.1.2" - } + "license": "MIT" }, - "killable": { + "node_modules/d": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klaw-sync": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-2.1.0.tgz", - "integrity": "sha1-PTvNhgDnv971MjHHOf8FOu1WDkQ=", "dev": true, - "requires": { - "graceful-fs": "^4.1.11" + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", - "dev": true - }, - "known-css-properties": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.3.0.tgz", - "integrity": "sha512-QMQcnKAiQccfQTqtBh/qwquGZ2XK/DXND1jrcN9M8gMMy99Gwla7GQjndVUsEqIaRyP6bsFRuhwRj5poafBGJQ==", - "dev": true + "node_modules/d3-array": { + "version": "2.12.1", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } }, - "less": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/less/-/less-3.11.3.tgz", - "integrity": "sha512-VkZiTDdtNEzXA3LgjQiC3D7/ejleBPFVvq+aRI9mIj+Zhmif5TvFPM244bT4rzkvOCvJ9q4zAztok1M7Nygagw==", - "dev": true, - "requires": { - "clone": "^2.1.2", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "promise": "^7.1.1", - "request": "^2.83.0", - "source-map": "~0.6.0", - "tslib": "^1.10.0" - }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" } }, - "less-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-6.2.0.tgz", - "integrity": "sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg==", - "dev": true, - "requires": { - "clone": "^2.1.2", - "less": "^3.11.3", - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" + "node_modules/d3-brush/node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true + "node_modules/d3-collection": { + "version": "1.0.7", + "license": "BSD-3-Clause" }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" } }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } + "node_modules/d3-dispatch": { + "version": "1.0.6", + "license": "BSD-3-Clause" }, - "license-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.0.tgz", - "integrity": "sha512-JK/DXrtN6UeYQSgkg5q1+pgJ8aiKPL9tnz9Wzw+Ikkf+8mJxG56x6t8O+OH/tAeF/5NREnelTEMyFtbJNkjH4w==", - "dev": true, - "requires": { - "@types/webpack-sources": "^0.1.5", - "webpack-sources": "^1.2.0" + "node_modules/d3-drag": { + "version": "1.2.5", + "license": "BSD-3-Clause", + "dependencies": { + "d3-dispatch": "1", + "d3-selection": "1" } }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "requires": { - "immediate": "~3.0.5" - } + "node_modules/d3-drag/node_modules/d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true + "node_modules/d3-ease": { + "version": "1.0.7", + "license": "BSD-3-Clause" }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true + "node_modules/d3-force": { + "version": "1.2.1", + "license": "BSD-3-Clause", + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } }, - "loader-utils": { + "node_modules/d3-format": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", + "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" } }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "node_modules/d3-interpolate": { + "version": "1.4.0", + "license": "BSD-3-Clause", + "dependencies": { + "d3-color": "1" + } }, - "lodash-es": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", - "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" + "node_modules/d3-path": { + "version": "1.0.9", + "license": "BSD-3-Clause" }, - "lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=", - "dev": true + "node_modules/d3-quadtree": { + "version": "1.0.7", + "license": "BSD-3-Clause" }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true + "node_modules/d3-scale": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", + "dependencies": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" + } }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", - "dev": true + "node_modules/d3-shape": { + "version": "1.3.7", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true + "node_modules/d3-time": { + "version": "2.1.1", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "2" + } }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true + "node_modules/d3-time-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", + "dependencies": { + "d3-time": "1 - 2" + } }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true + "node_modules/d3-timer": { + "version": "1.0.10", + "license": "BSD-3-Clause" }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/dagre": { + "version": "0.8.5", + "license": "MIT", "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "graphlib": "^2.1.8", + "lodash": "^4.17.15" } }, - "log4js": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", - "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", + "node_modules/dashdash": { + "version": "1.14.1", "dev": true, - "requires": { - "date-format": "^2.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.0", - "rfdc": "^1.1.4", - "streamroller": "^1.0.6" - }, + "license": "MIT", "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" - } + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" } }, - "loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "engines": { + "node": ">=4.0" } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - }, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "node_modules/decamelize": { + "version": "1.2.0", "dev": true, - "requires": { - "es5-ext": "~0.10.2" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "node_modules/decode-uri-component": { + "version": "0.2.2", "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" + "license": "MIT", + "engines": { + "node": ">=0.10" } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/deep-is": { + "version": "0.1.4", "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "license": "MIT" }, - "make-fetch-happen": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", - "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", - "dev": true, - "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^12.0.0", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" - }, - "dependencies": { - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - } + "node_modules/deepmerge": { + "version": "4.3.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, - "requires": { - "p-defer": "^1.0.0" + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "node_modules/default-require-extensions": { + "version": "2.0.0", "dev": true, - "requires": { - "object-visit": "^1.0.0" + "license": "MIT", + "dependencies": { + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "mappy-breakpoints": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/mappy-breakpoints/-/mappy-breakpoints-0.2.3.tgz", - "integrity": "sha1-55ZqFe6louprSJXSW364It199Fs=" - }, - "marked": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.2.tgz", - "integrity": "sha512-5jjKHVl/FPo0Z6ocP3zYhKiJLzkwJAw4CZoLjv57FkvbUuwOX4LIBBGGcXjAY6ATcd1q9B8UTj5T9Umauj0QYQ==" - }, - "matched": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/matched/-/matched-1.0.2.tgz", - "integrity": "sha512-7ivM1jFZVTOOS77QsR+TtYHH0ecdLclMkqbf5qiJdX2RorqfhsL65QHySPZgDE0ZjHoh+mQUNHTanNXIlzXd0Q==", + "node_modules/defaults": { + "version": "1.0.4", "dev": true, - "requires": { - "arr-union": "^3.1.0", - "async-array-reduce": "^0.2.1", - "glob": "^7.1.2", - "has-glob": "^1.0.0", - "is-valid-glob": "^1.0.0", - "resolve-dir": "^1.0.0" + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/define-data-property": { + "version": "1.1.0", "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "mem": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-6.1.0.tgz", - "integrity": "sha512-RlbnLQgRHk5lwqTtpEkBTQ2ll/CG/iB+J4Hy2Wh97PjgZgXgWJWrFF+XXujh3UUVLvR4OOTgZzcWMMwnehlEUg==", + "node_modules/define-properties": { + "version": "1.2.1", "dev": true, - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "mimic-fn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.0.0.tgz", - "integrity": "sha512-PiVO95TKvhiwgSwg1IdLYlCTdul38yZxZMIcnDSFIBUm4BNZha2qpQ4GpJ++15bHoKDtrW2D69lMfFwdFYtNZQ==", - "dev": true - } + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", + "node_modules/del": { + "version": "2.2.2", "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" + "license": "MIT", + "dependencies": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=0.10.0" } }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "node_modules/del/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "source-map": "^0.6.1" - }, + "license": "MIT", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "node_modules/del/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "node_modules/del/node_modules/globby": { + "version": "5.0.0", "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, + "license": "MIT", "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "node_modules/del/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "mime-db": "1.43.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz", - "integrity": "sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "license": "MIT" }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "node_modules/delete": { + "version": "1.1.0", "dev": true, - "requires": { - "yallist": "^4.0.0" + "license": "MIT", + "dependencies": { + "async-each": "^1.0.1", + "extend-shallow": "^2.0.1", + "matched": "^1.0.2", + "rimraf": "^2.6.1" + }, + "engines": { + "node": ">=0.12.0" } }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "node_modules/delete/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "minipass": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/delete/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "minipass": "^3.0.0" - }, + "license": "ISC", "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/delete/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "minipass": "^3.0.0" - }, + "license": "ISC", "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/delete/node_modules/rimraf": { + "version": "2.7.1", "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, + "license": "ISC", "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/dependency-graph": { + "version": "0.11.0", "dev": true, - "requires": { - "minimist": "^1.2.5" + "license": "MIT", + "engines": { + "node": ">= 0.6.0" } }, - "mktemp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mktemp/-/mktemp-1.0.0.tgz", - "integrity": "sha512-2duBeS0A75x0M3sCoY0R1TiLsYfIBUtNBNWS++eo+bX/ObVqzblqnEQhlaepoBOLD14wklsV3cYxZ68o5qYO8A==", + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "node_modules/di": { + "version": "0.0.1", + "dev": true, + "license": "MIT" }, - "moment-timezone": { - "version": "0.5.28", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz", - "integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==", - "requires": { - "moment": ">= 2.9.0" + "node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" } }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "node_modules/dir-glob": { + "version": "3.0.1", "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", "dev": true }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" } }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/dom-serialize": { + "version": "2.2.1", "dev": true, - "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "node_modules/dom-serializer": { + "version": "1.4.1", "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true + "node_modules/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true + "node_modules/domhandler": { + "version": "4.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true + "node_modules/domino": { + "version": "2.1.6", + "license": "BSD-2-Clause" }, - "ng-packagr": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-10.1.2.tgz", - "integrity": "sha512-pm61gu6jPkohL8tFWk+2DwUtb3rs5GpND1ZjKUYv5WUJPUQmBfG5WvEO/CDVQpSDWhNWWLTt17NIQ+RS3hNUHg==", + "node_modules/domutils": { + "version": "2.8.0", "dev": true, - "requires": { - "@rollup/plugin-commonjs": "^15.0.0", - "@rollup/plugin-json": "^4.0.0", - "@rollup/plugin-node-resolve": "^9.0.0", - "ajv": "^6.12.3", - "ansi-colors": "^4.1.1", - "autoprefixer": "^9.6.5", - "browserslist": "^4.7.0", - "chokidar": "^3.2.1", - "commander": "^6.0.0", - "cssnano-preset-default": "^4.0.7", - "fs-extra": "^9.0.0", - "glob": "^7.1.2", - "injection-js": "^2.2.1", - "less": "^3.10.3", - "node-sass-tilde-importer": "^1.0.0", - "postcss": "^7.0.29", - "postcss-url": "^8.0.0", - "read-pkg-up": "^5.0.0", - "rimraf": "^3.0.0", - "rollup": "^2.8.0", - "rollup-plugin-sourcemaps": "^0.6.0", - "rxjs": "^6.5.0", - "sass": "^1.23.0", - "stylus": "^0.54.7", - "terser": "^5.0.0" - }, + "license": "BSD-2-Clause", "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "commander": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", - "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.32.1.tgz", - "integrity": "sha512-Op2vWTpvK7t6/Qnm1TTh7VjEZZkN8RWgf0DHbkKzQBwNf748YhXbozHVefqpPp/Fuyk/PQPAnYsBxAEtlMvpUw==", - "dev": true, - "requires": { - "fsevents": "~2.1.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "terser": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.8.tgz", - "integrity": "sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - } + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "ngrx-store-localstorage": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/ngrx-store-localstorage/-/ngrx-store-localstorage-10.1.1.tgz", - "integrity": "sha512-OacpqJMraLrgqr/T3DfyT4T4lqAISZdCPWmYQyHtXWsNgKGid6xL4SgPktJ3vcMbIuuMckOpEFIgIpgBvf8E3g==", - "requires": { - "deepmerge": "^3.2.0", - "tslib": "^2.0.0" - } + "node_modules/duplexer": { + "version": "0.1.2", + "dev": true, + "license": "MIT" }, - "ngx-moment": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/ngx-moment/-/ngx-moment-3.5.0.tgz", - "integrity": "sha512-QC/5XNC0BW6WkJkwZT4r2A29j/8sJAmhuQJrEnEdpW35GvkemccuxEUAwo/PwkzPB/CHaquR00E6P2HVEQ1iEg==", - "requires": { - "tslib": "^1.9.0" - }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "ngx-monaco-editor": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/ngx-monaco-editor/-/ngx-monaco-editor-9.0.0.tgz", - "integrity": "sha512-fPXT3M8W920Vs0KPMX6iA7GJYjBRnl9naug9A7D2inPPzxQGtgPZrSEatIPf37a6ir9Ts+8fwt1bTkFzfTgIpQ==" + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "node_modules/electron-to-chromium": { + "version": "1.4.537", + "dev": true, + "license": "ISC" }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" }, - "node-fetch-npm": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", - "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", + "node_modules/emojis-list": { + "version": "3.0.0", "dev": true, - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" + "license": "MIT", + "engines": { + "node": ">= 4" } }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true + "node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } + "node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", "dev": true, - "requires": { - "process-on-spawn": "^1.0.0" + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node-releases": { - "version": "1.1.64", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz", - "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==", - "dev": true + "node_modules/engine.io": { + "version": "6.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } }, - "node-sass-tilde-importer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz", - "integrity": "sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg==", + "node_modules/engine.io-parser": { + "version": "5.2.1", "dev": true, - "requires": { - "find-parent-dir": "^0.3.0" + "license": "MIT", + "engines": { + "node": ">=10.0.0" } }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "node_modules/enhanced-resolve": { + "version": "5.15.0", "dev": true, - "requires": { - "abbrev": "1" + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/ent": { + "version": "2.2.0", "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "license": "MIT" + }, + "node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true + "node_modules/err-code": { + "version": "2.0.3", + "dev": true, + "license": "MIT" }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true + "node_modules/errno": { + "version": "0.1.8", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } }, - "normalizr": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/normalizr/-/normalizr-3.6.0.tgz", - "integrity": "sha512-25cd8DiDu+pL46KIaxtVVvvEPjGacJgv0yUg950evr62dQ/ks2JO1kf7+Vi5/rMFjaSTSTls7aCnmRlUSljtiA==" + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } }, - "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "node_modules/error-stack-parser": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.22.2", "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "node_modules/es-to-primitive": { + "version": "1.2.1", "dev": true, - "requires": { - "semver": "^7.1.1" + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "dev": true, + "hasInstallScript": true, + "license": "ISC", "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true + "node_modules/es6-error": { + "version": "4.1.1", + "dev": true, + "license": "MIT" }, - "npm-package-arg": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.0.1.tgz", - "integrity": "sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ==", + "node_modules/es6-iterator": { + "version": "2.0.3", "dev": true, - "requires": { - "hosted-git-info": "^3.0.2", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "hosted-git-info": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", - "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "node_modules/es6-promise": { + "version": "4.2.8", "dev": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" + "license": "MIT" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es6-promise": "^4.0.3" } }, - "npm-pick-manifest": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz", - "integrity": "sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw==", + "node_modules/es6-symbol": { + "version": "3.1.3", "dev": true, - "requires": { - "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.0.0", - "semver": "^7.0.0" - }, + "license": "ISC", "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "npm-registry-fetch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", - "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", + "node_modules/es6-weak-map": { + "version": "2.0.3", "dev": true, - "requires": { - "JSONStream": "^1.3.4", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "npm-package-arg": "^6.1.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", - "dev": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "license": "ISC", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "node_modules/esbuild": { + "version": "0.15.5", "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.15.5", + "esbuild-android-64": "0.15.5", + "esbuild-android-arm64": "0.15.5", + "esbuild-darwin-64": "0.15.5", + "esbuild-darwin-arm64": "0.15.5", + "esbuild-freebsd-64": "0.15.5", + "esbuild-freebsd-arm64": "0.15.5", + "esbuild-linux-32": "0.15.5", + "esbuild-linux-64": "0.15.5", + "esbuild-linux-arm": "0.15.5", + "esbuild-linux-arm64": "0.15.5", + "esbuild-linux-mips64le": "0.15.5", + "esbuild-linux-ppc64le": "0.15.5", + "esbuild-linux-riscv64": "0.15.5", + "esbuild-linux-s390x": "0.15.5", + "esbuild-netbsd-64": "0.15.5", + "esbuild-openbsd-64": "0.15.5", + "esbuild-sunos-64": "0.15.5", + "esbuild-windows-32": "0.15.5", + "esbuild-windows-64": "0.15.5", + "esbuild-windows-arm64": "0.15.5" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.5", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.15.5", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } + "engines": { + "node": ">=12" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/escalade": { + "version": "3.1.1", "dev": true, - "requires": { - "path-key": "^2.0.0" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "node_modules/escape-html": { + "version": "1.0.3", "dev": true, - "requires": { - "boolbase": "~1.0.0" + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true + "node_modules/escodegen": { + "version": "1.8.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "node_modules/escodegen/node_modules/source-map": { + "version": "0.2.0", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } }, - "nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "node_modules/eslint-scope": { + "version": "5.1.1", "dev": true, - "requires": { + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/execa/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "dev": true, + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "dev": true, + "license": "ISC" + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.3.2" + } + }, + "node_modules/fast-url-parser/node_modules/punycode": { + "version": "1.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fileset": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "node_modules/fileset/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fileset/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fileset/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.6", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/fromentries": { + "version": "1.3.2", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "8.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/global-modules": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "node_modules/globals": { + "version": "11.12.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/graphlib": { + "version": "2.1.8", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-glob": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-glob": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-glob/node_modules/is-glob": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/hasha": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "dev": true, + "license": "BSD", + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "5.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "3.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/immer": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.3.tgz", + "integrity": "sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.3.4", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/injection-js": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "7.8.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/intersect": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/ip": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-module": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-cwd": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-running": { + "version": "2.1.0", + "dev": true, + "license": "BSD" + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul": { + "version": "0.4.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/istanbul-api": { + "version": "2.1.6", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "async": "^2.6.2", + "compare-versions": "^3.4.0", + "fileset": "^2.0.3", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", + "minimatch": "^3.0.4", + "once": "^1.4.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-api/node_modules/async": { + "version": "2.6.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/istanbul-api/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/istanbul-api/node_modules/istanbul-lib-instrument": { + "version": "3.3.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-api/node_modules/istanbul-reports": { + "version": "2.2.7", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-api/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-api/node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/istanbul-api/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul-api/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-api/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "2.0.5", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "2.0.7", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "2.0.8", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-report/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "3.0.6", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports/node_modules/istanbul-lib-report": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports/node_modules/make-dir": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-reports/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/istanbul/node_modules/glob": { + "version": "5.0.15", + "dev": true, + "license": "ISC", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul/node_modules/has-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul/node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/istanbul/node_modules/resolve": { + "version": "1.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul/node_modules/supports-color": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine": { + "version": "2.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" + }, + "bin": { + "jasmine": "bin/jasmine.js" + } + }, + "node_modules/jasmine-core": { + "version": "3.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jasmine-protractor-browser-log-reporter": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/cf-stratos/jasmine-protractor-browser-log-reporter.git#5c9170221db6562f6f2eb128f0652e1c3cf2d668", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0" + }, + "peerDependencies": { + "jasmine-core": "~3.5.0", + "protractor": ">= 5.4.3 < 6" + } + }, + "node_modules/jasmine-protractor-browser-log-reporter/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jasmine-protractor-browser-log-reporter/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jasmine-protractor-browser-log-reporter/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jasmine-protractor-browser-log-reporter/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jasmine-protractor-browser-log-reporter/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jasmine-protractor-browser-log-reporter/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jasmine-spec-reporter": { + "version": "5.0.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "colors": "1.4.0" + } + }, + "node_modules/jasmine/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jasmine/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jasmine/node_modules/jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==", + "dev": true + }, + "node_modules/jasmine/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jasminewd2": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.9.x" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-ref-parser": { + "version": "9.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "9.0.9" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/json-schema-to-typescript": { + "version": "9.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.4", + "cli-color": "^2.0.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "json-schema-ref-parser": "^9.0.1", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "mz": "^2.7.0", + "prettier": "^2.0.5", + "stdin": "0.0.1" + }, + "bin": { + "json2ts": "dist/src/cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/json-schema-to-typescript/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/json-schema-to-typescript/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/json-schema-to-typescript/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/json-schema-to-typescript/node_modules/prettier": { + "version": "2.8.8", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.1.0", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jszip": { + "version": "3.10.1", + "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/karma": { + "version": "6.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-cli": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.3.3" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/karma-coverage/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/karma-coverage/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/karma-coverage/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma-coverage/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-jasmine": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^3.6.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "karma": "*" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": ">=3.8", + "karma": ">=0.9", + "karma-jasmine": ">=1.1" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma-spec-reporter": { + "version": "0.0.32", + "dev": true, + "license": "MIT", + "dependencies": { + "colors": "^1.1.2" + }, + "peerDependencies": { + "karma": ">=0.9" + } + }, + "node_modules/karma/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/karma/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/karma/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/karma/node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/less": { + "version": "4.1.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/license-webpack-plugin/node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/magic-string": { + "version": "0.26.2", + "dev": true, + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "11.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "17.1.4", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache/node_modules/minipass": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/make-fetch-happen/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/foreground-child": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/fs-minipass/node_modules/minipass": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "10.3.10", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "10.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri/node_modules/minipass": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-stream": { + "version": "0.1.0", + "dev": true + }, + "node_modules/mappy-breakpoints": { + "version": "0.2.4", + "license": "MIT" + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/matched": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "async-array-reduce": "^0.2.1", + "glob": "^7.1.2", + "has-glob": "^1.0.0", + "is-valid-glob": "^1.0.0", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/matched/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/matched/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/matched/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mem": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoizee": { + "version": "0.4.15", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mktemp": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.43", + "license": "MIT", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/monaco-editor": { + "version": "0.20.0", + "license": "MIT", + "peer": true + }, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/mz": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/ng-packagr": { + "version": "14.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.1.3", + "ajv": "^8.10.0", + "ansi-colors": "^4.1.1", + "browserslist": "^4.20.0", + "cacache": "^16.0.0", + "chokidar": "^3.5.3", + "commander": "^9.0.0", + "dependency-graph": "^0.11.0", + "esbuild-wasm": "^0.15.0", + "find-cache-dir": "^3.3.2", + "glob": "^8.0.0", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.0.0", + "less": "^4.1.2", + "ora": "^5.1.0", + "postcss": "^8.4.8", + "postcss-preset-env": "^7.4.2", + "postcss-url": "^10.1.3", + "rollup": "^2.70.0", + "rollup-plugin-sourcemaps": "^0.6.3", + "rxjs": "^7.5.5", + "sass": "^1.49.9", + "stylus": "^0.59.0" + }, + "bin": { + "ng-packagr": "cli/main.js" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "optionalDependencies": { + "esbuild": "^0.15.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^14.0.0 || ^14.0.0-next || ^14.2.0-next", + "tslib": "^2.3.0", + "typescript": ">=4.6.2 <4.9" + } + }, + "node_modules/ng-packagr/node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ng-packagr/node_modules/commander": { + "version": "9.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/ng-packagr/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ng-packagr/node_modules/rxjs": { + "version": "7.8.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/ngrx-store-localstorage": { + "version": "14.0.0", + "license": "MIT", + "dependencies": { + "deepmerge": "^4.2.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^14.0.0", + "@angular/core": "^14.0.0", + "@ngrx/store": "^14.0.0" + } + }, + "node_modules/ngx-moment": { + "version": "3.5.0", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.0" + }, + "peerDependencies": { + "@angular/common": ">=2.0.0", + "@angular/core": ">=2.0.0", + "moment": "^2.19.3" + } + }, + "node_modules/ngx-moment/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/ngx-monaco-editor": { + "version": "9.0.0", + "license": "MIT", + "peerDependencies": { + "@angular/common": "^9.0.0", + "@angular/core": "^9.0.0", + "tslib": "^1.10.0" + } + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.1", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-preload": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "3.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-package-data": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalizr": { + "version": "3.6.2", + "license": "MIT" + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "5.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/npm-package-arg": { + "version": "9.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "5.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/ignore-walk": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/npm-bundled": { + "version": "2.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "7.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "13.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.18.3", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "10.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nyc": { + "version": "15.1.0", + "dev": true, + "license": "ISC", + "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", "caching-transform": "^4.0.0", "convert-source-map": "^1.7.0", "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/nyc/node_modules/append-transform": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/nyc/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/nyc/node_modules/default-require-extensions": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/nyc/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/istanbul-lib-report": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nyc/node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nyc/node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nyc/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nyc/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/nyc/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nyc/node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/nyc/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/open": { + "version": "8.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-defer": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pacote": { + "version": "13.6.2", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "license": "MIT", + "optional": true + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-sax-parser": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "dev": true, + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "dev": true, + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-loader": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.7" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "dev": true, + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "dev": true, + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.0", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.0.5", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.8", + "browserslist": "^4.21.3", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.0.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.8", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.1.10", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-url/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/postcss-url/node_modules/mime": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "1.19.1", + "license": "MIT", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "2.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/protractor": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "^3.0.0", + "blocking-proxy": "^1.0.0", + "browserstack": "^1.5.1", + "chalk": "^1.1.3", + "glob": "^7.0.3", + "jasmine": "2.8.0", + "jasminewd2": "^2.1.0", + "q": "1.4.1", + "saucelabs": "^1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "~0.4.0", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "^12.1.7", + "yargs": "^15.3.1" + }, + "bin": { + "protractor": "bin/protractor", + "webdriver-manager": "bin/webdriver-manager" + }, + "engines": { + "node": ">=10.13.x" + } + }, + "node_modules/protractor/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/ansi-styles": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/protractor/node_modules/chalk": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/cliui": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/protractor/node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/protractor/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/protractor/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/protractor/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/protractor/node_modules/q": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/protractor/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/source-map-support": { + "version": "0.4.18", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/protractor/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protractor/node_modules/supports-color": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/protractor/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/protractor/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/protractor/node_modules/yargs": { + "version": "15.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/protractor/node_modules/yargs-parser": { + "version": "18.1.3", + "dev": true, + "license": "ISC", "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "requires": { - "default-require-extensions": "^3.0.0" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", - "dev": true, - "requires": { - "strip-bom": "^4.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "requires": { - "append-transform": "^2.0.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true + "node_modules/prr": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "node_modules/ps-node": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "table-parser": "^0.1.3" } }, - "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "node_modules/ps-tree": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, - "object-is": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", - "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "node_modules/raw-body": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", "dev": true, - "requires": { - "isobject": "^3.0.0" + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" } }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "node_modules/read-package-json": { + "version": "5.0.2", "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "dev": true, + "license": "ISC", "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - } + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - } + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", "dev": true, - "requires": { - "isobject": "^3.0.1" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "node_modules/readable-stream": { + "version": "3.6.2", "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - } + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "node_modules/reflect-metadata": { + "version": "0.1.13", + "dev": true, + "license": "Apache-2.0", + "peer": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "node_modules/regenerate": { + "version": "1.4.2", "dev": true, - "requires": { - "ee-first": "1.1.1" + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "dev": true, + "license": "MIT" }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" + "node_modules/regenerator-transform": { + "version": "0.15.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/regex-parser": { + "version": "2.2.11", "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } + "license": "MIT" }, - "open": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.2.0.tgz", - "integrity": "sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "node_modules/regexpu-core": { + "version": "5.3.2", "dev": true, - "requires": { - "is-wsl": "^1.1.0" - }, + "license": "MIT", "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - } + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "node_modules/regjsparser": { + "version": "0.9.1", "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, + "license": "BSD-2-Clause", "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "bin": { + "jsesc": "bin/jsesc" } }, - "ora": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.0.0.tgz", - "integrity": "sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw==", + "node_modules/release-zalgo": { + "version": "1.0.0", "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.4.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, + "license": "ISC", "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "node_modules/require-directory": { + "version": "2.1.1", "dev": true, - "requires": { - "url-parse": "^1.4.3" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "node_modules/require-from-string": { + "version": "2.0.2", "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true + "node_modules/require-main-filename": { + "version": "2.0.0", + "dev": true, + "license": "ISC" }, - "p-finally": { + "node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "dev": true, + "license": "MIT" }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/reselect": { + "version": "4.1.8", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.1", "dev": true, - "requires": { - "p-try": "^2.0.0" + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/resolve-dir": { + "version": "1.0.1", "dev": true, - "requires": { - "p-limit": "^2.0.0" + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "node_modules/resolve-from": { + "version": "5.0.0", "dev": true, - "requires": { - "aggregate-error": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "node_modules/resolve-url-loader": { + "version": "5.0.0", "dev": true, - "requires": { - "retry": "^0.12.0" + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "pacote": { - "version": "9.5.12", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", - "integrity": "sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==", + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", "dev": true, - "requires": { - "bluebird": "^3.5.3", - "cacache": "^12.0.2", - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.3", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^5.0.0", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.4.0", - "npm-normalize-package-bin": "^1.0.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.12", - "npm-pick-manifest": "^3.0.0", - "npm-registry-fetch": "^4.0.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", - "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.6.0", - "ssri": "^6.0.1", - "tar": "^4.4.10", - "unique-filename": "^1.1.1", - "which": "^1.3.1" - }, - "dependencies": { - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "npm-package-arg": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", - "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", - "dev": true, - "requires": { - "hosted-git-info": "^2.7.1", - "osenv": "^0.1.5", - "semver": "^5.6.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-pick-manifest": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", - "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "node_modules/restore-cursor": { + "version": "3.1.0", "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "node_modules/retry": { + "version": "0.12.0", "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "license": "MIT", + "engines": { + "node": ">= 4" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "node_modules/reusify": { + "version": "1.0.4", "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "optional": true + "node_modules/rfdc": { + "version": "1.3.0", + "license": "MIT" }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "node_modules/rimraf": { + "version": "3.0.2", "dev": true, - "requires": { - "parse5": "^6.0.1" - }, + "license": "ISC", "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - } + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "better-assert": "~1.0.0" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "better-assert": "~1.0.0" + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "node_modules/rollup": { + "version": "2.79.1", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "node_modules/rollup-plugin-sourcemaps": { + "version": "0.6.3", "dev": true, - "requires": { - "pify": "^3.0.0" + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.0.9", + "source-map-resolve": "^0.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "@types/node": ">=10.0.0", + "rollup": ">=0.31.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "node_modules/run-async": { + "version": "2.4.1", "dev": true, - "requires": { - "through": "~2.3" + "license": "MIT", + "engines": { + "node": ">=0.12.0" } }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "node_modules/run-parallel": { + "version": "1.2.0", "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "node_modules/rxjs": { + "version": "6.6.7", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true + "node_modules/rxjs-report-usage": { + "version": "1.0.6", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.10.3", + "@babel/traverse": "^7.10.3", + "@babel/types": "^7.10.3", + "bent": "~7.3.6", + "chalk": "~4.1.0", + "glob": "~7.2.0", + "prompts": "~2.4.2" + }, + "bin": { + "rxjs-report-usage": "bin/rxjs-report-usage" + } }, - "pidtree": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", - "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==", - "dev": true + "node_modules/rxjs-report-usage/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "node_modules/rxjs-report-usage/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "node_modules/rxjs-report-usage/node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "pinkie-promise": { + "node_modules/rxjs-report-usage/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } + "node_modules/rxjs-report-usage/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true + "node_modules/rxjs-report-usage/node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "dev": true, - "requires": { - "ts-pnp": "^1.1.6" + "node_modules/rxjs-report-usage/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" + "node_modules/rxjs-report-usage/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, + "engines": { + "node": "*" + } + }, + "node_modules/rxjs-report-usage/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "node_modules/rxjs-spy": { + "version": "7.5.3", + "license": "MIT", + "dependencies": { + "@types/circular-json": "^0.4.0", + "@types/stacktrace-js": "^0.0.33", + "circular-json": "^0.5.0", + "error-stack-parser": "^2.0.1", + "rxjs-report-usage": "^1.0.4", + "stacktrace-gps": "^3.0.2" + }, + "peerDependencies": { + "rxjs": "^6.0.0" + } }, - "postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "node_modules/rxjs-tslint": { + "version": "0.1.8", "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "license": "MIT", + "dependencies": { + "chalk": "^2.4.0", + "tslint": "^5.9.1", + "tsutils": "^2.25.0", + "typescript": ">=2.8.3", + "yargs": "^15.3.1" }, + "bin": { + "rxjs-5-to-6-migrate": "bin/rxjs-5-to-6-migrate" + }, + "peerDependencies": { + "tslint": "^5.0.0", + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev" + } + }, + "node_modules/rxjs-tslint/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "node_modules/rxjs-tslint/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "node_modules/rxjs-tslint/node_modules/builtin-modules": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "node_modules/rxjs-tslint/node_modules/cliui": { + "version": "6.0.0", "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "ISC", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "node_modules/rxjs-tslint/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "requires": { - "postcss": "^7.0.0" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "node_modules/rxjs-tslint/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "requires": { - "postcss": "^7.0.0" - } + "license": "MIT" }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "node_modules/rxjs-tslint/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "postcss": "^7.0.0" + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "node_modules/rxjs-tslint/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "postcss": "^7.0.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "node_modules/rxjs-tslint/node_modules/mkdirp": { + "version": "0.5.6", "dev": true, - "requires": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, + "license": "MIT", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "node_modules/rxjs-tslint/node_modules/semver": { + "version": "5.7.2", "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } + "node_modules/rxjs-tslint/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "node_modules/rxjs-tslint/node_modules/tslint": { + "version": "5.20.1", "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" + "license": "Apache-2.0", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" + } + }, + "node_modules/rxjs-tslint/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "postcss-merge-rules": { + "node_modules/rxjs-tslint/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } + "dev": true, + "license": "ISC" }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "node_modules/rxjs-tslint/node_modules/yargs": { + "version": "15.4.1", "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" } }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "node_modules/rxjs-tslint/node_modules/yargs-parser": { + "version": "18.1.3", "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "ISC", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" } }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "node_modules/rxjs-websockets": { + "version": "8.0.1", + "license": "ISC", + "peerDependencies": { + "rxjs": "^6.1.0" } }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "node_modules/safe-array-concat": { + "version": "1.0.1", "dev": true, - "requires": { - "postcss": "^7.0.5" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ], + "license": "MIT" }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "node_modules/safe-regex-test": { + "version": "1.0.0", "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "node_modules/safer-buffer": { + "version": "2.1.2", "dev": true, - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.54.4", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" } }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "node_modules/sass-loader": { + "version": "13.0.2", "dev": true, - "requires": { - "postcss": "^7.0.0" + "license": "MIT", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } } }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "node_modules/saucelabs": { + "version": "1.5.0", "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "https-proxy-agent": "^2.2.1" + }, + "engines": { + "node": "*" } }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "node_modules/saucelabs/node_modules/agent-base": { + "version": "4.3.0", "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" } }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "node_modules/saucelabs/node_modules/debug": { + "version": "3.2.7", "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "ms": "^2.1.1" } }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "node_modules/saucelabs/node_modules/https-proxy-agent": { + "version": "2.2.4", "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "engines": { + "node": ">= 4.5.0" } }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "node_modules/sax": { + "version": "1.3.0", "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } + "license": "ISC" }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "node_modules/schema-utils": { + "version": "2.7.1", "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selenium-webdriver": { + "version": "3.6.0", "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "Apache-2.0", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "engines": { + "node": ">= 6.9.0" } }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "node_modules/selenium-webdriver/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "node_modules/selenium-webdriver/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "ISC", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "node_modules/selenium-webdriver/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "node_modules/selenium-webdriver/node_modules/rimraf": { + "version": "2.7.1", "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, + "license": "ISC", "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "node_modules/selenium-webdriver/node_modules/tmp": { + "version": "0.0.30", "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", - "util-deprecate": "^1.0.2" + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.1" + }, + "engines": { + "node": ">=0.4.0" } }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "dev": true, - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } + "node-forge": "^1" + }, + "engines": { + "node": ">=10" } }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "node_modules/semver": { + "version": "7.5.3", "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "postcss-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-8.0.0.tgz", - "integrity": "sha512-E2cbOQ5aii2zNHh8F6fk1cxls7QVFZjLPSrqvmiza8OuXLzIpErij8BDS5Y3STPfJgpIMNCPEr8JlKQWEoozUw==", + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, - "requires": { - "mime": "^2.3.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.0", - "postcss": "^7.0.2", - "xxhashjs": "^0.2.1" - }, + "license": "ISC", "dependencies": { - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - } + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "prettier": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" }, - "process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, - "requires": { - "fromentries": "^1.2.0" + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "optional": true, - "requires": { - "asap": "~2.0.3" + "dependencies": { + "ms": "2.0.0" } }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "promise-retry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", - "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" + "bin": { + "mime": "cli.js" }, - "dependencies": { - "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", - "dev": true - } + "engines": { + "node": ">=4" } }, - "prompts": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", - "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.4" - } + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "protoduck": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", - "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "requires": { - "genfun": "^5.0.0" + "engines": { + "node": ">= 0.8" } }, - "protractor": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.3.tgz", - "integrity": "sha512-7pMAolv8Ah1yJIqaorDTzACtn3gk7BamVKPTeO5lqIGOrfosjPgXFx/z1dqSI+m5EeZc2GMJHPr5DYlodujDNA==", + "node_modules/serialize-javascript": { + "version": "5.0.1", "dev": true, - "requires": { - "@types/q": "^0.0.32", - "@types/selenium-webdriver": "^3.0.0", - "blocking-proxy": "^1.0.0", - "browserstack": "^1.5.1", - "chalk": "^1.1.3", - "glob": "^7.0.3", - "jasmine": "2.8.0", - "jasminewd2": "^2.1.0", - "optimist": "~0.6.0", - "q": "1.4.1", - "saucelabs": "^1.5.0", - "selenium-webdriver": "3.6.0", - "source-map-support": "~0.4.0", - "webdriver-js-extender": "2.1.0", - "webdriver-manager": "^12.0.6" - }, + "license": "BSD-3-Clause", "dependencies": { - "@types/q": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", - "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "webdriver-manager": { - "version": "12.1.7", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.7.tgz", - "integrity": "sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA==", - "dev": true, - "requires": { - "adm-zip": "^0.4.9", - "chalk": "^1.1.1", - "del": "^2.2.0", - "glob": "^7.0.3", - "ini": "^1.3.4", - "minimist": "^1.2.0", - "q": "^1.4.1", - "request": "^2.87.0", - "rimraf": "^2.5.2", - "semver": "^5.3.0", - "xml2js": "^0.4.17" - } - } - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" + "randombytes": "^2.1.0" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "ps-node": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ps-node/-/ps-node-0.1.6.tgz", - "integrity": "sha1-mvZ6mdex0BMuUaUDCZ04qNKs4sM=", + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, - "requires": { - "table-parser": "^0.1.3" + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "requires": { - "event-stream": "=3.3.4" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "dependencies": { + "ms": "2.0.0" } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">= 0.6" } }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/set-function-name": { + "version": "2.0.1", "dev": true, - "requires": { - "safe-buffer": "^5.1.0" + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "node_modules/setimmediate": { + "version": "1.0.5", "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } + "license": "MIT" }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "node_modules/shallow-clone": { + "version": "3.0.1", "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, + "license": "MIT", "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - } + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "raw-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.1.tgz", - "integrity": "sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A==", + "node_modules/shebang-command": { + "version": "1.2.0", "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.5" + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "read-cache": { + "node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "dev": true, - "requires": { - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "read-package-json": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", - "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "node_modules/shell-quote": { + "version": "1.8.1", "dev": true, - "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "read-package-tree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", - "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "node_modules/side-channel": { + "version": "1.0.4", "dev": true, - "requires": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/signal-exit": { + "version": "3.0.7", "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } + "license": "ISC" }, - "read-pkg-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-5.0.0.tgz", - "integrity": "sha512-XBQjqOBtTzyol2CpsQOw8LHV0XbDZVG7xMMjmXAJomlVY03WOBRmYgDJETlvcg0H63AJvPRwT7GFi5rvOzUOKg==", + "node_modules/sisteransi": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^5.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "node_modules/smart-buffer": { + "version": "4.2.0", "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "node_modules/socket.io": { + "version": "4.7.2", "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" } }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "node_modules/socket.io-adapter": { + "version": "2.5.2", "dev": true, - "requires": { - "picomatch": "^2.2.1" + "license": "MIT", + "dependencies": { + "ws": "~8.11.0" } }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "node_modules/socket.io-parser": { + "version": "4.2.4", "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "mute-stream": "0.0.5" - }, + "license": "MIT", "dependencies": { - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - } + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" } }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, - "requires": { - "regenerate": "^1.4.0" + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "node_modules/socks": { + "version": "2.7.1", "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "node_modules/socks-proxy-agent": { + "version": "7.0.0", "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" } }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true + "node_modules/source-list-map": { + "version": "2.0.1", + "dev": true, + "license": "MIT" }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - } + "node_modules/source-map": { + "version": "0.7.4", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" } }, - "regjsgen": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", - "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", - "dev": true + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "node_modules/source-map-loader": { + "version": "4.0.0", "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, + "license": "MIT", "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" } }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", "dev": true, - "requires": { - "es6-error": "^4.0.1" + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "node_modules/source-map-resolve": { + "version": "0.6.0", "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" } }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", + "node_modules/source-map-support": { + "version": "0.5.21", "dev": true, - "requires": { - "lodash": "^4.17.15" + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "dev": true, + "license": "MIT" }, - "require-main-filename": { + "node_modules/spawn-wrap": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - }, - "dependencies": { - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } + "node_modules/spawn-wrap/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } }, - "reselect": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz", - "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "node_modules/spdx-expression-parse": { + "version": "3.0.1", "dev": true, - "requires": { - "path-parse": "^1.0.6" + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "node_modules/spdx-license-ids": { + "version": "3.0.15", "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } + "license": "CC0-1.0" }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" } }, - "resolve-from": { + "node_modules/spdy-transport": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "3.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, "dependencies": { - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/split": { + "version": "0.3.3", "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "node_modules/sshpk": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "node_modules/ssri": { + "version": "9.0.1", "dev": true, - "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - }, + "license": "ISC", "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", - "dev": true - } + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", - "dev": true + "node_modules/stackframe": { + "version": "1.3.4", + "license": "MIT" }, - "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", - "dev": true + "node_modules/stacktrace-gps": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + } }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true + "node_modules/stacktrace-gps/node_modules/source-map": { + "version": "0.5.6", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stdin": { + "version": "0.0.1", "dev": true }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/stream-combiner": { + "version": "0.0.4", "dev": true, - "requires": { - "glob": "^7.1.3" + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "node_modules/stream-events": { + "version": "1.0.5", "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "license": "MIT", + "dependencies": { + "stubs": "^3.0.0" } }, - "rollup": { - "version": "2.26.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.5.tgz", - "integrity": "sha512-rCyFG3ZtQdnn9YwfuAVH0l/Om34BdO5lwCA0W6Hq+bNB21dVEBbCRxhaHOmu1G7OBFDWytbzAC104u7rxHwGjA==", + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", "dev": true, - "requires": { - "fsevents": "~2.1.2" + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" } }, - "rollup-plugin-sourcemaps": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", - "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "requires": { - "@rollup/pluginutils": "^3.0.9", - "source-map-resolve": "^0.6.0" - }, "dependencies": { - "source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - } + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "requires": { - "aproba": "^1.1.1" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" } }, - "rxjs-report-usage": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/rxjs-report-usage/-/rxjs-report-usage-1.0.5.tgz", - "integrity": "sha512-jZeg+TTkvP8kAv0tIQj3WOuIhYLi+Ig9mG8DCc+nJHQ1ObJr8IaeNPbJmXDRfHvH3MKQMBzboY4RbQ6jWt6cIg==", - "requires": { - "@babel/parser": "~7.10.3", - "@babel/traverse": "~7.10.3", - "@babel/types": "~7.10.3", - "bent": "~7.3.6", - "chalk": "~4.1.0", - "glob": "~7.1.6", - "prompts": "~2.3.2" - }, + "node_modules/string_decoder": { + "version": "1.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { - "@babel/types": "^7.11.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - } - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, - "@babel/parser": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz", - "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==" - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz", - "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.10.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "@babel/parser": "^7.10.5", - "@babel/types": "^7.10.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz", - "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } + "safe-buffer": "~5.2.0" } }, - "rxjs-spy": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/rxjs-spy/-/rxjs-spy-7.5.3.tgz", - "integrity": "sha512-8QsSL6Ma51dTeaJ5Q9zWqhqnCSEkDf56Evs1gUsI9N22oB7bYrPMMx4UnoifNGc+Pko2sGX/xydzinLwGO+2pw==", - "requires": { - "@types/circular-json": "^0.4.0", - "@types/stacktrace-js": "^0.0.33", - "circular-json": "^0.5.0", - "error-stack-parser": "^2.0.1", - "rxjs-report-usage": "^1.0.4", - "stacktrace-gps": "^3.0.2" + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "rxjs-tslint": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/rxjs-tslint/-/rxjs-tslint-0.1.8.tgz", - "integrity": "sha512-4MNcco1pugjNyjkUkvJ9ngJSMCuwmyc1g6EkEYzlTK0PrZxm8xVaBeBz5aPLE3AzldQbYkOErOVAayUlzQkjAg==", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", "dev": true, - "requires": { - "chalk": "^2.4.0", - "tslint": "^5.9.1", - "tsutils": "^2.25.0", - "typescript": ">=2.8.3", - "yargs": "^15.3.1" - }, + "license": "MIT", "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" - } - }, - "yargs-parser": { - "version": "18.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.2.tgz", - "integrity": "sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "rxjs-websockets": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/rxjs-websockets/-/rxjs-websockets-8.0.1.tgz", - "integrity": "sha512-j1U2uGxJxwxwKlDnRVWViFdpWgvESEWwS0+3/PKg8ygAqTLEB77hVxUqmqZcp45fcgtkrvl1/0i7qy9wEFO29g==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "node_modules/string.prototype.padend": { + "version": "3.1.5", "dev": true, - "requires": { - "ret": "~0.1.10" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass": { - "version": "1.26.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.3.tgz", - "integrity": "sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw==", - "dev": true, - "requires": { - "chokidar": ">=2.0.0 <4.0.0" - } - }, - "sass-lint": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sass-lint/-/sass-lint-1.13.1.tgz", - "integrity": "sha512-DSyah8/MyjzW2BWYmQWekYEKir44BpLqrCFsgs9iaWiVTcwZfwXHF586hh3D1n+/9ihUNMfd8iHAyb9KkGgs7Q==", - "dev": true, - "requires": { - "commander": "^2.8.1", - "eslint": "^2.7.0", - "front-matter": "2.1.2", - "fs-extra": "^3.0.1", - "glob": "^7.0.0", - "globule": "^1.0.0", - "gonzales-pe-sl": "^4.2.3", - "js-yaml": "^3.5.4", - "known-css-properties": "^0.3.0", - "lodash.capitalize": "^4.1.0", - "lodash.kebabcase": "^4.0.0", - "merge": "^1.2.0", - "path-is-absolute": "^1.0.0", - "util": "^0.10.3" - }, - "dependencies": { - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - } + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "sass-loader": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.1.tgz", - "integrity": "sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ==", + "node_modules/string.prototype.trimend": { + "version": "1.0.7", "dev": true, - "requires": { - "klona": "^2.0.3", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^2.7.0", - "semver": "^7.3.2" - }, + "license": "MIT", "dependencies": { - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "saucelabs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", - "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", "dev": true, - "requires": { - "https-proxy-agent": "^2.2.1" - }, + "license": "MIT", "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, + "license": "MIT", "dependencies": { - "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - } + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selenium-webdriver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", "dev": true, - "requires": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", - "tmp": "0.0.30", - "xml2js": "^0.4.17" - }, + "license": "MIT", "dependencies": { - "tmp": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", - "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.1" - } - } + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "node_modules/strip-bom": { + "version": "3.0.0", "dev": true, - "requires": { - "node-forge": "^0.10.0" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "requires": { - "semver": "^5.3.0" + "engines": { + "node": ">=6" } }, - "semver-intersect": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", - "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", + "node_modules/stubs": { + "version": "3.0.0", "dev": true, - "requires": { - "semver": "^5.0.0" - } + "license": "MIT" }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "node_modules/stylus": { + "version": "0.59.0", "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, + "license": "MIT", "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } + "@adobe/css-tools": "^4.0.1", + "debug": "^4.3.2", + "glob": "^7.1.6", + "sax": "~1.2.4", + "source-map": "^0.7.3" + }, + "bin": { + "stylus": "bin/stylus" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://opencollective.com/stylus" } }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "node_modules/stylus-loader": { + "version": "7.0.0", "dev": true, - "requires": { - "randombytes": "^2.1.0" + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "klona": "^2.0.5", + "normalize-path": "^3.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "stylus": ">=0.52.4", + "webpack": "^5.0.0" } }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "node_modules/stylus/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, + "license": "MIT", "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "node_modules/stylus/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "node_modules/stylus/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true + "node_modules/stylus/node_modules/sax": { + "version": "1.2.4", + "dev": true, + "license": "ISC" }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/symbol-observable": { + "version": "4.0.0", "dev": true, - "requires": { - "shebang-regex": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "node_modules/table-parser": { + "version": "0.1.3", "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, + "license": "MIT", "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } + "connected-domain": "^1.0.0" } }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "node_modules/tapable": { + "version": "2.2.1", "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "license": "MIT", + "engines": { + "node": ">=6" } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "node_modules/tar": { + "version": "6.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "license": "ISC", + "engines": { + "node": ">=8" } }, - "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" - }, + "license": "ISC" + }, + "node_modules/teeny-request": { + "version": "7.1.1", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "stream-events": "^1.0.5", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=10" } }, - "socket.io-adapter": { + "node_modules/teeny-request/node_modules/@tootallnate/once": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", - "dev": true - }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" } }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "node_modules/teeny-request/node_modules/http-proxy-agent": { + "version": "4.0.1", "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, + "license": "MIT", "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "node_modules/temp-fs": { + "version": "0.9.9", "dev": true, - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" - }, + "license": "MIT", "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } + "rimraf": "~2.5.2" + }, + "engines": { + "node": ">=0.8.0" } }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "node_modules/temp-fs/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, + "license": "MIT", "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "socks": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", - "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "node_modules/temp-fs/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "ip": "1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", - "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", - "dev": true, - "requires": { - "agent-base": "~4.2.1", - "socks": "~2.3.2" - }, - "dependencies": { - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "requires": { - "is-plain-obj": "^1.0.0" + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" - }, - "source-map-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.2.tgz", - "integrity": "sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw==", + "node_modules/temp-fs/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "data-urls": "^2.0.0", - "iconv-lite": "^0.6.2", - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0", - "source-map": "^0.6.1" - }, + "license": "ISC", "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "node_modules/temp-fs/node_modules/rimraf": { + "version": "2.5.4", "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "license": "ISC", + "dependencies": { + "glob": "^7.0.5" + }, + "bin": { + "rimraf": "bin.js" } }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "node_modules/terser": { + "version": "5.14.2", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, + "license": "BSD-2-Clause", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", "dev": true, - "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, + "license": "MIT", "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "esbuild": { + "optional": true }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } + "uglify-js": { + "optional": true } } }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "node_modules/terser-webpack-plugin/node_modules/acorn": { + "version": "8.10.0", "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.1", "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, + "license": "BSD-3-Clause", "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "randombytes": "^2.1.0" } }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.20.0", "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, + "license": "BSD-2-Clause", "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "speed-measure-webpack-plugin": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz", - "integrity": "sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ==", + "node_modules/terser/node_modules/acorn": { + "version": "8.10.0", "dev": true, - "requires": { - "chalk": "^2.0.1" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "node_modules/test-exclude": { + "version": "6.0.0", "dev": true, - "requires": { - "through": "2" + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "extend-shallow": "^3.0.0" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "minipass": "^3.1.1" - }, + "license": "ISC", "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" }, - "stacktrace-gps": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz", - "integrity": "sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg==", - "requires": { - "source-map": "0.5.6", - "stackframe": "^1.1.1" + "node_modules/thenify": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "node_modules/thenify-all": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stdin": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz", - "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=", - "dev": true + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "stratos-protractor-reporter": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stratos-protractor-reporter/-/stratos-protractor-reporter-1.2.3.tgz", - "integrity": "sha512-e87eX4LB+KLVOfEF/TeWpNYM9aQFJTO+jsslym7zCZLYd8xlNWZUjmUf00J0DWn7YpoNGdjv0wzkKPcXJ2c5uw==", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "fs-extra": "^3.0.1", - "klaw-sync": "^2.1.0", - "mkdirp": "~0.3.5", - "underscore": "~1.6.0" - }, - "dependencies": { - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "mkdirp": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", - "dev": true - } + "node_modules/timers-ext": { + "version": "0.1.7", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" } }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "node_modules/tmp": { + "version": "0.0.33", "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" } }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "~0.1.1" + "node_modules/to-fast-properties": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" } }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "node_modules/to-regex-range": { + "version": "5.0.1", "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "node_modules/toidentifier": { + "version": "1.0.1", "dev": true, - "requires": { - "stubs": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=0.6" } }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "node_modules/tr46": { + "version": "0.0.3", "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } + "license": "MIT" }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true + "node_modules/transformation-matrix": { + "version": "1.15.3", + "license": "MIT" }, - "streamroller": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", - "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", + "node_modules/tree-kill": { + "version": "1.2.2", "dev": true, - "requires": { - "async": "^2.6.2", - "date-format": "^2.0.0", - "debug": "^3.2.6", - "fs-extra": "^7.0.1", - "lodash": "^4.17.14" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "license": "MIT", + "bin": { + "tree-kill": "cli.js" } }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + "node_modules/ts-md5": { + "version": "1.3.1", + "license": "MIT", + "engines": { + "node": ">=12" + } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "node_modules/ts-node": { + "version": "8.10.2", "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "license": "MIT", + "dependencies": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" } }, - "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "node_modules/tsconfig-paths": { + "version": "3.14.2", "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "string.prototype.trimend": { + "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", - "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - } - } - }, - "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" + }, + "node_modules/tslint": { + "version": "6.1.3", "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "license": "Apache-2.0", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" } }, - "string.prototype.trimstart": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", - "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - } + "node_modules/tslint/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "string_decoder": { + "node_modules/tslint/node_modules/builtin-modules": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/tslint/node_modules/glob": { + "version": "7.2.3", "dev": true, - "requires": { - "ansi-regex": "^2.0.0" + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", - "dev": true + "node_modules/tslint/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "style-loader": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", - "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", + "node_modules/tslint/node_modules/mkdirp": { + "version": "0.5.6", "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6" + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "node_modules/tslint/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "stylus": { - "version": "0.54.7", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz", - "integrity": "sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==", + "node_modules/tslint/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "requires": { - "css-parse": "~2.0.0", - "debug": "~3.1.0", - "glob": "^7.1.3", - "mkdirp": "~0.5.x", - "safer-buffer": "^2.1.2", - "sax": "~1.2.4", - "semver": "^6.0.0", - "source-map": "^0.7.3" - }, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "2.29.0", + "dev": true, + "license": "MIT", "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, - "stylus-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", - "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", - "dev": true, - "requires": { - "loader-utils": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "when": "~3.6.x" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/tunnel-agent": { + "version": "0.6.0", "dev": true, - "requires": { - "has-flag": "^3.0.0" + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "node_modules/tweetnacl": { + "version": "0.14.5", "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - } + "license": "Unlicense" }, - "symbol-observable": { + "node_modules/type": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true + "dev": true, + "license": "ISC" }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "node_modules/type-check": { + "version": "0.3.2", "dev": true, - "requires": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", - "slice-ansi": "0.0.4", - "string-width": "^2.0.0" - }, + "license": "MIT", "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "table-parser": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/table-parser/-/table-parser-0.1.3.tgz", - "integrity": "sha1-BEHPzhallIFoTCfRtaZ/8VpDx7A=", + "node_modules/type-fest": { + "version": "0.21.3", "dev": true, - "requires": { - "connected-domain": "^1.0.0" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } }, - "tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "node_modules/typed-array-buffer": { + "version": "1.0.0", "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "teeny-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz", - "integrity": "sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", "dev": true, - "requires": { - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^4.0.0", - "node-fetch": "^2.2.0", - "stream-events": "^1.0.5", - "uuid": "^3.3.2" - }, + "license": "MIT", "dependencies": { - "agent-base": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, - "requires": { - "agent-base": "5", - "debug": "4" - }, - "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "temp-fs": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/temp-fs/-/temp-fs-0.9.9.tgz", - "integrity": "sha1-gHFzBDeHByDpQxUy/igUNk+IA9c=", + "node_modules/typed-array-length": { + "version": "1.0.4", "dev": true, - "requires": { - "rimraf": "~2.5.2" - }, + "license": "MIT", "dependencies": { - "rimraf": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - } + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "terser": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.0.tgz", - "integrity": "sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg==", + "node_modules/typed-assert": { + "version": "1.0.9", "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "is-typedarray": "^1.0.0" } }, - "terser-webpack-plugin": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.1.0.tgz", - "integrity": "sha512-0ZWDPIP8BtEDZdChbufcXUigOYk6dOX/P/X0hWxqDDcVAQLb8Yy/0FAaemSfax3PAA67+DJR778oz8qVbmy4hA==", + "node_modules/typescript": { + "version": "4.6.4", "dev": true, - "requires": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.3.0", - "p-limit": "^3.0.2", - "schema-utils": "^2.6.6", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^5.0.0", - "webpack-sources": "^1.4.3" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "dependencies": { - "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.36", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } + { + "type": "paypal", + "url": "https://paypal.me/faisalman" }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } + ], + "license": "MIT", + "engines": { + "node": "*" } }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/uglify-js": { + "version": "3.17.4", "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "node_modules/unbox-primitive": { + "version": "1.0.2", "dev": true, - "requires": { - "any-promise": "^1.0.0" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", "dev": true, - "requires": { - "setimmediate": "^1.0.4" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", "dev": true, - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/unique-filename": { + "version": "1.1.1", "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true + "node_modules/unique-slug": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } }, - "to-fast-properties": { + "node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "license": "MIT", + "engines": { + "node": ">= 10.0.0" } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "node_modules/unpipe": { + "version": "1.0.0", "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/update-browserslist-db": { + "version": "1.0.13", "dev": true, - "requires": { - "is-number": "^7.0.0" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "node_modules/urlgrey": { + "version": "1.0.0", "dev": true, - "requires": { - "punycode": "^2.1.1" + "license": "BSD-2-Clause", + "dependencies": { + "fast-url-parser": "^1.1.3" } }, - "transformation-matrix": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/transformation-matrix/-/transformation-matrix-1.15.3.tgz", - "integrity": "sha512-ThJH58GNFKhCw3gIoOtwf3tNwuYjbyEeiGdeq4mNMYWdJctnI896KUqn6PVt7jmNVepqa1bcKQtnMB1HtjsDMA==" - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "ts-md5": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/ts-md5/-/ts-md5-1.2.7.tgz", - "integrity": "sha512-emODogvKGWi1KO1l9c6YxLMBn6CEH3VrH5mVPIyOtxBG52BvV4jP3GWz6bOZCz61nLgBc3ffQYE4+EHfCD+V7w==" + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" }, - "ts-node": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.8.2.tgz", - "integrity": "sha512-duVj6BpSpUpD/oM4MfhO98ozgkp3Gt9qIp3jGxwU2DFvl/3IRaEAvbLa8G60uS7C77457e/m5TMowjedeRxI1Q==", + "node_modules/utils-merge": { + "version": "1.0.1", "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "3.1.1" + "license": "MIT", + "engines": { + "node": ">= 0.4.0" } }, - "ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", - "dev": true + "node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" }, - "tslint": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.2.tgz", - "integrity": "sha512-UyNrLdK3E0fQG/xWNqAFAC5ugtFyPO4JJR1KyyfQAyzR8W0fTRrC91A8Wej4BntFzcvETdCSDa/4PnNYJQLYiA==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.10.0", - "tsutils": "^2.29.0" - }, + "license": "Apache-2.0", "dependencies": { - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "node_modules/validate-npm-package-name": { + "version": "4.0.0", "dev": true, - "requires": { - "tslib": "^1.8.1" - }, + "license": "ISC", "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "node_modules/vary": { + "version": "1.1.2", "dev": true, - "requires": { - "safe-buffer": "^5.0.1" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true + "node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "node_modules/void-elements": { + "version": "2.0.1", "dev": true, - "requires": { - "prelude-ls": "~1.1.2" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true + "node_modules/vscode-json-languageservice": { + "version": "3.11.0", + "license": "MIT", + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "3.16.0-next.2", + "vscode-nls": "^5.0.0", + "vscode-uri": "^2.1.2" + } }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "node_modules/vscode-languageserver": { + "version": "6.1.1", + "license": "MIT", + "dependencies": { + "vscode-languageserver-protocol": "^3.15.3" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" } }, - "typescript": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", - "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", - "dev": true + "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "license": "MIT" }, - "ua-parser-js": { - "version": "0.7.21", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", - "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", - "dev": true + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.11", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0-next.2", + "license": "MIT" + }, + "node_modules/vscode-nls": { + "version": "5.2.0", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "2.1.2", + "license": "MIT" }, - "uglify-js": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.4.tgz", - "integrity": "sha512-8RZBJq5smLOa7KslsNsVcSH+KOXf1uDU8yqLeNuVKwmT0T3FA0ZoXlinQfRad7SDcbZZRZE4ov+2v71EnxNyCA==", + "node_modules/watchpack": { + "version": "2.4.0", "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.3" + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true - } + "minimalistic-assert": "^1.0.0" } }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true + "node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true + "node_modules/webcola": { + "version": "3.4.0", + "license": "MIT", + "dependencies": { + "d3-dispatch": "^1.0.3", + "d3-drag": "^1.0.4", + "d3-shape": "^1.3.5", + "d3-timer": "^1.0.5" + } }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true + "node_modules/webdriver-js-extender": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" + }, + "engines": { + "node": ">=6.9.x" + } }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "node_modules/webdriver-manager": { + "version": "12.1.9", "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "license": "MIT", + "dependencies": { + "adm-zip": "^0.5.2", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + }, + "bin": { + "webdriver-manager": "bin/webdriver-manager" + }, + "engines": { + "node": ">=6.9.x" } }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "node_modules/webdriver-manager/node_modules/adm-zip": { + "version": "0.5.10", "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "license": "MIT", + "engines": { + "node": ">=6.0" } }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "node_modules/webdriver-manager/node_modules/ansi-regex": { + "version": "2.1.1", "dev": true, - "requires": { - "unique-slug": "^2.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "node_modules/webdriver-manager/node_modules/ansi-styles": { + "version": "2.2.1", "dev": true, - "requires": { - "imurmurhash": "^0.1.4" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "universal-analytics": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", - "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", + "node_modules/webdriver-manager/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "requires": { - "debug": "^4.1.1", - "request": "^2.88.2", - "uuid": "^3.0.0" - }, + "license": "MIT", "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } + "node_modules/webdriver-manager/node_modules/chalk": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true + "node_modules/webdriver-manager/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" + "node_modules/webdriver-manager/node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "node_modules/webdriver-manager/node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "node_modules/webdriver-manager/node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, + "engines": [ + "node >=0.6.0" + ], "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" } }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "node_modules/webdriver-manager/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "urlgrey": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", - "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "node_modules/webdriver-manager/node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", "dev": true, - "requires": { - "os-homedir": "^1.0.0" + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "node_modules/webdriver-manager/node_modules/request": { + "name": "@cypress/request", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", + "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", "dev": true, - "requires": { - "inherits": "2.0.3" - }, "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.10.4", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util-promisify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", - "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "node_modules/webdriver-manager/node_modules/rimraf": { + "version": "2.7.1", "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3" + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - } + "node_modules/webdriver-manager/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/webdriver-manager/node_modules/strip-ansi": { + "version": "3.0.1", "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "node_modules/webdriver-manager/node_modules/supports-color": { + "version": "2.0.0", "dev": true, - "requires": { - "builtins": "^1.0.3" + "license": "MIT", + "engines": { + "node": ">=0.8.0" } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "node_modules/webdriver-manager/node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" } }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "vscode-json-languageservice": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-3.8.4.tgz", - "integrity": "sha512-njDG0+YJvYNKXH+6plQGZMxgbifATFrRpC6Qnm/SAn4IW8bMHxsYunsxrjtpqK42CVSz6Lr7bpbTEZbVuOmFLw==", - "requires": { - "jsonc-parser": "^2.3.1", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-languageserver-types": "3.16.0-next.2", - "vscode-nls": "^5.0.0", - "vscode-uri": "^2.1.2" + "node_modules/webdriver-manager/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" } }, - "vscode-jsonrpc": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz", - "integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==" - }, - "vscode-languageserver": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-6.1.1.tgz", - "integrity": "sha512-DueEpkUAkD5XTR4MLYNr6bQIp/UFR0/IPApgXU3YfCBCB08u2sm9hRCs6DxYZELkk++STPjpcjksR2H8qI3cDQ==", - "requires": { - "vscode-languageserver-protocol": "^3.15.3" - } + "node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" }, - "vscode-languageserver-protocol": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.3.tgz", - "integrity": "sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw==", - "requires": { - "vscode-jsonrpc": "^5.0.1", - "vscode-languageserver-types": "3.15.1" - }, + "node_modules/webpack": { + "version": "5.88.2", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "vscode-languageserver-types": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz", - "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==" + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "vscode-languageserver-textdocument": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", - "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } }, - "vscode-languageserver-types": { - "version": "3.16.0-next.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.2.tgz", - "integrity": "sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q==" + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "vscode-nls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz", - "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==" + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } }, - "vscode-uri": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", - "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==" + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, - "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "node_modules/webpack-dev-server": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz", + "integrity": "sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw==", "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } } } }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "requires": { - "defaults": "^1.0.3" + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "web-animations-js": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/web-animations-js/-/web-animations-js-2.3.2.tgz", - "integrity": "sha512-TOMFWtQdxzjWp8qx4DAraTWTsdhxVSiWa6NkPFSaPtZ1diKUxTn4yTix73A1euG1WbSOMMPcY51cnjTIHrGtDA==" + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, - "webcola": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webcola/-/webcola-3.4.0.tgz", - "integrity": "sha512-4BiLXjXw3SJHo3Xd+rF+7fyClT6n7I+AR6TkBqyQ4kTsePSAMDLRCXY1f3B/kXJeP9tYn4G1TblxTO+jAt0gaw==", - "requires": { - "d3-dispatch": "^1.0.3", - "d3-drag": "^1.0.4", - "d3-shape": "^1.3.5", - "d3-timer": "^1.0.5" + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "webdriver-js-extender": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", - "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", + "node_modules/webpack-merge": { + "version": "5.9.0", "dev": true, - "requires": { - "@types/selenium-webdriver": "^3.0.0", - "selenium-webdriver": "^3.0.1" + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "webpack": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", - "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } + "node_modules/webpack-sources": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - } + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true } } }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "node_modules/webpack/node_modules/@types/estree": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.10.0", "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.9.0", "dev": true, - "requires": { - "lodash": "^4.17.15" + "license": "MIT", + "peer": true, + "peerDependencies": { + "acorn": "^8" } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, + "license": "MIT", + "peer": true, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "webpack-subresource-integrity": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.1.tgz", - "integrity": "sha512-XMLFInbGbB1HV7K4vHWANzc1CN0t/c4bBvnlvGxGwV45yE/S/feAXIm8dJsCkzqWtSKnmaEgTp/meyeThxG4Iw==", + "node_modules/webpack/node_modules/webpack-sources": { + "version": "3.2.3", "dev": true, - "requires": { - "webpack-sources": "^1.3.0" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" } }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, - "requires": { + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "websocket-extensions": { + "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" + "engines": { + "node": ">=0.8.0" } }, - "when": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", - "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", - "dev": true + "node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } }, - "which": { + "node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "node_modules/which-module": { + "version": "2.0.1", + "dev": true, + "license": "ISC" }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "node_modules/which-typed-array": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", "dev": true, - "requires": { - "errno": "~0.1.7" + "license": "MIT" + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "worker-plugin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", - "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", + "node_modules/wordwrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", "dev": true, - "requires": { - "loader-utils": "^1.1.0" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "requires": { - "mkdirp": "^0.5.1" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "write-file-atomic": { + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "node_modules/ws": { + "version": "8.11.0", "dev": true, - "requires": { - "async-limiter": "~1.0.0" + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "xhr2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.0.tgz", - "integrity": "sha512-BDtiD0i2iKPK/S8OAZfpk6tyzEDnKKSjxWHcMBVmh+LuqJ8A32qXTyOx+TVOg2dKvq6zGBq2sgKPkEeRs1qTRA==" + "node_modules/xhr2": { + "version": "0.2.1", + "license": "MIT", + "engines": { + "node": ">= 6" + } }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, - "requires": { + "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "xmlbuilder": { + "node_modules/xmlbuilder": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } }, - "xterm": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/xterm/-/xterm-4.5.0.tgz", - "integrity": "sha512-4t12tsvtYnv13FBJwewddxdI/j4kSonmbQQv50j34R/rPIFbUNGtptbprmuUlTDAKvHLMDZ/Np2XcpNimga/HQ==" + "node_modules/xterm": { + "version": "4.19.0", + "license": "MIT" }, - "xterm-addon-fit": { + "node_modules/xterm-addon-fit": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.3.0.tgz", - "integrity": "sha512-kvkiqHVrnMXgyCH9Xn0BOBJ7XaWC/4BgpSWQy3SueqximgW630t/QOankgqkvk11iTOCwWdAY9DTyQBXUMN3lw==" + "license": "MIT", + "peerDependencies": { + "xterm": "^4.0.0" + } }, - "xxhashjs": { + "node_modules/xxhashjs": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "cuint": "^0.2.2" } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true + "node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "node_modules/yaml": { + "version": "1.10.2", "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "engines": { + "node": ">=12" } }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "node_modules/yargs-parser": { + "version": "21.1.1", "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "license": "ISC", + "engines": { + "node": ">=12" } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "yn": { + "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "zone.js": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", - "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" + "node_modules/zone.js": { + "version": "0.11.8", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + } } } } diff --git a/package.json b/package.json index c025d5188c..d97a77b060 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "stratos", - "version": "4.4.0", + "version": "4.5.0", "description": "Stratos Console", "main": "index.js", "scripts": { @@ -9,16 +9,16 @@ "fetch-backend-deps": "./build/bk-fetch-deps.sh", "test-backend": "./build/bk-build.sh test", "update-webdriver": "webdriver-manager update", - "build": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng build --prod", - "build-cf": "node --max_old_space_size=1500 --gc_interval=100 node_modules/@angular/cli/bin/ng build --prod", - "build-dev": "ng build --dev", + "build": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng build stratos --configuration production", + "build-cf": "node --max_old_space_size=1500 --gc_interval=100 node_modules/@angular/cli/bin/ng build stratos --configuration production", + "build-dev": "ng build stratos --dev", "prebuild-ui": "npm run build && npm run prebuild-zip", "prebuild-zip": "node build/prebuild-zip.js", "ng": "ng", "start": "ng serve", "start-high-mem": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng serve", "start-dev-high-mem": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng serve --aot=false", - "start-prod-high-mem": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng serve --prod", + "start-prod-high-mem": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng serve --configuration production", "start-dev": "ng serve --aot=false", "test-clean": "./build/clean-test-reports.sh", "test-reports": "./build/show-test-reports.sh", @@ -33,7 +33,6 @@ "codecov": "codecov -f coverage/coverage-final.json -F frontend", "codecov-backend": "codecov -f src/jetstream/coverage.txt -F backend", "lint": "ng lint --format stylish", - "sass-lint": "sass-lint -v", "e2e": "ng e2e", "e2e-dev": "STRATOS_E2E_BASE_URL=https://127.0.0.1:4200 ng e2e --dev-server-target= --base-url=https://127.0.0.1:4200", "e2e-local": "STRATOS_E2E_BASE_URL=https://127.0.0.1 ng e2e --dev-server-target= --base-url=https://127.0.0.1", @@ -49,40 +48,64 @@ }, "author": "", "license": "Apache-2.0", + "overrides": { + "ngx-monaco-editor": { + "@angular/core": "14.3.0", + "@angular/common": "14.3.0", + "tslib": "2.6.2" + }, + "jasmine-protractor-browser-log-reporter": { + "jasmine-core": "3.8.0", + "protractor": "7.0.0" + }, + "@swimlane/ngx-charts": { + "d3-color": "^3.1.0" + }, + "@ajsf/core": { + "@angular/flex-layout": "14.0.0-beta.41" + }, + "@ajsf/material": { + "@angular/flex-layout": "14.0.0-beta.41" + }, + "minimist": ">=1.2.6", + "xml2js": "0.5.0", + "postcss": "8.4.31", + "request": "npm:@cypress/request@^3.0.0" + }, "dependencies": { - "@angular/animations": "^10.2.0", - "@angular/cdk": "^10.2.0", - "@angular/common": "^10.2.0", - "@angular/compiler": "^10.2.0", - "@angular/core": "^10.2.0", - "@angular/flex-layout": "^10.0.0-beta.32", - "@angular/forms": "^10.2.0", - "@angular/material": "^10.2.5", - "@angular/material-moment-adapter": "^10.2.5", - "@angular/platform-browser": "^10.2.0", - "@angular/platform-browser-dynamic": "^10.2.0", - "@angular/platform-server": "^10.2.0", - "@angular/router": "^10.2.0", - "@cfstratos/ajsf-material": "^0.1.6", + "@ajsf/core": "^0.7.0", + "@ajsf/material": "^0.7.0", + "@angular/animations": "^14.3.0", + "@angular/cdk": "^14.2.7", + "@angular/common": "^14.3.0", + "@angular/core": "^14.3.0", + "@angular/flex-layout": "^14.0.0-beta.41", + "@angular/forms": "^14.3.0", + "@angular/material": "^14.2.7", + "@angular/material-moment-adapter": "^14.2.7", + "@angular/platform-browser": "^14.3.0", + "@angular/platform-browser-dynamic": "^14.3.0", + "@angular/platform-server": "^14.3.0", + "@angular/router": "^14.3.0", "@cfstratos/monaco-yaml": "^2.5.0", - "@ngrx/effects": "^10.0.1", - "@ngrx/router-store": "^10.0.1", - "@ngrx/store": "^10.0.1", - "@ngrx/store-devtools": "^10.0.1", - "@swimlane/ngx-charts": "^16.0.0", - "@swimlane/ngx-graph": "^7.2.0", - "@types/marked": "^1.1.0", + "@ngrx/effects": "^14.3.3", + "@ngrx/router-store": "^14.3.3", + "@ngrx/store": "^14.3.3", + "@ngrx/store-devtools": "^14.3.3", + "@swimlane/ngx-charts": "^20.4.1", + "@swimlane/ngx-graph": "^8.2.2", "@types/moment-timezone": "^0.5.13", "angular2-virtual-scroll": "^0.4.16", "core-js": "^3.6.5", - "immer": "^8.0.1", + "immer": "^10.0.3", "intersect": "^1.0.1", + "lodash": "^4.17.20", "lodash-es": "^4.17.14", "mappy-breakpoints": "^0.2.3", - "marked": "^1.1.0", + "marked": "^4.3.0", "moment": "^2.24.0", "moment-timezone": "^0.5.13", - "ngrx-store-localstorage": "10.1.1", + "ngrx-store-localstorage": "^14.0.0", "ngx-moment": "^3.5.0", "ngx-monaco-editor": "^9.0.0", "normalizr": "^3.6.0", @@ -91,38 +114,33 @@ "rxjs-spy": "^7.5.2", "rxjs-websockets": "~8.0.1", "ts-md5": "^1.2.7", - "tslib": "^2.0.3", - "web-animations-js": "^2.3.2", + "tslib": "^2.0.0", "xterm": "^4.5.0", "xterm-addon-fit": "^0.3.0", - "zone.js": "~0.10.2", - "lodash": "^4.17.20" + "zone.js": "~0.11.4" }, "engines": { - "node": "12.13.0" + "node": "^20.6", + "npm": ">=8.3" }, "devDependencies": { - "@angular-builders/custom-webpack": "^10.0.1", - "@angular-devkit/architect": "^0.1002.0", - "@angular-devkit/build-angular": "^0.1002.0", - "@angular-devkit/build-ng-packagr": "~0.1002.0", - "@angular-devkit/core": "^10.2.0", - "@angular-devkit/schematics": "^10.2.0", - "@angular/cli": "^10.2.0", - "@angular/compiler-cli": "^10.2.0", - "@angular/language-service": "^10.2.0", + "@angular-builders/custom-webpack": "^14.1.0", + "@angular-devkit/architect": "^0.1402.12", + "@angular-devkit/build-angular": "^14.2.12", + "@angular-devkit/core": "^14.2.12", + "@angular-devkit/schematics": "^14.2.12", + "@angular/cli": "^14.2.12", + "@angular/language-service": "^14.2.12", "@schematics/angular": "^9.1.5", - "@types/jasmine": "^3.5.10", + "@types/jasmine": "~3.6.0", "@types/jasminewd2": "~2.0.8", "@types/js-yaml": "^3.12.5", - "@types/karma": "^5.0.0", - "@types/node": "^13.11.1", - "@types/request": "^2.48.4", + "@types/karma": "^6.3.5", + "@types/node": "^20.6.1", "acorn": "^7.1.1", "adm-zip": "^0.4.16", "browserstack-local": "^1.4.5", "codecov": "^3.7.1", - "codelyzer": "^6.0.1", "copy-webpack-plugin": "^6.2.0", "delete": "^1.1.0", "fs-extra": "^9.0.1", @@ -130,34 +148,31 @@ "istanbul": "^0.4.5", "istanbul-api": "2.1.6", "istanbul-reports": "3.0.2", - "jasmine-core": "~3.5.0", + "jasmine-core": "~3.8.0", "jasmine-protractor-browser-log-reporter": "cf-stratos/jasmine-protractor-browser-log-reporter", - "jasmine-spec-reporter": "~5.0.1", + "jasmine-spec-reporter": "~5.0.0", "js-yaml": "~3.14.0", "json-schema-to-typescript": "^9.1.0", - "karma": "~5.0.1", + "karma": "~6.4.2", "karma-chrome-launcher": "~3.1.0", "karma-cli": "~2.0.0", - "karma-coverage-istanbul-reporter": "^2.1.1", - "karma-jasmine": "~3.1.1", - "karma-jasmine-html-reporter": "^1.5.3", + "karma-coverage": "^2.2.1", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "^1.5.0", "karma-spec-reporter": "0.0.32", "kind-of": "^6.0.3", "mem": "6.1.0", "mktemp": "^1.0.0", - "ng-packagr": "^10.1.2", + "ng-packagr": "^14.2.2", "npm-run-all": "^4.1.5", "nyc": "^15.1.0", - "protractor": "^5.4.3", + "protractor": "^7.0.0", "ps-node": "^0.1.6", "q": "^1.4.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", + "@cypress/request": "^3.0.0", "rxjs-tslint": "^0.1.8", - "sass-lint": "^1.12.1", - "stratos-protractor-reporter": "^1.2.3", "ts-node": "^8.8.2", "tslint": "~6.1.0", - "typescript": "4.0.5" + "typescript": "4.6.4" } } diff --git a/protractor.conf.js b/protractor.conf.js index 38d078a47f..aa5cc5d56c 100644 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -5,7 +5,6 @@ const { SpecReporter } = require('jasmine-spec-reporter'); -const HtmlReporter = require('stratos-protractor-reporter'); const moment = require('moment'); const skipPlugin = require('./src/test-e2e/skip-plugin.js'); const globby = require('globby'); @@ -217,15 +216,6 @@ const config = { require('ts-node').register({ project: 'src/test-e2e/tsconfig.e2e.json' }); - jasmine.getEnv().addReporter(new HtmlReporter({ - baseDirectory: E2E_REPORT_FOLDER, - takeScreenShotsOnlyForFailedSpecs: true, - docTitle: 'E2E Test Report: ' + timestamp, - docName: 'index.html', - logIgnore: [ - /\/auth\/session\/verify - Failed to load resource/g - ] - }).getJasmine2Reporter()); jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: 'raw', diff --git a/src/frontend/packages/cf-autoscaler/src/cf-autoscaler-routing.module.ts b/src/frontend/packages/cf-autoscaler/src/cf-autoscaler-routing.module.ts index 85f4dcbb8e..77c6928f34 100644 --- a/src/frontend/packages/cf-autoscaler/src/cf-autoscaler-routing.module.ts +++ b/src/frontend/packages/cf-autoscaler/src/cf-autoscaler-routing.module.ts @@ -17,7 +17,7 @@ const customRoutes: Routes = [ @NgModule({ imports: [ - RouterModule.forRoot(customRoutes), + RouterModule.forRoot(customRoutes, { relativeLinkResolution: 'legacy' }), ], }) export class CfAutoscalerRoutingModule { } diff --git a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-base.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-base.component.spec.ts index 29293ef982..82de11682e 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-base.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-base.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -16,7 +16,7 @@ describe('AutoscalerBaseComponent', () => { let component: AutoscalerBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AutoscalerBaseComponent], imports: [ diff --git a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-metric-page/autoscaler-metric-page.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-metric-page/autoscaler-metric-page.component.spec.ts index a6b358f4d1..7c1d532427 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-metric-page/autoscaler-metric-page.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-metric-page/autoscaler-metric-page.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -17,7 +17,7 @@ describe('AutoscalerMetricPageComponent', () => { let component: AutoscalerMetricPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AutoscalerMetricPageComponent], imports: [ diff --git a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-scale-history-page/autoscaler-scale-history-page.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-scale-history-page/autoscaler-scale-history-page.component.spec.ts index 477a22f4fa..881f3a14e6 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-scale-history-page/autoscaler-scale-history-page.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-scale-history-page/autoscaler-scale-history-page.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -17,7 +17,7 @@ describe('AutoscalerScaleHistoryPageComponent', () => { let component: AutoscalerScaleHistoryPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AutoscalerScaleHistoryPageComponent], imports: [ diff --git a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.spec.ts index 43f27e5b57..1edd5a5ddf 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/autoscaler-tab-extension/autoscaler-tab-extension.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -30,7 +30,7 @@ describe('AutoscalerTabExtensionComponent', () => { let component: AutoscalerTabExtensionComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AutoscalerTabExtensionComponent, diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.spec.ts index 847513f52e..9e2b9be59f 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -17,7 +17,7 @@ describe('EditAutoscalerCredentialComponent', () => { let component: EditAutoscalerCredentialComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ EditAutoscalerCredentialComponent, diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.ts index 55d26acc8e..69274cdabc 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-credential/edit-autoscaler-credential.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; import { MatSnackBar, MatSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar'; import { Store } from '@ngrx/store'; @@ -35,7 +35,7 @@ export class EditAutoscalerCredentialComponent implements OnInit, OnDestroy { parentUrl = `/applications/${this.applicationService.cfGuid}/${this.applicationService.appGuid}/autoscale`; applicationName$: Observable; - public editCredentialForm: FormGroup; + public editCredentialForm: UntypedFormGroup; public appAutoscalerCredential$: Observable; private appAutoscalerCredentialErrorSub: Subscription; @@ -49,16 +49,16 @@ export class EditAutoscalerCredentialComponent implements OnInit, OnDestroy { constructor( public applicationService: ApplicationService, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private store: Store, private entityServiceFactory: EntityServiceFactory, private appAutoscalerCredentialSnackBar: MatSnackBar, private confirmDialog: ConfirmationDialogService, ) { this.editCredentialForm = this.fb.group({ - actype: new FormControl({ value: true }), - acusername: new FormControl({ value: '', disabled: true }, Validators.required), - acpassword: new FormControl({ value: '', disabled: true }, Validators.required), + actype: new UntypedFormControl({ value: true }), + acusername: new UntypedFormControl({ value: '', disabled: true }, Validators.required), + acpassword: new UntypedFormControl({ value: '', disabled: true }, Validators.required), }); } diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step1/edit-autoscaler-policy-step1.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step1/edit-autoscaler-policy-step1.component.spec.ts index 5dd121d938..f5f9cedd61 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step1/edit-autoscaler-policy-step1.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step1/edit-autoscaler-policy-step1.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -17,7 +17,7 @@ describe('EditAutoscalerPolicyStep1Component', () => { let component: EditAutoscalerPolicyStep1Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditAutoscalerPolicyStep1Component], imports: [ diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step1/edit-autoscaler-policy-step1.component.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step1/edit-autoscaler-policy-step1.component.ts index 3437024abe..71b73de3b0 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step1/edit-autoscaler-policy-step1.component.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step1/edit-autoscaler-policy-step1.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; import { ActivatedRoute } from '@angular/router'; import moment from 'moment-timezone'; @@ -26,13 +26,13 @@ export class EditAutoscalerPolicyStep1Component extends EditAutoscalerPolicyDire policyAlert = PolicyAlert; timezoneOptions = moment.tz.names(); - editLimitForm: FormGroup; + editLimitForm: UntypedFormGroup; private editLimitValid = true; constructor( public applicationService: ApplicationService, - private fb: FormBuilder, + private fb: UntypedFormBuilder, service: EditAutoscalerPolicyService, route: ActivatedRoute ) { diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.spec.ts index 809b56d90d..2b981718e1 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -16,7 +16,7 @@ describe('EditAutoscalerPolicyStep2Component', () => { let component: EditAutoscalerPolicyStep2Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditAutoscalerPolicyStep2Component], imports: [ diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.ts index 05c2a6591b..7d09104a80 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step2/edit-autoscaler-policy-step2.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; import { ActivatedRoute } from '@angular/router'; import { BehaviorSubject, Observable, Subscription } from 'rxjs'; @@ -39,7 +39,7 @@ export class EditAutoscalerPolicyStep2Component extends EditAutoscalerPolicyDire private metricUnitSubject = new BehaviorSubject(this.metricTypes[0]); metricUnit$: Observable; operatorTypes = AutoscalerConstants.UpperOperators.concat(AutoscalerConstants.LowerOperators); - editTriggerForm: FormGroup; + editTriggerForm: UntypedFormGroup; // appAutoscalerPolicy$: Observable; public currentPolicy: AppAutoscalerPolicyLocal; @@ -52,7 +52,7 @@ export class EditAutoscalerPolicyStep2Component extends EditAutoscalerPolicyDire constructor( public applicationService: ApplicationService, - private fb: FormBuilder, + private fb: UntypedFormBuilder, service: EditAutoscalerPolicyService, route: ActivatedRoute ) { diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.spec.ts index c154204509..4a8555ec7b 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -16,7 +16,7 @@ describe('EditAutoscalerPolicyStep3Component', () => { let component: EditAutoscalerPolicyStep3Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditAutoscalerPolicyStep3Component], imports: [ diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.ts index 3c6f533784..1e448f0cbf 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step3/edit-autoscaler-policy-step3.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; import { ActivatedRoute } from '@angular/router'; import moment from 'moment-timezone'; @@ -33,7 +33,7 @@ export class EditAutoscalerPolicyStep3Component extends EditAutoscalerPolicyDire policyAlert = PolicyAlert; weekdayOptions = AutoscalerConstants.WeekdayOptions; monthdayOptions = AutoscalerConstants.MonthdayOptions; - editRecurringScheduleForm: FormGroup; + editRecurringScheduleForm: UntypedFormGroup; public currentPolicy: AppAutoscalerPolicyLocal; private editIndex = -1; @@ -47,7 +47,7 @@ export class EditAutoscalerPolicyStep3Component extends EditAutoscalerPolicyDire constructor( public applicationService: ApplicationService, - private fb: FormBuilder, + private fb: UntypedFormBuilder, service: EditAutoscalerPolicyService, route: ActivatedRoute ) { diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.spec.ts index 4c5e3f48fc..642f429281 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -17,7 +17,7 @@ describe('EditAutoscalerPolicyStep4Component', () => { let component: EditAutoscalerPolicyStep4Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditAutoscalerPolicyStep4Component], imports: [ diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.ts index f0f42fdc32..9e006e61c7 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy-step4/edit-autoscaler-policy-step4.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; @@ -39,7 +39,7 @@ import { EditAutoscalerPolicyService } from '../edit-autoscaler-policy-service'; export class EditAutoscalerPolicyStep4Component extends EditAutoscalerPolicyDirective implements OnInit { policyAlert = PolicyAlert; - editSpecificDateForm: FormGroup; + editSpecificDateForm: UntypedFormGroup; private updateAppAutoscalerPolicyService: EntityService; public currentPolicy: AppAutoscalerPolicyLocal; @@ -54,7 +54,7 @@ export class EditAutoscalerPolicyStep4Component extends EditAutoscalerPolicyDire constructor( public applicationService: ApplicationService, private store: Store, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private entityServiceFactory: EntityServiceFactory, service: EditAutoscalerPolicyService, route: ActivatedRoute diff --git a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy.component.spec.ts index bfab3dab44..b53d187f9d 100644 --- a/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/features/edit-autoscaler-policy/edit-autoscaler-policy.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -22,7 +22,7 @@ describe('EditAutoscalerPolicyComponent', () => { let component: EditAutoscalerPolicyComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ EditAutoscalerPolicyComponent, diff --git a/src/frontend/packages/cf-autoscaler/src/shared/card-autoscaler-default/card-autoscaler-default.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/shared/card-autoscaler-default/card-autoscaler-default.component.spec.ts index 872a62cad6..939b52d228 100644 --- a/src/frontend/packages/cf-autoscaler/src/shared/card-autoscaler-default/card-autoscaler-default.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/shared/card-autoscaler-default/card-autoscaler-default.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -25,7 +25,7 @@ describe('CardAutoscalerDefaultComponent', () => { let component: CardAutoscalerDefaultComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardAutoscalerDefaultComponent, diff --git a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-event/table-cell-autoscaler-event-change/table-cell-autoscaler-event-change.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-event/table-cell-autoscaler-event-change/table-cell-autoscaler-event-change.component.spec.ts index 69ac9292c9..479e0fb9ae 100644 --- a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-event/table-cell-autoscaler-event-change/table-cell-autoscaler-event-change.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-event/table-cell-autoscaler-event-change/table-cell-autoscaler-event-change.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MatIcon } from '@angular/material/icon'; import { EntityInfo } from '../../../../../../store/src/types/api.types'; @@ -9,7 +9,7 @@ describe('TableCellAutoscalerEventChangeComponent', () => { let component: TableCellAutoscalerEventChangeComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellAutoscalerEventChangeComponent, MatIcon, TableCellAutoscalerEventChangeIconPipe] }) diff --git a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-event/table-cell-autoscaler-event-status/table-cell-autoscaler-event-status.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-event/table-cell-autoscaler-event-status/table-cell-autoscaler-event-status.component.spec.ts index d6c63bcca2..9686befd9d 100644 --- a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-event/table-cell-autoscaler-event-status/table-cell-autoscaler-event-status.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-event/table-cell-autoscaler-event-status/table-cell-autoscaler-event-status.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MatIcon } from '@angular/material/icon'; import { EntityInfo } from '../../../../../../store/src/types/api.types'; @@ -9,7 +9,7 @@ describe('TableCellAutoscalerEventStatusComponent', () => { let component: TableCellAutoscalerEventStatusComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellAutoscalerEventStatusComponent, MatIcon, TableCellAutoscalerEventStatusIconPipe] }) diff --git a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/app-autoscaler-metric-chart-card.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/app-autoscaler-metric-chart-card.component.spec.ts index 6444356618..45974f6b9e 100644 --- a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/app-autoscaler-metric-chart-card.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/app-autoscaler-metric-chart-card.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; import { NgxChartsModule } from '@swimlane/ngx-charts'; @@ -30,7 +30,7 @@ import { AppAutoscalerComboSeriesVerticalComponent } from './combo-chart/combo-s describe('AppAutoscalerMetricChartCardComponent', () => { let component: AppAutoscalerMetricChartCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AppAutoscalerMetricChartCardComponent, diff --git a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/combo-chart/combo-chart.component.ts b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/combo-chart/combo-chart.component.ts index f7e5a8b01f..6d9edad5f4 100644 --- a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/combo-chart/combo-chart.component.ts +++ b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/combo-chart/combo-chart.component.ts @@ -14,6 +14,7 @@ import { calculateViewDimensions, ColorHelper, LineSeriesComponent, + ScaleType, ViewDimensions, } from '@swimlane/ngx-charts'; import { scaleBand, scaleLinear, scalePoint, scaleTime } from 'd3-scale'; @@ -43,7 +44,7 @@ export class AppAutoscalerComboChartComponent extends BaseChartComponent { @Input() gradient: boolean; @Input() showGridLines = true; @Input() activeEntries: any[] = []; - @Input() schemeType: string; + @Input() schemeType: ScaleType; @Input() xAxisTickFormatting: any; @Input() yAxisTickFormatting: any; @Input() roundDomains = false; @@ -344,7 +345,7 @@ export class AppAutoscalerComboChartComponent extends BaseChartComponent { domain = this.yDomain; } this.colors = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors); - this.colorsLine = new ColorHelper(this.colorSchemeLine, this.schemeType, domain, this.customColors); + this.colorsLine = new ColorHelper({ domain: this.colorSchemeLine, name: "colorsSchemeLine", selectable: true, group: this.schemeType }, this.schemeType, domain, this.customColors); this.colorsExtra = new ColorHelper(this.scheme, this.schemeType, domain, this.customColors); } @@ -377,7 +378,7 @@ export class AppAutoscalerComboChartComponent extends BaseChartComponent { opts.colors.customColors = this.legendData; this.legendData.map((item) => { opts.colors.colorDomain.push(item.value); - opts.colors.domain.push(item.name); + (opts.colors.domain as any[]).push(item.name); opts.domain.push(item.name); }); return opts; diff --git a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/combo-chart/combo-series-vertical.component.spec.ts b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/combo-chart/combo-series-vertical.component.spec.ts index 4c3f7879ac..6333dc3c63 100644 --- a/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/combo-chart/combo-series-vertical.component.spec.ts +++ b/src/frontend/packages/cf-autoscaler/src/shared/list-types/app-autoscaler-metric-chart/app-autoscaler-metric-chart-card/combo-chart/combo-series-vertical.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -16,7 +16,7 @@ describe('AppAutoscalerComboSeriesVerticalComponent', () => { let component: AppAutoscalerComboSeriesVerticalComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AppAutoscalerComboSeriesVerticalComponent], imports: [ diff --git a/src/frontend/packages/cf-autoscaler/src/store/autoscaler.effects.ts b/src/frontend/packages/cf-autoscaler/src/store/autoscaler.effects.ts index 98c2e1e7c1..f34cac7de2 100644 --- a/src/frontend/packages/cf-autoscaler/src/store/autoscaler.effects.ts +++ b/src/frontend/packages/cf-autoscaler/src/store/autoscaler.effects.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpErrorResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Action, Store } from '@ngrx/store'; import { Observable } from 'rxjs'; import { catchError, mergeMap, withLatestFrom } from 'rxjs/operators'; @@ -89,8 +89,8 @@ export class AutoscalerEffects { private store: Store, ) { } - @Effect() - fetchAutoscalerInfo$ = this.actions$.pipe( + + fetchAutoscalerInfo$ = createEffect(() => this.actions$.pipe( ofType(AUTOSCALER_INFO), mergeMap(action => { const actionType = 'fetch'; @@ -113,10 +113,10 @@ export class AutoscalerEffects { catchError(err => [ new WrapperRequestActionFailed(createAutoscalerErrorMessage('fetch autoscaler info', err), action, actionType) ])); - })); + }))); - @Effect() - fetchAppAutoscalerHealth$ = this.actions$.pipe( + + fetchAppAutoscalerHealth$ = createEffect(() => this.actions$.pipe( ofType(APP_AUTOSCALER_HEALTH), mergeMap(action => { const actionType = 'fetch'; @@ -139,15 +139,15 @@ export class AutoscalerEffects { catchError(err => [ new WrapperRequestActionFailed(createAutoscalerErrorMessage('fetch health info', err), action, actionType) ])); - })); + }))); - @Effect() - createAppAutoscalerPolicy$ = this.actions$.pipe( + + createAppAutoscalerPolicy$ = createEffect(() => this.actions$.pipe( ofType(CREATE_APP_AUTOSCALER_POLICY), - mergeMap(action => this.createUpdatePolicy(action))); + mergeMap(action => this.createUpdatePolicy(action)))); - @Effect() - updateAppAutoscalerPolicy$ = this.actions$.pipe( + + updateAppAutoscalerPolicy$ = createEffect(() => this.actions$.pipe( ofType(UPDATE_APP_AUTOSCALER_POLICY), mergeMap(action => { const actionType = 'update'; @@ -173,16 +173,16 @@ export class AutoscalerEffects { catchError(err => [ new WrapperRequestActionFailed(createAutoscalerErrorMessage('update policy', err), action, actionType) ])); - })); + }))); - @Effect() - getAppAutoscalerPolicy$ = this.actions$.pipe( + + getAppAutoscalerPolicy$ = createEffect(() => this.actions$.pipe( ofType(APP_AUTOSCALER_POLICY), mergeMap(action => this.fetchPolicy(action)) - ); + )); - @Effect() - detachAppAutoscalerPolicy$ = this.actions$.pipe( + + detachAppAutoscalerPolicy$ = createEffect(() => this.actions$.pipe( ofType(DETACH_APP_AUTOSCALER_POLICY), mergeMap(action => { const actionType = 'delete'; @@ -205,16 +205,16 @@ export class AutoscalerEffects { catchError(err => [ new WrapperRequestActionFailed(createAutoscalerErrorMessage('detach policy', err), action, actionType) ])); - })); + }))); - @Effect() - fetchAppAutoscalerPolicyTrigger$ = this.actions$.pipe( + + fetchAppAutoscalerPolicyTrigger$ = createEffect(() => this.actions$.pipe( ofType(APP_AUTOSCALER_POLICY_TRIGGER), mergeMap(action => this.fetchPolicy(new GetAppAutoscalerPolicyAction(action.guid, action.endpointGuid), action)) - ); + )); - @Effect() - updateAppAutoscalerCredential$ = this.actions$.pipe( + + updateAppAutoscalerCredential$ = createEffect(() => this.actions$.pipe( ofType(UPDATE_APP_AUTOSCALER_CREDENTIAL), mergeMap(action => { const actionType = 'update'; @@ -240,10 +240,10 @@ export class AutoscalerEffects { catchError(err => [ new WrapperRequestActionFailed(createAutoscalerErrorMessage('update credential', err), action, actionType) ])); - })); + }))); - @Effect() - deleteAppAutoscalerCredential$ = this.actions$.pipe( + + deleteAppAutoscalerCredential$ = createEffect(() => this.actions$.pipe( ofType(DELETE_APP_AUTOSCALER_CREDENTIAL), mergeMap(action => { const actionType = 'delete'; @@ -266,10 +266,10 @@ export class AutoscalerEffects { catchError(err => [ new WrapperRequestActionFailed(createAutoscalerErrorMessage('delete credential', err), action, actionType) ])); - })); + }))); - @Effect() - fetchAppAutoscalerScalingHistory$ = this.actions$.pipe( + + fetchAppAutoscalerScalingHistory$ = createEffect(() => this.actions$.pipe( ofType(APP_AUTOSCALER_SCALING_HISTORY), withLatestFrom(this.store), mergeMap(([action, state]) => { @@ -318,10 +318,10 @@ export class AutoscalerEffects { catchError(err => [ new WrapperRequestActionFailed(createAutoscalerErrorMessage('fetch scaling history', err), action, actionType) ])); - })); + }))); - @Effect() - fetchAppAutoscalerAppMetric$ = this.actions$.pipe( + + fetchAppAutoscalerAppMetric$ = createEffect(() => this.actions$.pipe( ofType(FETCH_APP_AUTOSCALER_METRIC), mergeMap(action => { const actionType = 'fetch'; @@ -349,7 +349,7 @@ export class AutoscalerEffects { catchError(err => [ new WrapperRequestActionFailed(createAutoscalerErrorMessage('fetch metrics', err), action, actionType) ])); - })); + }))); private createUpdatePolicy( action: CreateAppAutoscalerPolicyAction | UpdateAppAutoscalerPolicyAction, diff --git a/src/frontend/packages/cf-autoscaler/src/test.ts b/src/frontend/packages/cf-autoscaler/src/test.ts index f205020844..db08d2e9fd 100644 --- a/src/frontend/packages/cf-autoscaler/src/test.ts +++ b/src/frontend/packages/cf-autoscaler/src/test.ts @@ -1,7 +1,7 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files import 'core-js/es/reflect'; -import 'zone.js/dist/zone'; -import 'zone.js/dist/zone-testing'; +import 'zone.js'; +import 'zone.js/testing'; import { APP_BASE_HREF } from '@angular/common'; import { getTestBed } from '@angular/core/testing'; @@ -14,7 +14,9 @@ declare const require: any; const testBed = getTestBed(); testBed.initTestEnvironment( BrowserDynamicTestingModule, - platformBrowserDynamicTesting() + platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false } +} ); beforeEach(() => { diff --git a/src/frontend/packages/cf-autoscaler/tsconfig.lib.json b/src/frontend/packages/cf-autoscaler/tsconfig.lib.json index 1dc99824ea..1ace645d3b 100644 --- a/src/frontend/packages/cf-autoscaler/tsconfig.lib.json +++ b/src/frontend/packages/cf-autoscaler/tsconfig.lib.json @@ -1,6 +1,8 @@ { "extends": "../../../tsconfig.lib.json", "compilerOptions": { + "declaration": true, + "declarationMap": true, "outDir": "../../../../out-tsc" }, "exclude": ["./src/test.ts", "**/*.spec.ts"] diff --git a/src/frontend/packages/cf-autoscaler/tsconfig.lib.prod.json b/src/frontend/packages/cf-autoscaler/tsconfig.lib.prod.json index b1d501abbc..a83f1ff433 100644 --- a/src/frontend/packages/cf-autoscaler/tsconfig.lib.prod.json +++ b/src/frontend/packages/cf-autoscaler/tsconfig.lib.prod.json @@ -1,6 +1,10 @@ { "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declaration": false, + "declarationMap": false + }, "angularCompilerOptions": { - "enableIvy": false + "compilationMode": "partial" } } \ No newline at end of file diff --git a/src/frontend/packages/cloud-foundry/src/cloud-foundry-routing.module.ts b/src/frontend/packages/cloud-foundry/src/cloud-foundry-routing.module.ts index e3ef0fd606..de9eafc50e 100644 --- a/src/frontend/packages/cloud-foundry/src/cloud-foundry-routing.module.ts +++ b/src/frontend/packages/cloud-foundry/src/cloud-foundry-routing.module.ts @@ -57,7 +57,7 @@ const customRoutes: Routes = [ @NgModule({ imports: [ - RouterModule.forRoot(customRoutes), + RouterModule.forRoot(customRoutes, { relativeLinkResolution: 'legacy' }), ], declarations: [] }) diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/application-delete.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/application-delete.component.spec.ts index 8137d582fc..c97c88a00f 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/application-delete.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/application-delete.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { generateTestApplicationServiceProvider } from '../../../../test-framework/application-service-helper'; @@ -11,7 +11,7 @@ describe('ApplicationDeleteComponent', () => { let fixture: ComponentFixture>; const appId = '1'; const cfId = '2'; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/delete-app-instances/delete-app-instances.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/delete-app-instances/delete-app-instances.component.spec.ts index 184b50070a..3b7a27f304 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/delete-app-instances/delete-app-instances.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/delete-app-instances/delete-app-instances.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateTestApplicationServiceProvider } from '../../../../../test-framework/application-service-helper'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -15,7 +15,7 @@ describe('DeleteAppInstancesComponent', () => { let fixture: ComponentFixture; const appId = '1'; const cfId = '2'; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DeleteAppServiceInstancesComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/delete-app-routes/delete-app-routes.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/delete-app-routes/delete-app-routes.component.spec.ts index 7e6b4e0ff6..2f6f72375a 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/delete-app-routes/delete-app-routes.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application-delete/delete-app-routes/delete-app-routes.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateTestApplicationServiceProvider } from '../../../../../test-framework/application-service-helper'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -14,7 +14,7 @@ describe('DeleteAppRoutesComponent', () => { let fixture: ComponentFixture; const appId = '1'; const cfId = '2'; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DeleteAppRoutesComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application-wall/application-wall.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application-wall/application-wall.component.spec.ts index 3c7ef0d531..65a8b22bd9 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application-wall/application-wall.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application-wall/application-wall.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -13,7 +13,7 @@ describe('ApplicationWallComponent', () => { let component: ApplicationWallComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ApplicationWallComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-base.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-base.component.spec.ts index c906d8833d..8f1e44e875 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-base.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-base.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { CoreModule } from '../../../../../core/src/core/core.module'; @@ -11,7 +11,7 @@ describe('ApplicationBaseComponent', () => { let component: ApplicationBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ApplicationBaseComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/application-poll/application-poll.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/application-poll/application-poll.component.spec.ts index d20348cc9f..ec50f3f9cc 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/application-poll/application-poll.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/application-poll/application-poll.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateTestApplicationServiceProvider } from '../../../../../../test-framework/application-service-helper'; import { generateCfBaseTestModules } from '../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -14,7 +14,7 @@ describe('ApplicationPollComponent', () => { const appId = '1'; const cfId = '2'; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ApplicationPollComponent], providers: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/application-tabs-base.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/application-tabs-base.component.spec.ts index 2bac8414af..608d2c00b4 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/application-tabs-base.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/application-tabs-base.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { StoreModule } from '@ngrx/store'; @@ -23,7 +23,7 @@ describe('ApplicationTabsBaseComponent', () => { const appId = '1'; const cfId = '2'; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ApplicationTabsBaseComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.spec.ts index b0b0411d95..54ba250b31 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/build-tab.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, inject, TestBed } from '@angular/core/testing'; +import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -25,7 +25,7 @@ describe('BuildTabComponent', () => { let component: BuildTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ BuildTabComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/view-buildpack/view-buildpack.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/view-buildpack/view-buildpack.component.spec.ts index e8e915063b..77598b8f2a 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/view-buildpack/view-buildpack.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/build-tab/view-buildpack/view-buildpack.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ViewBuildpackComponent } from './view-buildpack.component'; @@ -6,7 +6,7 @@ describe('ViewBuildpackComponent', () => { let component: ViewBuildpackComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ViewBuildpackComponent ] }) diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/events-tab/events-tab.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/events-tab/events-tab.component.spec.ts index e996e1fd9c..1054dc3cc7 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/events-tab/events-tab.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/events-tab/events-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Store } from '@ngrx/store'; @@ -32,7 +32,7 @@ describe('EventsTabComponent', () => { let component: EventsTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ EventsTabComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/gitscm-tab/gitscm-tab.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/gitscm-tab/gitscm-tab.component.spec.ts index af8f5fcd90..d5f529f6b5 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/gitscm-tab/gitscm-tab.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/gitscm-tab/gitscm-tab.component.spec.ts @@ -1,7 +1,7 @@ import { DatePipe } from '@angular/common'; import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -20,7 +20,7 @@ import { GitSCMTabComponent } from './gitscm-tab.component'; describe('GitSCMTabComponent', () => { let component: GitSCMTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [GitSCMTabComponent, GithubCommitAuthorComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/instances-tab/instances-tab.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/instances-tab/instances-tab.component.spec.ts index e38aff2401..00bd6f2274 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/instances-tab/instances-tab.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/instances-tab/instances-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { testSCFEndpointGuid } from '@stratosui/store/testing'; @@ -22,7 +22,7 @@ describe('InstancesTabComponent', () => { let component: InstancesTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [InstancesTabComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/log-stream-tab/log-stream-tab.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/log-stream-tab/log-stream-tab.component.spec.ts index 03b62309d1..ca82bb9852 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/log-stream-tab/log-stream-tab.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/log-stream-tab/log-stream-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { StoreModule } from '@ngrx/store'; @@ -22,7 +22,7 @@ describe('LogStreamTabComponent', () => { const appId = ''; const cfId = '2'; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ StoreModule, diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/metrics-tab/metrics-tab.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/metrics-tab/metrics-tab.component.spec.ts index 42bf58fa38..0ca1b46ff3 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/metrics-tab/metrics-tab.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/metrics-tab/metrics-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { MDAppModule } from '../../../../../../../../core/src/core/md.module'; @@ -14,7 +14,7 @@ describe('MetricsTabComponent', () => { let fixture: ComponentFixture; const appId = '1'; const cfId = '2'; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [MetricsTabComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/routes-tab/routes-tab/routes-tab.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/routes-tab/routes-tab/routes-tab.component.spec.ts index e24947c5cf..9d7e24530c 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/routes-tab/routes-tab/routes-tab.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/routes-tab/routes-tab/routes-tab.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateTestApplicationServiceProvider } from '../../../../../../../../test-framework/application-service-helper'; import { generateCfBaseTestModules } from '../../../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -11,7 +11,7 @@ describe('RoutesTabComponent', () => { let component: RoutesTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [RoutesTabComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/services-tab/services-tab.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/services-tab/services-tab.component.spec.ts index a608c0b054..27758e0565 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/services-tab/services-tab.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/services-tab/services-tab.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EntityMonitorFactory } from '../../../../../../../../store/src/monitors/entity-monitor.factory.service'; import { PaginationMonitorFactory } from '../../../../../../../../store/src/monitors/pagination-monitor.factory'; @@ -14,7 +14,7 @@ describe('ServicesTabComponent', () => { let component: ServicesTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ServicesTabComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/variables-tab/variables-tab.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/variables-tab/variables-tab.component.spec.ts index 08e4ab844a..72e1b53a3a 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/variables-tab/variables-tab.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/application/application-tabs-base/tabs/variables-tab/variables-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule } from '@ngrx/store'; @@ -16,7 +16,7 @@ describe('VariablesTabComponent', () => { let component: VariablesTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [VariablesTabComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/cli-info-application/cli-info-application.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/cli-info-application/cli-info-application.component.spec.ts index 7c10059edc..e067c64105 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/cli-info-application/cli-info-application.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/cli-info-application/cli-info-application.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { CoreModule } from '../../../../../core/src/core/core.module'; @@ -19,7 +19,7 @@ describe('CliInfoApplicationComponent', () => { const appId = '1'; const cfId = '2'; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CliInfoApplicationComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step2/create-application-step2.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step2/create-application-step2.component.spec.ts index 83db5d9ab7..75c39f08ea 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step2/create-application-step2.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step2/create-application-step2.component.spec.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; import { HttpBackend, HttpClient, HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../core/src/core/core.module'; @@ -14,7 +14,7 @@ describe('CreateApplicationStep2Component', () => { let component: CreateApplicationStep2Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CreateApplicationStep2Component diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step2/create-application-step2.component.ts b/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step2/create-application-step2.component.ts index 09002d671a..a0c5b39bfe 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step2/create-application-step2.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step2/create-application-step2.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; import { Store } from '@ngrx/store'; import { Observable, of as observableOf } from 'rxjs'; @@ -20,13 +20,13 @@ import { AppNameUniqueChecking } from '../../../../shared/directives/app-name-un }) export class CreateApplicationStep2Component implements OnInit { - constructor(private store: Store, private fb: FormBuilder) { } + constructor(private store: Store, private fb: UntypedFormBuilder) { } - form: FormGroup; + form: UntypedFormGroup; validate: Observable; - appName = new FormControl(); + appName = new UntypedFormControl(); appNameChecking: AppNameUniqueChecking = new AppNameUniqueChecking(); name: string; @@ -41,7 +41,7 @@ export class CreateApplicationStep2Component implements OnInit { } ngOnInit() { - this.form = new FormGroup({ appName: this.appName }); + this.form = new UntypedFormGroup({ appName: this.appName }); this.validate = this.form.statusChanges.pipe( map(() => { return this.form.valid; diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step3/create-application-step3.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step3/create-application-step3.component.spec.ts index 825fad3933..3af50921a6 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step3/create-application-step3.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step3/create-application-step3.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -12,7 +12,7 @@ describe('CreateApplicationStep3Component', () => { let component: CreateApplicationStep3Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CreateApplicationStep3Component], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step3/create-application-step3.component.ts b/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step3/create-application-step3.component.ts index b5e013d4a1..34a9491aa1 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step3/create-application-step3.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application-step3/create-application-step3.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; import { Store } from '@ngrx/store'; import { combineLatest, Observable, of as observableOf } from 'rxjs'; @@ -33,12 +33,12 @@ import { createGetApplicationAction } from '../../application.service'; }) export class CreateApplicationStep3Component implements OnInit { - setDomainHost: FormGroup; + setDomainHost: UntypedFormGroup; constructor(private store: Store) { - this.setDomainHost = new FormGroup({ - domain: new FormControl('', [Validators.required]), - host: new FormControl({ disabled: true }, [Validators.required, Validators.maxLength(63)]), + this.setDomainHost = new UntypedFormGroup({ + domain: new UntypedFormControl('', [Validators.required]), + host: new UntypedFormControl({ disabled: true }, [Validators.required, Validators.maxLength(63)]), }); } diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application.component.spec.ts index 482334781b..349559a4f7 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/create-application/create-application.component.spec.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -25,7 +25,7 @@ describe('CreateApplicationComponent', () => { let component: CreateApplicationComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CreateApplicationComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-options-step/deploy-application-options-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-options-step/deploy-application-options-step.component.spec.ts index 80b910e4f6..d55971d23e 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-options-step/deploy-application-options-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-options-step/deploy-application-options-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -14,7 +14,7 @@ describe('DeployApplicationOptionsStepComponent', () => { let component: DeployApplicationOptionsStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DeployApplicationOptionsStepComponent], providers: [ApplicationEnvVarsHelper], diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-options-step/deploy-application-options-step.component.ts b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-options-step/deploy-application-options-step.component.ts index 012e74f265..a435451e31 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-options-step/deploy-application-options-step.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-options-step/deploy-application-options-step.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; @@ -36,7 +36,7 @@ export class DeployApplicationOptionsStepComponent implements OnInit, OnDestroy valid$: Observable; domains$: Observable[]>; stacks$: Observable[]>; - deployOptionsForm: FormGroup; + deployOptionsForm: UntypedFormGroup; subs: Subscription[] = []; appGuid: string; stepOpts: any; @@ -46,7 +46,7 @@ export class DeployApplicationOptionsStepComponent implements OnInit, OnDestroy public DEPLOY_TYPES_IDS = DEPLOY_TYPES_IDS; constructor( - private fb: FormBuilder, + private fb: UntypedFormBuilder, private store: Store, private appEnvVarsService: ApplicationEnvVarsHelper, private activatedRoute: ActivatedRoute diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step-source-upload/deploy-application-step-source-upload.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step-source-upload/deploy-application-step-source-upload.component.spec.ts index 21c24ff7f8..e95a56af84 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step-source-upload/deploy-application-step-source-upload.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step-source-upload/deploy-application-step-source-upload.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -14,7 +14,7 @@ describe('DeployApplicationStepSourceUploadComponent', () => { let component: DeployApplicationStepSourceUploadComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DeployApplicationStepSourceUploadComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2-1/deploy-application-step2-1.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2-1/deploy-application-step2-1.component.spec.ts index b5bd2f8695..4cafcc4134 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2-1/deploy-application-step2-1.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2-1/deploy-application-step2-1.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../core/src/core/core.module'; import { SharedModule } from '../../../../../../core/src/shared/shared.module'; @@ -10,7 +10,7 @@ describe('DeployApplicationStep21Component', () => { let component: DeployApplicationStep21Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ DeployApplicationStep21Component, diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2-1/deploy-application-step2-1.component.ts b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2-1/deploy-application-step2-1.component.ts index 7bb65d9591..48cc3e5ac6 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2-1/deploy-application-step2-1.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2-1/deploy-application-step2-1.component.ts @@ -18,12 +18,9 @@ import { StepOnNextFunction } from '../../../../../../core/src/shared/components import { CommitListWrapperComponent } from './commit-list-wrapper/commit-list-wrapper.component'; @Component({ - selector: 'app-deploy-application-step2-1', - templateUrl: './deploy-application-step2-1.component.html', - styleUrls: ['./deploy-application-step2-1.component.scss'], - entryComponents: [ - CommitListWrapperComponent - ], + selector: 'app-deploy-application-step2-1', + templateUrl: './deploy-application-step2-1.component.html', + styleUrls: ['./deploy-application-step2-1.component.scss'] }) export class DeployApplicationStep21Component { diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-fs/deploy-application-fs-scanner.ts b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-fs/deploy-application-fs-scanner.ts index f9bd96f1fc..dc28d8af07 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-fs/deploy-application-fs-scanner.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-fs/deploy-application-fs-scanner.ts @@ -47,7 +47,7 @@ export class DeployApplicationFSScanner implements FileScannerInfo { } isArchiveFile(fileName: string): boolean { - return archiveRegex.test(name); + return archiveRegex.test(fileName); } file(context: FileScannerFolderContext, file, path) { diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-fs/deploy-application-fs.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-fs/deploy-application-fs.component.spec.ts index 0a52ee00b1..a1e93f5913 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-fs/deploy-application-fs.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-fs/deploy-application-fs.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -11,7 +11,7 @@ describe('DeployApplicationFsComponent', () => { let component: DeployApplicationFsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DeployApplicationFsComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-step2.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-step2.component.spec.ts index 957d41e7fa..2250f3b9f4 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-step2.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step2/deploy-application-step2.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -18,7 +18,7 @@ describe('DeployApplicationStep2Component', () => { let component: DeployApplicationStep2Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ DeployApplicationStep2Component, diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step3/deploy-application-step3.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step3/deploy-application-step3.component.spec.ts index e8277dc334..2c8c4d951d 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step3/deploy-application-step3.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application-step3/deploy-application-step3.component.spec.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -15,7 +15,7 @@ describe('DeployApplicationStep3Component', () => { let component: DeployApplicationStep3Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DeployApplicationStep3Component], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application.component.spec.ts index 43a27de167..4777a10ef1 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application.component.spec.ts @@ -1,6 +1,6 @@ import { HttpBackend, HttpClient, HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -34,7 +34,7 @@ describe('DeployApplicationComponent', () => { let component: DeployApplicationComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ DeployApplicationComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application.component.theme.scss b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application.component.theme.scss index d5f3293582..b8a34c21d0 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application.component.theme.scss +++ b/src/frontend/packages/cloud-foundry/src/features/applications/deploy-application/deploy-application.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin app-deploy-app-theme($theme, $app-theme) { $is-dark: map-get($theme, is-dark); diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/edit-application/edit-application.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/edit-application/edit-application.component.spec.ts index a7ec509698..6a8f20fc5f 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/edit-application/edit-application.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/edit-application/edit-application.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -24,7 +24,7 @@ describe('EditApplicationComponent', () => { let component: EditApplicationComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditApplicationComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/edit-application/edit-application.component.ts b/src/frontend/packages/cloud-foundry/src/features/applications/edit-application/edit-application.component.ts index e6d94e7058..196016a8b8 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/edit-application/edit-application.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/edit-application/edit-application.component.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Component, OnDestroy, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; import { Store } from '@ngrx/store'; import { Observable, of as observableOf, Subscription } from 'rxjs'; @@ -27,7 +27,7 @@ import { ApplicationService } from '../application.service'; }) export class EditApplicationComponent implements OnInit, OnDestroy { - editAppForm: FormGroup; + editAppForm: UntypedFormGroup; uniqueNameValidator: AppNameUniqueDirective; @@ -36,7 +36,7 @@ export class EditApplicationComponent implements OnInit, OnDestroy { constructor( public applicationService: ApplicationService, private store: Store, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private http: HttpClient, ) { this.uniqueNameValidator = new AppNameUniqueDirective(this.store, this.http); diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/new-application-base-step/new-application-base-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/new-application-base-step/new-application-base-step.component.spec.ts index 3b84e92f6c..a93190a496 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/new-application-base-step/new-application-base-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/new-application-base-step/new-application-base-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { CoreModule } from '../../../../../core/src/core/core.module'; @@ -12,7 +12,7 @@ describe('NewApplicationBaseStepComponent', () => { let component: NewApplicationBaseStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [NewApplicationBaseStepComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-route-stepper/add-route-stepper.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-route-stepper/add-route-stepper.component.spec.ts index 4c544e020f..9d82a54064 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-route-stepper/add-route-stepper.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-route-stepper/add-route-stepper.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -18,7 +18,7 @@ describe('AddRouteStepperComponent', () => { let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AddRouteStepperComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-routes/add-routes.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-routes/add-routes.component.spec.ts index 3d91ab69af..acea992bc9 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-routes/add-routes.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-routes/add-routes.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -14,7 +14,7 @@ describe('AddRoutesComponent', () => { let component: AddRoutesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AddRoutesComponent, MapRoutesComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-routes/add-routes.component.ts b/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-routes/add-routes.component.ts index bcc986dd96..c0038c0355 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-routes/add-routes.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/routes/add-routes/add-routes.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { Store } from '@ngrx/store'; import { BehaviorSubject, Observable, of as observableOf, Subscription } from 'rxjs'; import { filter, map, mergeMap, pairwise, switchMap, tap } from 'rxjs/operators'; @@ -30,9 +30,9 @@ export class AddRoutesComponent implements OnInit, OnDestroy { subscriptions: Subscription[] = []; model: Route; domains: APIResource[] = []; - addTCPRoute: FormGroup; - addHTTPRoute: FormGroup; - domainFormGroup: FormGroup; + addTCPRoute: UntypedFormGroup; + addHTTPRoute: UntypedFormGroup; + domainFormGroup: UntypedFormGroup; appGuid: string; cfGuid: string; spaceGuid: string; @@ -58,21 +58,21 @@ export class AddRoutesComponent implements OnInit, OnDestroy { this.cfGuid = applicationService.cfGuid; this.appUrl = `/applications/${this.cfGuid}/${this.appGuid}/routes`; this.addRouteMode = this.addRouteModes[0]; - this.domainFormGroup = new FormGroup({ - domain: new FormControl('', [Validators.required as any]) + this.domainFormGroup = new UntypedFormGroup({ + domain: new UntypedFormControl('', [Validators.required as any]) }); - this.addHTTPRoute = new FormGroup({ - host: new FormControl('', [Validators.required as any, Validators.pattern(hostPattern), Validators.maxLength(63)]), - path: new FormControl('', [Validators.pattern(pathPattern), Validators.maxLength(128)]) + this.addHTTPRoute = new UntypedFormGroup({ + host: new UntypedFormControl('', [Validators.required as any, Validators.pattern(hostPattern), Validators.maxLength(63)]), + path: new UntypedFormControl('', [Validators.pattern(pathPattern), Validators.maxLength(128)]) }); - this.addTCPRoute = new FormGroup({ - port: new FormControl('', [ + this.addTCPRoute = new UntypedFormGroup({ + port: new UntypedFormControl('', [ Validators.required, Validators.pattern('[0-9]*') ]), - useRandomPort: new FormControl(false) + useRandomPort: new UntypedFormControl(false) }); } diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/routes/map-routes/map-routes.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/routes/map-routes/map-routes.component.spec.ts index 00d73580e0..db00cce568 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/routes/map-routes/map-routes.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/routes/map-routes/map-routes.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -16,7 +16,7 @@ describe('MapRoutesComponent', () => { let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [MapRoutesComponent], providers: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/applications/ssh-application/ssh-application.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/applications/ssh-application/ssh-application.component.spec.ts index ea7a43c9c2..f935297eb1 100644 --- a/src/frontend/packages/cloud-foundry/src/features/applications/ssh-application/ssh-application.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/applications/ssh-application/ssh-application.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { CoreModule } from '../../../../../core/src/core/core.module'; @@ -13,7 +13,7 @@ describe('SshApplicationComponent', () => { let component: SshApplicationComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [SshApplicationComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/add-organization.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/add-organization.component.spec.ts index 0db36dc5a0..42dffb529c 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/add-organization.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/add-organization.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { generateCfBaseTestModules } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -9,7 +9,7 @@ describe('AddOrganizationComponent', () => { let component: AddOrganizationComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AddOrganizationComponent, CreateOrganizationStepComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/create-organization-step/create-organization-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/create-organization-step/create-organization-step.component.spec.ts index dc0c4ad341..f39aedc661 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/create-organization-step/create-organization-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/create-organization-step/create-organization-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { PaginationMonitorFactory } from '../../../../../../store/src/monitors/pagination-monitor.factory'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -8,7 +8,7 @@ describe('CreateOrganizationStepComponent', () => { let component: CreateOrganizationStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CreateOrganizationStepComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/create-organization-step/create-organization-step.component.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/create-organization-step/create-organization-step.component.ts index acacd4fc2d..e5a945b173 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/create-organization-step/create-organization-step.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-organization/create-organization-step/create-organization-step.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; import { Observable, Subscription } from 'rxjs'; @@ -36,7 +36,7 @@ export class CreateOrganizationStepComponent implements OnInit, OnDestroy { orgs$: Observable[]>; quotaDefinitions$: Observable[]>; cfUrl: string; - addOrg: FormGroup; + addOrg: UntypedFormGroup; get orgName(): any { return this.addOrg ? this.addOrg.get('orgName') : { value: '' }; } @@ -51,9 +51,9 @@ export class CreateOrganizationStepComponent implements OnInit, OnDestroy { } ngOnInit() { - this.addOrg = new FormGroup({ - orgName: new FormControl('', [Validators.required as any, this.nameTakenValidator()]), - quotaDefinition: new FormControl(), + this.addOrg = new UntypedFormGroup({ + orgName: new UntypedFormControl('', [Validators.required as any, this.nameTakenValidator()]), + quotaDefinition: new UntypedFormControl(), }); const action = CloudFoundryEndpointService.createGetAllOrganizations(this.cfGuid); this.orgs$ = getPaginationObservables( diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/add-quota.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/add-quota.component.spec.ts index ef3767615e..75bec90dce 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/add-quota.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/add-quota.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { generateCfBaseTestModules } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -11,7 +11,7 @@ describe('AddQuotaComponent', () => { let component: AddQuotaComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AddQuotaComponent, CreateQuotaStepComponent, QuotaDefinitionFormComponent], imports: [...generateCfBaseTestModules()], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/create-quota-step/create-quota-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/create-quota-step/create-quota-step.component.spec.ts index 8491748aef..0abd9eb732 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/create-quota-step/create-quota-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/create-quota-step/create-quota-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { PaginationMonitorFactory } from '../../../../../../store/src/monitors/pagination-monitor.factory'; import { CFBaseTestModules } from '../../../../../test-framework/cf-test-helper'; @@ -9,7 +9,7 @@ describe('CreateQuotaStepComponent', () => { let component: CreateQuotaStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CreateQuotaStepComponent, QuotaDefinitionFormComponent], imports: [...CFBaseTestModules], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/create-quota-step/create-quota-step.component.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/create-quota-step/create-quota-step.component.ts index d5fbe9dbfd..717890d6ea 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/create-quota-step/create-quota-step.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-quota/create-quota-step/create-quota-step.component.ts @@ -1,5 +1,5 @@ import { Component, ViewChild } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { Subscription } from 'rxjs'; import { filter, map, pairwise } from 'rxjs/operators'; @@ -23,7 +23,7 @@ export class CreateQuotaStepComponent { quotasSubscription: Subscription; cfGuid: string; - quotaForm: FormGroup; + quotaForm: UntypedFormGroup; @ViewChild('form', { static: true }) form: QuotaDefinitionFormComponent; diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-space-quota/add-space-quota.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-space-quota/add-space-quota.component.spec.ts index dd5ecaaa40..ed5adb6511 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-space-quota/add-space-quota.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-space-quota/add-space-quota.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { CFBaseTestModules } from '../../../../test-framework/cf-test-helper'; @@ -10,7 +10,7 @@ describe('AddSpaceQuotaComponent', () => { let component: AddSpaceQuotaComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AddSpaceQuotaComponent, CreateSpaceQuotaStepComponent, SpaceQuotaDefinitionFormComponent], imports: [...CFBaseTestModules], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-space-quota/create-space-quota-step/create-space-quota-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-space-quota/create-space-quota-step/create-space-quota-step.component.spec.ts index 4607826a80..8c5d76cf01 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-space-quota/create-space-quota-step/create-space-quota-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-space-quota/create-space-quota-step/create-space-quota-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { PaginationMonitorFactory } from '../../../../../../store/src/monitors/pagination-monitor.factory'; import { CFBaseTestModules } from '../../../../../test-framework/cf-test-helper'; @@ -9,7 +9,7 @@ describe('CreateSpaceQuotaStepComponent', () => { let component: CreateSpaceQuotaStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CreateSpaceQuotaStepComponent, SpaceQuotaDefinitionFormComponent], imports: [...CFBaseTestModules], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-space/add-space.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-space/add-space.component.spec.ts index ff17123de0..add83aa2ab 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-space/add-space.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-space/add-space.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { CFBaseTestModules } from '../../../../test-framework/cf-test-helper'; @@ -9,7 +9,7 @@ describe('AddSpaceComponent', () => { let component: AddSpaceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AddSpaceComponent, CreateSpaceStepComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-space/create-space-step/create-space-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-space/create-space-step/create-space-step.component.spec.ts index 697faf136c..5b1862dc02 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-space/create-space-step/create-space-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-space/create-space-step/create-space-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ActiveRouteCfOrgSpace } from '../../cf-page.types'; @@ -8,7 +8,7 @@ describe('CreateSpaceStepComponent', () => { let component: CreateSpaceStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CreateSpaceStepComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/add-space/create-space-step/create-space-step.component.ts b/src/frontend/packages/cloud-foundry/src/features/cf/add-space/create-space-step/create-space-step.component.ts index c5d20a4a05..478c673898 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/add-space/create-space-step/create-space-step.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/add-space/create-space-step/create-space-step.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; import { Subscription } from 'rxjs'; @@ -21,7 +21,7 @@ import { ActiveRouteCfOrgSpace } from '../../cf-page.types'; export class CreateSpaceStepComponent extends AddEditSpaceStepBase implements OnInit, OnDestroy { cfUrl: string; - createSpaceForm: FormGroup; + createSpaceForm: UntypedFormGroup; quotaSubscription: Subscription; get spaceName(): any { return this.createSpaceForm ? this.createSpaceForm.get('spaceName') : { value: '' }; } @@ -46,9 +46,9 @@ export class CreateSpaceStepComponent extends AddEditSpaceStepBase implements On } ngOnInit() { - this.createSpaceForm = new FormGroup({ - spaceName: new FormControl('', [Validators.required as any, this.spaceNameTakenValidator()]), - quotaDefinition: new FormControl(), + this.createSpaceForm = new UntypedFormGroup({ + spaceName: new UntypedFormControl('', [Validators.required as any, this.spaceNameTakenValidator()]), + quotaDefinition: new UntypedFormControl(), }); this.quotaSubscription = this.quotaDefinitions$.subscribe((quotas => { diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/cli-info-cloud-foundry/cli-info-cloud-foundry.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/cli-info-cloud-foundry/cli-info-cloud-foundry.component.spec.ts index 9f5b515cad..c3b0af32ab 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/cli-info-cloud-foundry/cli-info-cloud-foundry.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/cli-info-cloud-foundry/cli-info-cloud-foundry.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { @@ -19,7 +19,7 @@ describe('CliInfoCloudFoundryComponent', () => { let component: CliInfoCloudFoundryComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CliInfoCloudFoundryComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-base/cloud-foundry-base.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-base/cloud-foundry-base.component.spec.ts index cdaebc6329..c98d188dde 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-base/cloud-foundry-base.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-base/cloud-foundry-base.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { CloudFoundryEndpointService } from '../services/cloud-foundry-endpoint.service'; @@ -8,7 +8,7 @@ describe('CloudFoundryBaseComponent', () => { let component: CloudFoundryBaseComponent; let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryBaseComponent], imports: [RouterTestingModule], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-section.module.ts b/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-section.module.ts index f8adc26ba8..99c6012294 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-section.module.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-section.module.ts @@ -131,107 +131,104 @@ import { UsersRolesComponent } from './users/manage-users/manage-users.component import { RemoveUserComponent } from './users/remove-user/remove-user.component'; @NgModule({ - imports: [ - CommonModule, - CoreModule, - SharedModule, - MDAppModule, - CloudFoundrySectionRoutingModule, - RouterModule, - NgxChartsModule, - CloudFoundrySharedModule, - CFHomeCardModule, - ], - declarations: [ - CloudFoundryBaseComponent, - CloudFoundryTabsBaseComponent, - CloudFoundryComponent, - CloudFoundrySummaryTabComponent, - CloudFoundryOrganizationsComponent, - CloudFoundryUsersComponent, - CloudFoundryFirehoseComponent, - CloudFoundryFeatureFlagsComponent, - CloudFoundryCellsComponent, - CloudFoundryCellBaseComponent, - CloudFoundryCellSummaryComponent, - CloudFoundryCellAppsComponent, - CloudFoundryCellChartsComponent, - CloudFoundryBuildPacksComponent, - CloudFoundryStacksComponent, - CloudFoundrySecurityGroupsComponent, - CloudFoundryQuotasComponent, - CloudFoundryOrganizationSpaceQuotasComponent, - AddOrganizationComponent, - AddQuotaComponent, - EditQuotaComponent, - EditQuotaStepComponent, - EditSpaceQuotaComponent, - EditSpaceQuotaStepComponent, - AddSpaceQuotaComponent, - QuotaDefinitionFormComponent, - SpaceQuotaDefinitionFormComponent, - UsersRolesComponent, - CloudFoundryOrganizationSummaryComponent, - CloudFoundryOrganizationSpacesComponent, - CloudFoundryOrganizationUsersComponent, - CloudFoundryOrganizationBaseComponent, - EditSpaceComponent, - AddSpaceComponent, - CloudFoundrySpaceSummaryComponent, - CloudFoundrySpaceBaseComponent, - CloudFoundrySpaceAppsComponent, - CloudFoundrySpaceServiceInstancesComponent, - CloudFoundrySpaceUserServiceInstancesComponent, - CloudFoundrySpaceRoutesComponent, - CloudFoundrySpaceUsersComponent, - EditSpaceStepComponent, - CreateSpaceStepComponent, - CreateOrganizationStepComponent, - CreateQuotaStepComponent, - CreateSpaceQuotaStepComponent, - EditOrganizationComponent, - EditOrganizationStepComponent, - CliInfoCloudFoundryComponent, - UsersRolesModifyComponent, - SpaceRolesListWrapperComponent, - UsersRolesSelectComponent, - UsersRolesConfirmComponent, - CloudFoundryRoutesComponent, - UserInviteConfigurationDialogComponent, - InviteUsersComponent, - InviteUsersCreateComponent, - RemoveUserComponent, - CloudFoundryInviteUserLinkComponent, - CfAdminAddUserWarningComponent, - QuotaDefinitionComponent, - SpaceQuotaDefinitionComponent, - CloudFoundryEventsComponent, - CloudFoundryOrganizationEventsComponent, - CloudFoundrySpaceEventsComponent, - ManageUsersSetUsernamesComponent, - ], - providers: [ - CFEndpointsListConfigService, - { - provide: ActiveRouteCfOrgSpace, - useValue: {} - }, - { - provide: ActiveRouteCfCell, - useValue: {} - }, - // ApplicationService, - // CloudFoundrySpaceService, - CloudFoundryOrganizationService, - CloudFoundryEndpointService, - // CfRolesService, - CloudFoundryCellService, - UserInviteService, - UserInviteConfigureService, - DatePipe - ], - entryComponents: [ - UserInviteConfigurationDialogComponent - ] + imports: [ + CommonModule, + CoreModule, + SharedModule, + MDAppModule, + CloudFoundrySectionRoutingModule, + RouterModule, + NgxChartsModule, + CloudFoundrySharedModule, + CFHomeCardModule, + ], + declarations: [ + CloudFoundryBaseComponent, + CloudFoundryTabsBaseComponent, + CloudFoundryComponent, + CloudFoundrySummaryTabComponent, + CloudFoundryOrganizationsComponent, + CloudFoundryUsersComponent, + CloudFoundryFirehoseComponent, + CloudFoundryFeatureFlagsComponent, + CloudFoundryCellsComponent, + CloudFoundryCellBaseComponent, + CloudFoundryCellSummaryComponent, + CloudFoundryCellAppsComponent, + CloudFoundryCellChartsComponent, + CloudFoundryBuildPacksComponent, + CloudFoundryStacksComponent, + CloudFoundrySecurityGroupsComponent, + CloudFoundryQuotasComponent, + CloudFoundryOrganizationSpaceQuotasComponent, + AddOrganizationComponent, + AddQuotaComponent, + EditQuotaComponent, + EditQuotaStepComponent, + EditSpaceQuotaComponent, + EditSpaceQuotaStepComponent, + AddSpaceQuotaComponent, + QuotaDefinitionFormComponent, + SpaceQuotaDefinitionFormComponent, + UsersRolesComponent, + CloudFoundryOrganizationSummaryComponent, + CloudFoundryOrganizationSpacesComponent, + CloudFoundryOrganizationUsersComponent, + CloudFoundryOrganizationBaseComponent, + EditSpaceComponent, + AddSpaceComponent, + CloudFoundrySpaceSummaryComponent, + CloudFoundrySpaceBaseComponent, + CloudFoundrySpaceAppsComponent, + CloudFoundrySpaceServiceInstancesComponent, + CloudFoundrySpaceUserServiceInstancesComponent, + CloudFoundrySpaceRoutesComponent, + CloudFoundrySpaceUsersComponent, + EditSpaceStepComponent, + CreateSpaceStepComponent, + CreateOrganizationStepComponent, + CreateQuotaStepComponent, + CreateSpaceQuotaStepComponent, + EditOrganizationComponent, + EditOrganizationStepComponent, + CliInfoCloudFoundryComponent, + UsersRolesModifyComponent, + SpaceRolesListWrapperComponent, + UsersRolesSelectComponent, + UsersRolesConfirmComponent, + CloudFoundryRoutesComponent, + UserInviteConfigurationDialogComponent, + InviteUsersComponent, + InviteUsersCreateComponent, + RemoveUserComponent, + CloudFoundryInviteUserLinkComponent, + CfAdminAddUserWarningComponent, + QuotaDefinitionComponent, + SpaceQuotaDefinitionComponent, + CloudFoundryEventsComponent, + CloudFoundryOrganizationEventsComponent, + CloudFoundrySpaceEventsComponent, + ManageUsersSetUsernamesComponent, + ], + providers: [ + CFEndpointsListConfigService, + { + provide: ActiveRouteCfOrgSpace, + useValue: {} + }, + { + provide: ActiveRouteCfCell, + useValue: {} + }, + // ApplicationService, + // CloudFoundrySpaceService, + CloudFoundryOrganizationService, + CloudFoundryEndpointService, + // CfRolesService, + CloudFoundryCellService, + UserInviteService, + UserInviteConfigureService, + DatePipe + ] }) export class CloudFoundrySectionModule { } diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-section.routing.ts b/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-section.routing.ts index 53f11cea56..01da44943f 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-section.routing.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-section.routing.ts @@ -90,7 +90,7 @@ import { InviteUsersComponent } from './users/invite-users/invite-users.componen import { UsersRolesComponent } from './users/manage-users/manage-users.component'; import { RemoveUserComponent } from './users/remove-user/remove-user.component'; -const usersRoles = [ +const usersRoles: Routes = [ { path: 'users/manage', component: UsersRolesComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-tabs-base/cloud-foundry-tabs-base.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-tabs-base/cloud-foundry-tabs-base.component.spec.ts index 27d8cdfc0c..863a37eb50 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-tabs-base/cloud-foundry-tabs-base.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry-tabs-base/cloud-foundry-tabs-base.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { populateStoreWithTestEndpoint, testSCFEndpointGuid } from '@stratosui/store/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -14,7 +14,7 @@ describe('CloudFoundryTabsBaseComponent', () => { let component: CloudFoundryTabsBaseComponent; let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryTabsBaseComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry/cloud-foundry.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry/cloud-foundry.component.spec.ts index 6067c9a0e9..e8dd2e4537 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry/cloud-foundry.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/cloud-foundry/cloud-foundry.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { populateStoreWithTestEndpoint } from '@stratosui/store/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -15,7 +15,7 @@ describe('CloudFoundryComponent', () => { let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundryComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization-step/edit-organization-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization-step/edit-organization-step.component.spec.ts index 12cbcf54ef..d80d4724bc 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization-step/edit-organization-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization-step/edit-organization-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules, @@ -14,7 +14,7 @@ describe('EditOrganizationStepComponent', () => { let component: EditOrganizationStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditOrganizationStepComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization-step/edit-organization-step.component.ts b/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization-step/edit-organization-step.component.ts index 9d206f596b..b7e57137f5 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization-step/edit-organization-step.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization-step/edit-organization-step.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { Store } from '@ngrx/store'; import { Observable, Subscription } from 'rxjs'; import { filter, map, pairwise, take, tap } from 'rxjs/operators'; @@ -48,7 +48,7 @@ export class EditOrganizationStepComponent implements OnInit, OnDestroy { currentStatus: string; originalName: string; org$: Observable; - editOrgName: FormGroup; + editOrgName: UntypedFormGroup; status: boolean; cfGuid: string; orgGuid: string; @@ -62,9 +62,9 @@ export class EditOrganizationStepComponent implements OnInit, OnDestroy { this.orgGuid = cfOrgService.orgGuid; this.cfGuid = cfOrgService.cfGuid; this.status = false; - this.editOrgName = new FormGroup({ - orgName: new FormControl('', [Validators.required as any, this.nameTakenValidator()]), - quotaDefinition: new FormControl(), + this.editOrgName = new UntypedFormGroup({ + orgName: new UntypedFormControl('', [Validators.required as any, this.nameTakenValidator()]), + quotaDefinition: new UntypedFormControl(), // toggleStatus: new FormControl(false), }); this.org$ = this.cfOrgService.org$.pipe( diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization.component.spec.ts index c93308ee77..1a122fb0e9 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/edit-organization/edit-organization.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { @@ -16,7 +16,7 @@ describe('EditOrganizationComponent', () => { let component: EditOrganizationComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditOrganizationComponent, EditOrganizationStepComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/edit-quota/edit-quota-step/edit-quota-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/edit-quota/edit-quota-step/edit-quota-step.component.spec.ts index 1216c269d4..185c0fe57d 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/edit-quota/edit-quota-step/edit-quota-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/edit-quota/edit-quota-step/edit-quota-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { PaginationMonitorFactory } from '../../../../../../store/src/monitors/pagination-monitor.factory'; @@ -10,7 +10,7 @@ describe('EditQuotaStepComponent', () => { let component: EditQuotaStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditQuotaStepComponent, QuotaDefinitionFormComponent, QuotaDefinitionFormComponent], imports: [...CFBaseTestModules], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/edit-quota/edit-quota.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/edit-quota/edit-quota.component.spec.ts index ae177c3fa5..d10baeb280 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/edit-quota/edit-quota.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/edit-quota/edit-quota.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -11,7 +11,7 @@ describe('EditQuotaComponent', () => { let component: EditQuotaComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditQuotaComponent, EditQuotaStepComponent, QuotaDefinitionFormComponent], imports: [...CFBaseTestModules], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/edit-space-quota/edit-space-quota-step/edit-space-quota-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/edit-space-quota/edit-space-quota-step/edit-space-quota-step.component.spec.ts index 3b26f9d45b..09890a5880 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/edit-space-quota/edit-space-quota-step/edit-space-quota-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/edit-space-quota/edit-space-quota-step/edit-space-quota-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { PaginationMonitorFactory } from '../../../../../../store/src/monitors/pagination-monitor.factory'; @@ -10,7 +10,7 @@ describe('EditSpaceQuotaStepComponent', () => { let component: EditSpaceQuotaStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditSpaceQuotaStepComponent, SpaceQuotaDefinitionFormComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/edit-space-quota/edit-space-quota.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/edit-space-quota/edit-space-quota.component.spec.ts index 787c24d760..00462c1ace 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/edit-space-quota/edit-space-quota.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/edit-space-quota/edit-space-quota.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -11,7 +11,7 @@ describe('EditSpaceQuotaComponent', () => { let component: EditSpaceQuotaComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditSpaceQuotaComponent, EditSpaceQuotaStepComponent, SpaceQuotaDefinitionFormComponent], imports: [...CFBaseTestModules], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space-step/edit-space-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space-step/edit-space-step.component.spec.ts index 96634d0f66..52cf21ab83 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space-step/edit-space-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space-step/edit-space-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules, @@ -12,7 +12,7 @@ describe('EditSpaceStepComponent', () => { let component: EditSpaceStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditSpaceStepComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space-step/edit-space-step.component.ts b/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space-step/edit-space-step.component.ts index 183a9523a6..71c2b5fe0c 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space-step/edit-space-step.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space-step/edit-space-step.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy } from '@angular/core'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; import { Observable, of, Subscription } from 'rxjs'; @@ -26,7 +26,7 @@ export class EditSpaceStepComponent extends AddEditSpaceStepBase implements OnDe space: string; space$: Observable; spaceGuid: string; - editSpaceForm: FormGroup; + editSpaceForm: UntypedFormGroup; originalSpaceQuotaGuid: string; spaceName: string; @@ -38,10 +38,10 @@ export class EditSpaceStepComponent extends AddEditSpaceStepBase implements OnDe ) { super(store, activatedRoute, activeRouteCfOrgSpace); this.spaceGuid = activatedRoute.snapshot.params.spaceId; - this.editSpaceForm = new FormGroup({ - spaceName: new FormControl('', this.spaceNameTakenValidator()), - toggleSsh: new FormControl(false), - quotaDefinition: new FormControl(), + this.editSpaceForm = new UntypedFormGroup({ + spaceName: new UntypedFormControl('', this.spaceNameTakenValidator()), + toggleSsh: new UntypedFormControl(false), + quotaDefinition: new UntypedFormControl(), }); this.space$ = this.cfSpaceService.space$.pipe( map(o => o.entity.entity), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space.component.spec.ts index 4c99880fe0..f5a641aac9 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/edit-space/edit-space.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { @@ -17,7 +17,7 @@ describe('EditSpaceComponent', () => { let component: EditSpaceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditSpaceComponent, EditSpaceStepComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/quota-definition-form/quota-definition-form.component.ts b/src/frontend/packages/cloud-foundry/src/features/cf/quota-definition-form/quota-definition-form.component.ts index 778a19c696..ce3bae4caf 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/quota-definition-form/quota-definition-form.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/quota-definition-form/quota-definition-form.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnDestroy, OnInit } from '@angular/core'; -import { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { Subscription } from 'rxjs'; import { filter, map, tap } from 'rxjs/operators'; @@ -37,7 +37,7 @@ export class QuotaDefinitionFormComponent implements OnInit, OnDestroy { quotasSubscription: Subscription; cfGuid: string; allQuotas: string[]; - formGroup: FormGroup; + formGroup: UntypedFormGroup; @Input() quota: IQuotaDefinition; @@ -55,18 +55,18 @@ export class QuotaDefinitionFormComponent implements OnInit, OnDestroy { setupForm() { const quota: any = this.quota || {}; - this.formGroup = new FormGroup({ - name: new FormControl(quota.name || '', [Validators.required, this.nameTakenValidator()]), - totalServices: new FormControl(quota.total_services), - totalRoutes: new FormControl(quota.total_routes), - memoryLimit: new FormControl(quota.memory_limit), - instanceMemoryLimit: new FormControl(quota.instance_memory_limit), - nonBasicServicesAllowed: new FormControl(quota.non_basic_services_allowed || false), - totalReservedRoutePorts: new FormControl(quota.total_reserved_route_ports), - appInstanceLimit: new FormControl(quota.app_instance_limit), - totalServiceKeys: new FormControl(quota.total_service_keys), - totalPrivateDomains: new FormControl(quota.total_private_domains), - appTasksLimit: new FormControl(quota.app_task_limit), + this.formGroup = new UntypedFormGroup({ + name: new UntypedFormControl(quota.name || '', [Validators.required, this.nameTakenValidator()]), + totalServices: new UntypedFormControl(quota.total_services), + totalRoutes: new UntypedFormControl(quota.total_routes), + memoryLimit: new UntypedFormControl(quota.memory_limit), + instanceMemoryLimit: new UntypedFormControl(quota.instance_memory_limit), + nonBasicServicesAllowed: new UntypedFormControl(quota.non_basic_services_allowed || false), + totalReservedRoutePorts: new UntypedFormControl(quota.total_reserved_route_ports), + appInstanceLimit: new UntypedFormControl(quota.app_instance_limit), + totalServiceKeys: new UntypedFormControl(quota.total_service_keys), + totalPrivateDomains: new UntypedFormControl(quota.total_private_domains), + appTasksLimit: new UntypedFormControl(quota.app_task_limit), }); } diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/space-quota-definition-form/space-quota-definition-form.component.ts b/src/frontend/packages/cloud-foundry/src/features/cf/space-quota-definition-form/space-quota-definition-form.component.ts index 67b37496eb..5cfbb86603 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/space-quota-definition-form/space-quota-definition-form.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/space-quota-definition-form/space-quota-definition-form.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnDestroy, OnInit } from '@angular/core'; -import { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Observable, Subscription } from 'rxjs'; import { filter, map, tap } from 'rxjs/operators'; @@ -27,7 +27,7 @@ export class SpaceQuotaDefinitionFormComponent implements OnInit, OnDestroy { orgGuid: string; allQuotas: string[]; spaceQuotaDefinitions$: Observable; - formGroup: FormGroup; + formGroup: UntypedFormGroup; @Input() quota: IQuotaDefinition; @@ -47,17 +47,17 @@ export class SpaceQuotaDefinitionFormComponent implements OnInit, OnDestroy { setupForm() { const quota: any = this.quota || {}; - this.formGroup = new FormGroup({ - name: new FormControl(quota.name || '', [Validators.required, this.nameTakenValidator()]), - totalServices: new FormControl(quota.total_services), - totalRoutes: new FormControl(quota.total_routes), - memoryLimit: new FormControl(quota.memory_limit), - instanceMemoryLimit: new FormControl(quota.instance_memory_limit), - nonBasicServicesAllowed: new FormControl(quota.non_basic_services_allowed || false), - totalReservedRoutePorts: new FormControl(quota.total_reserved_route_ports), - appInstanceLimit: new FormControl(quota.app_instance_limit), - totalServiceKeys: new FormControl(quota.total_service_keys), - appTasksLimit: new FormControl(quota.app_task_limit), + this.formGroup = new UntypedFormGroup({ + name: new UntypedFormControl(quota.name || '', [Validators.required, this.nameTakenValidator()]), + totalServices: new UntypedFormControl(quota.total_services), + totalRoutes: new UntypedFormControl(quota.total_routes), + memoryLimit: new UntypedFormControl(quota.memory_limit), + instanceMemoryLimit: new UntypedFormControl(quota.instance_memory_limit), + nonBasicServicesAllowed: new UntypedFormControl(quota.non_basic_services_allowed || false), + totalReservedRoutePorts: new UntypedFormControl(quota.total_reserved_route_ports), + appInstanceLimit: new UntypedFormControl(quota.app_instance_limit), + totalServiceKeys: new UntypedFormControl(quota.total_service_keys), + appTasksLimit: new UntypedFormControl(quota.app_task_limit), }); } diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/space-quota-definition/space-quota-definition.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/space-quota-definition/space-quota-definition.component.spec.ts index 7bde1d12ae..6023824a74 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/space-quota-definition/space-quota-definition.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/space-quota-definition/space-quota-definition.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; import { testSCFEndpoint, testSCFEndpointGuid } from '@stratosui/store/testing'; @@ -27,7 +27,7 @@ describe('SpaceQuotaDefinitionComponent', () => { const helper = new EntityRelationSpecHelper(); - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ SpaceQuotaDefinitionComponent diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-admin-add-user-warning/cf-admin-add-user-warning.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-admin-add-user-warning/cf-admin-add-user-warning.component.spec.ts index 4e29cd6320..c4210698ba 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-admin-add-user-warning/cf-admin-add-user-warning.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-admin-add-user-warning/cf-admin-add-user-warning.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { CfUserService } from '../../../../shared/data-services/cf-user.service'; @@ -9,7 +9,7 @@ describe('CfAdminAddUserWarningComponent', () => { let component: CfAdminAddUserWarningComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CfAdminAddUserWarningComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-build-packs/cloud-foundry-build-packs.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-build-packs/cloud-foundry-build-packs.component.spec.ts index 488c2f4257..f1fae39d02 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-build-packs/cloud-foundry-build-packs.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-build-packs/cloud-foundry-build-packs.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ActiveRouteCfOrgSpace } from '../../cf-page.types'; @@ -8,7 +8,7 @@ describe('CloudFoundryBuildPacksComponent', () => { let component: CloudFoundryBuildPacksComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryBuildPacksComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-apps/cloud-foundry-cell-apps.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-apps/cloud-foundry-cell-apps.component.spec.ts index af4480e9dc..dafce76f33 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-apps/cloud-foundry-cell-apps.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-apps/cloud-foundry-cell-apps.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ActiveRouteCfCell } from '../../../../cf-page.types'; @@ -8,7 +8,7 @@ describe('CloudFoundryCellAppsComponent', () => { let component: CloudFoundryCellAppsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundryCellAppsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-base/cloud-foundry-cell-base.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-base/cloud-foundry-cell-base.component.spec.ts index 760cdc4695..fb2424f828 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-base/cloud-foundry-cell-base.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-base/cloud-foundry-cell-base.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../../../core/src/tab-nav.service'; import { generateCfBaseTestModules } from '../../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -12,7 +12,7 @@ describe('CloudFoundryCellBaseComponent', () => { let component: CloudFoundryCellBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryCellBaseComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-charts/cloud-foundry-cell-charts.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-charts/cloud-foundry-cell-charts.component.spec.ts index 047523224d..8bfc7f6a3e 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-charts/cloud-foundry-cell-charts.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-charts/cloud-foundry-cell-charts.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ActiveRouteCfCell } from '../../../../cf-page.types'; @@ -9,7 +9,7 @@ describe('CloudFoundryCellChartsComponent', () => { let component: CloudFoundryCellChartsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundryCellChartsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-summary/cloud-foundry-cell-summary.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-summary/cloud-foundry-cell-summary.component.spec.ts index 669e75977b..0972b50a6c 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-summary/cloud-foundry-cell-summary.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cell/cloud-foundry-cell-summary/cloud-foundry-cell-summary.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { of as observableOf } from 'rxjs'; import { MetricsConfig } from '../../../../../../../../core/src/shared/components/metrics-chart/metrics-chart.component'; @@ -62,7 +62,7 @@ describe('CloudFoundryCellSummaryComponent', () => { let component: CloudFoundryCellSummaryComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundryCellSummaryComponent diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cells.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cells.component.spec.ts index a4020756d5..d8a84c7eed 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cells.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-cells/cloud-foundry-cells.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { @@ -14,7 +14,7 @@ describe('CloudFoundryCellsComponent', () => { let component: CloudFoundryCellsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryCellsComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-events/cloud-foundry-events.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-events/cloud-foundry-events.component.spec.ts index 11639bfe54..90a8e23e14 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-events/cloud-foundry-events.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-events/cloud-foundry-events.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CFBaseTestModules } from '../../../../../test-framework/cf-test-helper'; import { @@ -13,7 +13,7 @@ describe('CloudFoundryEventsComponent', () => { let component: CloudFoundryEventsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundryEventsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-feature-flags/cloud-foundry-feature-flags.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-feature-flags/cloud-foundry-feature-flags.component.spec.ts index 1412568f17..68ab5d3b47 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-feature-flags/cloud-foundry-feature-flags.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-feature-flags/cloud-foundry-feature-flags.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ActiveRouteCfOrgSpace } from '../../cf-page.types'; @@ -8,7 +8,7 @@ describe('CloudFoundryFeatureFlagsComponent', () => { let component: CloudFoundryFeatureFlagsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryFeatureFlagsComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-firehose/cloud-foundry-firehose.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-firehose/cloud-foundry-firehose.component.spec.ts index f789fbf09d..245e94fd10 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-firehose/cloud-foundry-firehose.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-firehose/cloud-foundry-firehose.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules, @@ -11,7 +11,7 @@ describe('CloudFoundryFirehoseComponent', () => { let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryFirehoseComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-firehose/cloud-foundry-firehose.component.theme.scss b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-firehose/cloud-foundry-firehose.component.theme.scss index fa89acfc7d..99fb8e72b5 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-firehose/cloud-foundry-firehose.component.theme.scss +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-firehose/cloud-foundry-firehose.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin app-cloud-foundry-firehose-theme($theme, $app-theme) { $primary: map-get($theme, primary); $warn: map-get($theme, warn); diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organization-space-quotas/cloud-foundry-organization-space-quotas.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organization-space-quotas/cloud-foundry-organization-space-quotas.component.spec.ts index 84998577c1..7160b20193 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organization-space-quotas/cloud-foundry-organization-space-quotas.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organization-space-quotas/cloud-foundry-organization-space-quotas.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../core/src/tab-nav.service'; import { CFBaseTestModules } from '../../../../../test-framework/cf-test-helper'; @@ -13,7 +13,7 @@ describe('CloudFoundryOrganizationSpaceQuotasComponent', () => { let component: CloudFoundryOrganizationSpaceQuotasComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryOrganizationSpaceQuotasComponent], providers: [CfSpaceQuotasListConfigService, generateTestCfEndpointServiceProvider(), TabNavService, DatePipe], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-invite-user-link/cloud-foundry-invite-user-link.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-invite-user-link/cloud-foundry-invite-user-link.component.spec.ts index 90d8c920c4..76300ab1df 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-invite-user-link/cloud-foundry-invite-user-link.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-invite-user-link/cloud-foundry-invite-user-link.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules, @@ -10,7 +10,7 @@ describe('CloudFoundryInviteUserLinkComponent', () => { let component: CloudFoundryInviteUserLinkComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryInviteUserLinkComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-base/cloud-foundry-organization-base.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-base/cloud-foundry-organization-base.component.spec.ts index 5ec7cc6be9..39f522e906 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-base/cloud-foundry-organization-base.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-base/cloud-foundry-organization-base.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../../core/src/tab-nav.service'; import { @@ -14,7 +14,7 @@ describe('CloudFoundryOrganizationBaseComponent', () => { let component: CloudFoundryOrganizationBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryOrganizationBaseComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-events/cloud-foundry-organization-events.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-events/cloud-foundry-organization-events.component.spec.ts index c5bcdfd914..4057df51ce 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-events/cloud-foundry-organization-events.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-events/cloud-foundry-organization-events.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ListConfig } from '../../../../../../../core/src/shared/components/list/list.component.types'; import { CFBaseTestModules } from '../../../../../../test-framework/cf-test-helper'; @@ -21,7 +21,7 @@ describe('CloudFoundryOrganizationEventsComponent', () => { let component: CloudFoundryOrganizationEventsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundryOrganizationEventsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/cloud-foundry-organization-spaces.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/cloud-foundry-organization-spaces.component.spec.ts index 3e716a9838..f0a951a728 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/cloud-foundry-organization-spaces.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/cloud-foundry-organization-spaces.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../../core/src/tab-nav.service'; import { @@ -16,7 +16,7 @@ describe('CloudFoundryOrganizationSpacesComponent', () => { let component: CloudFoundryOrganizationSpacesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundryOrganizationSpacesComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/cloud-foundry-space-base/cloud-foundry-space-base.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/cloud-foundry-space-base/cloud-foundry-space-base.component.spec.ts index 9e8cb485d2..7f83f32604 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/cloud-foundry-space-base/cloud-foundry-space-base.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/cloud-foundry-space-base/cloud-foundry-space-base.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../../../core/src/tab-nav.service'; import { @@ -14,7 +14,7 @@ describe('CloudFoundrySpaceBaseComponent', () => { let component: CloudFoundrySpaceBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundrySpaceBaseComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-apps/cloud-foundry-space-apps.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-apps/cloud-foundry-space-apps.component.spec.ts index 35860a494a..dec4421e74 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-apps/cloud-foundry-space-apps.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-apps/cloud-foundry-space-apps.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { CloudFoundrySpaceServiceMock } from '../../../../../../../../test-framework/cloud-foundry-space.service.mock'; @@ -10,7 +10,7 @@ describe('CloudFoundrySpaceAppsComponent', () => { let component: CloudFoundrySpaceAppsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundrySpaceAppsComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-events/cloud-foundry-space-events.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-events/cloud-foundry-space-events.component.spec.ts index a09f80521e..730e1ab8c8 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-events/cloud-foundry-space-events.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-events/cloud-foundry-space-events.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ListConfig } from '../../../../../../../../../core/src/shared/components/list/list.component.types'; import { CFBaseTestModules } from '../../../../../../../../test-framework/cf-test-helper'; @@ -24,7 +24,7 @@ describe('CloudFoundrySpaceEventsComponent', () => { let component: CloudFoundrySpaceEventsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundrySpaceEventsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-routes/cloud-foundry-space-routes.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-routes/cloud-foundry-space-routes.component.spec.ts index 1b27ca28c7..a721c6d761 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-routes/cloud-foundry-space-routes.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-routes/cloud-foundry-space-routes.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { CloudFoundrySpaceServiceMock } from '../../../../../../../../test-framework/cloud-foundry-space.service.mock'; @@ -10,7 +10,7 @@ describe('CloudFoundrySpaceRoutesComponent', () => { let component: CloudFoundrySpaceRoutesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundrySpaceRoutesComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-service-instances/cloud-foundry-space-service-instances.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-service-instances/cloud-foundry-space-service-instances.component.spec.ts index d26fba5719..205bd63f48 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-service-instances/cloud-foundry-space-service-instances.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-service-instances/cloud-foundry-space-service-instances.component.spec.ts @@ -1,6 +1,6 @@ import { CommonModule, DatePipe } from '@angular/common'; import { NgModule } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { getCfSpaceServiceMock } from '../../../../../../../../test-framework/cloud-foundry-space.service.mock'; @@ -11,9 +11,8 @@ import { ServiceActionHelperService } from '../../../../../../../shared/data-ser import { CloudFoundrySpaceServiceInstancesComponent } from './cloud-foundry-space-service-instances.component'; @NgModule({ - declarations: [TableCellAppCfOrgSpaceHeaderComponent], - imports: [CommonModule], - entryComponents: [TableCellAppCfOrgSpaceHeaderComponent], + declarations: [TableCellAppCfOrgSpaceHeaderComponent], + imports: [CommonModule] }) class EntryComponentModules { } @@ -21,7 +20,7 @@ describe('CloudFoundrySpaceServiceInstancesComponent', () => { let component: CloudFoundrySpaceServiceInstancesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundrySpaceServiceInstancesComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-summary/cloud-foundry-space-summary.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-summary/cloud-foundry-space-summary.component.spec.ts index e973d6b546..d1edf85342 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-summary/cloud-foundry-space-summary.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-summary/cloud-foundry-space-summary.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../../../../core/src/tab-nav.service'; import { @@ -29,7 +29,7 @@ describe('CloudFoundrySpaceSummaryComponent', () => { let component: CloudFoundrySpaceSummaryComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundrySpaceSummaryComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-user-service-instances/cloud-foundry-space-user-service-instances.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-user-service-instances/cloud-foundry-space-user-service-instances.component.spec.ts index c8ec3532b6..9912fd55bf 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-user-service-instances/cloud-foundry-space-user-service-instances.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-user-service-instances/cloud-foundry-space-user-service-instances.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { getCfSpaceServiceMock } from '../../../../../../../../test-framework/cloud-foundry-space.service.mock'; @@ -10,7 +10,7 @@ describe('CloudFoundrySpaceUserServiceInstancesComponent', () => { let component: CloudFoundrySpaceUserServiceInstancesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundrySpaceUserServiceInstancesComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-users/cloud-foundry-space-users.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-users/cloud-foundry-space-users.component.spec.ts index 48dec0b9e8..15fc0014f4 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-users/cloud-foundry-space-users.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-spaces/tabs/cloud-foundry-space-users/cloud-foundry-space-users.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../../../../core/src/tab-nav.service'; import { @@ -19,7 +19,7 @@ describe('CloudFoundrySpaceUsersComponent', () => { let component: CloudFoundrySpaceUsersComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundrySpaceUsersComponent, CloudFoundryInviteUserLinkComponent, CfAdminAddUserWarningComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-summary/cloud-foundry-organization-summary.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-summary/cloud-foundry-organization-summary.component.spec.ts index ea18e34694..35081d4d9d 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-summary/cloud-foundry-organization-summary.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-summary/cloud-foundry-organization-summary.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../../core/src/tab-nav.service'; import { @@ -21,7 +21,7 @@ describe('CloudFoundryOrganizationSummaryComponent', () => { let component: CloudFoundryOrganizationSummaryComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundryOrganizationSummaryComponent, @@ -40,7 +40,7 @@ describe('CloudFoundryOrganizationSummaryComponent', () => { .compileComponents(); })); - beforeEach(async(() => { + beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(CloudFoundryOrganizationSummaryComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-users/cloud-foundry-organization-users.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-users/cloud-foundry-organization-users.component.spec.ts index 1430a0c2e9..6aafb31eb5 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-users/cloud-foundry-organization-users.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cf-organization-users/cloud-foundry-organization-users.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../../core/src/tab-nav.service'; import { @@ -17,7 +17,7 @@ describe('CloudFoundryOrganizationUsersComponent', () => { let component: CloudFoundryOrganizationUsersComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryOrganizationUsersComponent, CloudFoundryInviteUserLinkComponent, CfAdminAddUserWarningComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cloud-foundry-organizations.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cloud-foundry-organizations.component.spec.ts index 3c837c672c..1d48d11633 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cloud-foundry-organizations.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-organizations/cloud-foundry-organizations.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../core/src/tab-nav.service'; import { @@ -11,7 +11,7 @@ describe('CloudFoundryOrganizationsComponent', () => { let component: CloudFoundryOrganizationsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryOrganizationsComponent], providers: [generateTestCfEndpointServiceProvider(), TabNavService], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-quotas/cloud-foundry-quotas.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-quotas/cloud-foundry-quotas.component.spec.ts index 55eb8c7472..88310612d2 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-quotas/cloud-foundry-quotas.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-quotas/cloud-foundry-quotas.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../core/src/tab-nav.service'; import { CFBaseTestModules } from '../../../../../test-framework/cf-test-helper'; @@ -10,7 +10,7 @@ describe('CloudFoundryQuotasComponent', () => { let component: CloudFoundryQuotasComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryQuotasComponent], providers: [generateTestCfEndpointServiceProvider(), TabNavService, DatePipe], diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-routes/cloud-foundry-routes.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-routes/cloud-foundry-routes.component.spec.ts index 16b0b07e54..b3a1ccf7b3 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-routes/cloud-foundry-routes.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-routes/cloud-foundry-routes.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { CfUserService } from '../../../../shared/data-services/cf-user.service'; @@ -11,7 +11,7 @@ describe('CloudFoundryRoutesComponent', () => { let component: CloudFoundryRoutesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryRoutesComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-security-groups/cloud-foundry-security-groups.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-security-groups/cloud-foundry-security-groups.component.spec.ts index 2245780e7f..29725f30f8 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-security-groups/cloud-foundry-security-groups.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-security-groups/cloud-foundry-security-groups.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ActiveRouteCfOrgSpace } from '../../cf-page.types'; @@ -8,7 +8,7 @@ describe('CloudFoundrySecurityGroupsComponent', () => { let component: CloudFoundrySecurityGroupsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundrySecurityGroupsComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-stacks/cloud-foundry-stacks.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-stacks/cloud-foundry-stacks.component.spec.ts index bafc929ea1..5641bad7c2 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-stacks/cloud-foundry-stacks.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-stacks/cloud-foundry-stacks.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ActiveRouteCfOrgSpace } from '../../cf-page.types'; @@ -8,7 +8,7 @@ describe('CloudFoundryStacksComponent', () => { let component: CloudFoundryStacksComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryStacksComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-summary-tab/cloud-foundry-summary-tab.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-summary-tab/cloud-foundry-summary-tab.component.spec.ts index bb055e4564..2f94cad3f8 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-summary-tab/cloud-foundry-summary-tab.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-summary-tab/cloud-foundry-summary-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../core/src/tab-nav.service'; import { @@ -14,7 +14,7 @@ describe('CloudFoundrySummaryTabComponent', () => { let component: CloudFoundrySummaryTabComponent; let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundrySummaryTabComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-users/cloud-foundry-users.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-users/cloud-foundry-users.component.spec.ts index 2be7f7907d..b50533d22f 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-users/cloud-foundry-users.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/tabs/cf-users/cloud-foundry-users.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpHandler } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { CfUserService } from '../../../../shared/data-services/cf-user.service'; @@ -12,7 +12,7 @@ describe('CloudFoundryUsersComponent', () => { let component: CloudFoundryUsersComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CloudFoundryUsersComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/user-invites/configuration-dialog/user-invite-configuration-dialog.component.ts b/src/frontend/packages/cloud-foundry/src/features/cf/user-invites/configuration-dialog/user-invite-configuration-dialog.component.ts index 638704cc9b..ae17b05081 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/user-invites/configuration-dialog/user-invite-configuration-dialog.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/user-invites/configuration-dialog/user-invite-configuration-dialog.component.ts @@ -1,5 +1,5 @@ import { Component, Inject } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { MatSnackBar } from '@angular/material/snack-bar'; import { Observable, Subscription } from 'rxjs'; @@ -29,7 +29,7 @@ export class UserInviteConfigurationDialogComponent { connectingSub: Subscription; fetchSub: Subscription; - public endpointForm: FormGroup; + public endpointForm: UntypedFormGroup; // We need a delay to ensure the BE has finished registering the endpoint. // If we don't do this and if we're quick enough, we can navigate to the application page @@ -40,7 +40,7 @@ export class UserInviteConfigurationDialogComponent { public showSecret = false; constructor( - public fb: FormBuilder, + public fb: UntypedFormBuilder, public dialogRef: MatDialogRef, public snackBar: MatSnackBar, public userInviteConfigureService: UserInviteConfigureService, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/users/invite-users/invite-users-create/invite-users-create.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/users/invite-users/invite-users-create/invite-users-create.component.spec.ts index afff04afae..e4e5fd0a4e 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/users/invite-users/invite-users-create/invite-users-create.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/users/invite-users/invite-users-create/invite-users-create.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpHandler } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateActiveRouteCfOrgSpaceMock, @@ -14,7 +14,7 @@ describe('InviteUsersCreateComponent', () => { let component: InviteUsersCreateComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [InviteUsersCreateComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/users/invite-users/invite-users.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/users/invite-users/invite-users.component.spec.ts index e6586ecd83..4b5a6a6823 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/users/invite-users/invite-users.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/users/invite-users/invite-users.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpHandler } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../core/src/tab-nav.service'; import { @@ -13,7 +13,7 @@ describe('InviteUsersComponent', () => { let component: InviteUsersComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ InviteUsersComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-confirm/manage-users-confirm.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-confirm/manage-users-confirm.component.spec.ts index 98e9551aec..b4c104bbb6 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-confirm/manage-users-confirm.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-confirm/manage-users-confirm.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../../core/src/core/core.module'; @@ -14,7 +14,7 @@ describe('UsersRolesConfirmComponent', () => { let component: UsersRolesConfirmComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/manage-users-modify.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/manage-users-modify.component.spec.ts index 3e30284dbc..e19a233601 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/manage-users-modify.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/manage-users-modify.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../../core/src/core/core.module'; @@ -16,7 +16,7 @@ describe('UsersRolesModifyComponent', () => { let component: UsersRolesModifyComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/manage-users-modify.component.ts b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/manage-users-modify.component.ts index 4d1c3c269e..9f55a25e27 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/manage-users-modify.component.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/manage-users-modify.component.ts @@ -60,10 +60,9 @@ interface CfUserWithWarning extends CfUser { } @Component({ - selector: 'app-manage-users-modify', - templateUrl: './manage-users-modify.component.html', - styleUrls: ['./manage-users-modify.component.scss'], - entryComponents: [SpaceRolesListWrapperComponent] + selector: 'app-manage-users-modify', + templateUrl: './manage-users-modify.component.html', + styleUrls: ['./manage-users-modify.component.scss'] }) export class UsersRolesModifyComponent implements OnInit, OnDestroy { diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/space-roles-list-wrapper/space-roles-list-wrapper.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/space-roles-list-wrapper/space-roles-list-wrapper.component.spec.ts index 2620d4338c..073c7e5f68 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/space-roles-list-wrapper/space-roles-list-wrapper.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-modify/space-roles-list-wrapper/space-roles-list-wrapper.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -11,7 +11,7 @@ describe('SpaceRolesListWrapperComponent', () => { let component: SpaceRolesListWrapperComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-select/manage-users-select.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-select/manage-users-select.component.spec.ts index 2d857b1bb8..16c046ca72 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-select/manage-users-select.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-select/manage-users-select.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../../core/src/core/core.module'; @@ -14,7 +14,7 @@ describe('UsersRolesSelectComponent', () => { let component: UsersRolesSelectComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.spec.ts index 30ecf6ddf6..f09d847852 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users-set-usernames/manage-users-set-usernames.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClientModule } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../../core/src/core/core.module'; @@ -14,7 +14,7 @@ describe('ManageUsersSetUsernamesComponent', () => { let component: ManageUsersSetUsernamesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users.component.spec.ts index 3c67f45536..e1ed4cc976 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/users/manage-users/manage-users.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClientModule } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { ActivatedRoute } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; @@ -24,7 +24,7 @@ describe('UsersRolesComponent', () => { let component: UsersRolesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/cf/users/remove-user/remove-user.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/cf/users/remove-user/remove-user.component.spec.ts index bd5d2a63f2..35b301cedf 100644 --- a/src/frontend/packages/cloud-foundry/src/features/cf/users/remove-user/remove-user.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/cf/users/remove-user/remove-user.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClientModule } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { ActivatedRoute } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; @@ -18,7 +18,7 @@ describe('RemoveUserComponent', () => { let component: RemoveUserComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/home/card-cf-recent-apps/card-cf-recent-apps.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/home/card-cf-recent-apps/card-cf-recent-apps.component.spec.ts index 53fbd7045f..f2065f3a2b 100644 --- a/src/frontend/packages/cloud-foundry/src/features/home/card-cf-recent-apps/card-cf-recent-apps.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/home/card-cf-recent-apps/card-cf-recent-apps.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { of as observableOf } from 'rxjs'; import { @@ -25,7 +25,7 @@ describe('CardCfRecentAppsComponent', () => { let component: CardCfRecentAppsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardCfRecentAppsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/home/card-cf-recent-apps/compact-app-card/compact-app-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/home/card-cf-recent-apps/compact-app-card/compact-app-card.component.spec.ts index 2f7bc155e6..93b6cd4bd6 100644 --- a/src/frontend/packages/cloud-foundry/src/features/home/card-cf-recent-apps/compact-app-card/compact-app-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/home/card-cf-recent-apps/compact-app-card/compact-app-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ApplicationStateIconComponent, @@ -15,7 +15,7 @@ describe('CompactAppCardComponent', () => { let component: CompactAppCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CompactAppCardComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/home/cfhome-card/cfhome-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/home/cfhome-card/cfhome-card.component.spec.ts index 87195f96e6..b1d64c46f7 100644 --- a/src/frontend/packages/cloud-foundry/src/features/home/cfhome-card/cfhome-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/home/cfhome-card/cfhome-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ApplicationDeploySourceTypes } from '../../applications/deploy-application/deploy-application-steps.types'; @@ -8,7 +8,7 @@ describe('CFHomeCardComponent', () => { let component: CFHomeCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CFHomeCardComponent ], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-base/service-base.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-base/service-base.component.spec.ts index 887bba83f3..9a8dabd2cd 100644 --- a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-base/service-base.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-base/service-base.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ServicesService } from '../services.service'; @@ -10,7 +10,7 @@ describe('ServiceBaseComponent', () => { let component: ServiceBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ServiceBaseComponent], providers: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog-page/service-catalog-page.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog-page/service-catalog-page.component.spec.ts index 90f7083f13..2dc8248444 100644 --- a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog-page/service-catalog-page.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-catalog-page/service-catalog-page.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -15,7 +15,7 @@ describe('ServiceCatalogPageComponent', () => { let component: ServiceCatalogPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CommonModule, diff --git a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-plans/service-plans.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-plans/service-plans.component.spec.ts index 7c759023d8..303a899868 100644 --- a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-plans/service-plans.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-plans/service-plans.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ServicesService } from '../services.service'; @@ -10,7 +10,7 @@ describe('ServicePlansComponent', () => { let component: ServicePlansComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: generateCfBaseTestModules(), declarations: [ diff --git a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-summary/service-summary.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-summary/service-summary.component.spec.ts index 0fc4cfbc4b..43b7a8a0bd 100644 --- a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-summary/service-summary.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-summary/service-summary.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { @@ -22,7 +22,7 @@ describe('ServiceSummaryComponent', () => { let component: ServiceSummaryComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ServiceSummaryComponent, @@ -41,7 +41,7 @@ describe('ServiceSummaryComponent', () => { .compileComponents(); })); - beforeEach(async(() => { + beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(ServiceSummaryComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-tabs-base/service-tabs-base.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-tabs-base/service-tabs-base.component.spec.ts index f8dc7a2755..001abb45af 100644 --- a/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-tabs-base/service-tabs-base.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/service-catalog/service-tabs-base/service-tabs-base.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { generateCfBaseTestModules } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -11,7 +11,7 @@ describe('ServiceTabsBaseComponent', () => { let component: ServiceTabsBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ServiceTabsBaseComponent, diff --git a/src/frontend/packages/cloud-foundry/src/features/services/detach-service-instance/detach-apps/detach-apps.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/services/detach-service-instance/detach-apps/detach-apps.component.spec.ts index f74c8c4095..09cc8758f1 100644 --- a/src/frontend/packages/cloud-foundry/src/features/services/detach-service-instance/detach-apps/detach-apps.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/services/detach-service-instance/detach-apps/detach-apps.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -9,7 +9,7 @@ describe('DetachAppsComponent', () => { let component: DetachAppsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DetachAppsComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/services/detach-service-instance/detach-service-instance.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/services/detach-service-instance/detach-service-instance.component.spec.ts index 623415cc93..442f639c7f 100644 --- a/src/frontend/packages/cloud-foundry/src/features/services/detach-service-instance/detach-service-instance.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/services/detach-service-instance/detach-service-instance.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -12,7 +12,7 @@ describe('DetachServiceInstanceComponent', () => { let component: DetachServiceInstanceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DetachServiceInstanceComponent, DetachAppsComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.spec.ts b/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.spec.ts index 7cf738ff7f..bbcc04ba44 100644 --- a/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/features/services/services-wall/services-wall.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { generateCfBaseTestModules } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -12,7 +12,7 @@ describe('ServicesWallComponent', () => { let component: ServicesWallComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ServicesWallComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/cf-shared.module.ts b/src/frontend/packages/cloud-foundry/src/shared/cf-shared.module.ts index 554586149c..9b41ed7894 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/cf-shared.module.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/cf-shared.module.ts @@ -1,6 +1,6 @@ import { CommonModule } from '@angular/common'; import { ApplicationModule, NgModule, Type } from '@angular/core'; -import { MaterialDesignFrameworkModule } from '@cfstratos/ajsf-material'; +import { MaterialDesignFrameworkModule } from '@ajsf/material'; import { CoreModule } from '../../../core/src/core/core.module'; import { CardCell, TableCellCustom } from '../../../core/src/shared/components/list/list.types'; @@ -261,110 +261,102 @@ const cfListCards: Type>[] = [ ]; @NgModule({ - imports: [ - CommonModule, - CoreModule, - SharedModule, - ApplicationModule, - MaterialDesignFrameworkModule, - ], - declarations: [ - ServiceIconComponent, - CfEndpointDetailsComponent, - CliCommandComponent, - CliInfoComponent, - CfEndpointsMissingComponent, - CfRoleCheckboxComponent, - CfOrgSpaceLinksComponent, - SelectServiceComponent, - SpecifyDetailsStepComponent, - AddServiceInstanceComponent, - SelectPlanStepComponent, - NoServicePlansComponent, - BindAppsStepComponent, - SpecifyUserProvidedDetailsComponent, - AddServiceInstanceBaseStepComponent, - SchemaFormComponent, - CardAppStatusComponent, - CardAppInstancesComponent, - CardAppUsageComponent, - CardAppUptimeComponent, - CardCfInfoComponent, - CardCfUserInfoComponent, - CardCfOrgUserDetailsComponent, - CardCfSpaceDetailsComponent, - ServiceSummaryCardComponent, - ServiceBrokerCardComponent, - ServiceRecentInstancesCardComponent, - CompactServiceInstanceCardComponent, - RunningInstancesComponent, - ServicePlanPublicComponent, - ServicePlanPriceComponent, - CreateApplicationStep1Component, - EventTabActorIconPipe, - CloudFoundryEventsListComponent, - EventMetadataComponent, - ...cfListTableCells, - ...cfListCards, - ServiceInstanceLastOpComponent, - TableCellFeatureFlagDescriptionComponent, - AppNameUniqueDirective, - ApplicationInstanceChartComponent, - EnvVarViewComponent, - CfUserPermissionDirective - ], - exports: [ - ServiceIconComponent, - CfEndpointDetailsComponent, - CliCommandComponent, - CliInfoComponent, - CfEndpointsMissingComponent, - CfRoleCheckboxComponent, - CfOrgSpaceLinksComponent, - SelectServiceComponent, - SpecifyDetailsStepComponent, - AddServiceInstanceComponent, - SelectPlanStepComponent, - NoServicePlansComponent, - BindAppsStepComponent, - SpecifyUserProvidedDetailsComponent, - AddServiceInstanceBaseStepComponent, - CfServiceCardComponent, - SchemaFormComponent, - CardAppStatusComponent, - CardAppInstancesComponent, - CardAppUsageComponent, - CardAppUptimeComponent, - CardCfInfoComponent, - CardCfUserInfoComponent, - CardCfOrgUserDetailsComponent, - CardCfSpaceDetailsComponent, - ServiceSummaryCardComponent, - ServiceBrokerCardComponent, - ServiceRecentInstancesCardComponent, - CompactServiceInstanceCardComponent, - RunningInstancesComponent, - ServicePlanPublicComponent, - ServicePlanPriceComponent, - CreateApplicationStep1Component, - CloudFoundryEventsListComponent, - AppNameUniqueDirective, - ApplicationInstanceChartComponent, - EnvVarViewComponent, - CfUserPermissionDirective - ], - entryComponents: [ - CfEndpointDetailsComponent, - NoServicePlansComponent, - EventMetadataComponent, - EnvVarViewComponent, - ...cfListTableCells, - ...cfListCards - ], - providers: [ - ApplicationStateService, - CloudFoundryUserProvidedServicesService - ] + imports: [ + CommonModule, + CoreModule, + SharedModule, + ApplicationModule, + MaterialDesignFrameworkModule, + ], + declarations: [ + ServiceIconComponent, + CfEndpointDetailsComponent, + CliCommandComponent, + CliInfoComponent, + CfEndpointsMissingComponent, + CfRoleCheckboxComponent, + CfOrgSpaceLinksComponent, + SelectServiceComponent, + SpecifyDetailsStepComponent, + AddServiceInstanceComponent, + SelectPlanStepComponent, + NoServicePlansComponent, + BindAppsStepComponent, + SpecifyUserProvidedDetailsComponent, + AddServiceInstanceBaseStepComponent, + SchemaFormComponent, + CardAppStatusComponent, + CardAppInstancesComponent, + CardAppUsageComponent, + CardAppUptimeComponent, + CardCfInfoComponent, + CardCfUserInfoComponent, + CardCfOrgUserDetailsComponent, + CardCfSpaceDetailsComponent, + ServiceSummaryCardComponent, + ServiceBrokerCardComponent, + ServiceRecentInstancesCardComponent, + CompactServiceInstanceCardComponent, + RunningInstancesComponent, + ServicePlanPublicComponent, + ServicePlanPriceComponent, + CreateApplicationStep1Component, + EventTabActorIconPipe, + CloudFoundryEventsListComponent, + EventMetadataComponent, + ...cfListTableCells, + ...cfListCards, + ServiceInstanceLastOpComponent, + TableCellFeatureFlagDescriptionComponent, + AppNameUniqueDirective, + ApplicationInstanceChartComponent, + EnvVarViewComponent, + CfUserPermissionDirective + ], + exports: [ + ServiceIconComponent, + CfEndpointDetailsComponent, + CliCommandComponent, + CliInfoComponent, + CfEndpointsMissingComponent, + CfRoleCheckboxComponent, + CfOrgSpaceLinksComponent, + SelectServiceComponent, + SpecifyDetailsStepComponent, + AddServiceInstanceComponent, + SelectPlanStepComponent, + NoServicePlansComponent, + BindAppsStepComponent, + SpecifyUserProvidedDetailsComponent, + AddServiceInstanceBaseStepComponent, + CfServiceCardComponent, + SchemaFormComponent, + CardAppStatusComponent, + CardAppInstancesComponent, + CardAppUsageComponent, + CardAppUptimeComponent, + CardCfInfoComponent, + CardCfUserInfoComponent, + CardCfOrgUserDetailsComponent, + CardCfSpaceDetailsComponent, + ServiceSummaryCardComponent, + ServiceBrokerCardComponent, + ServiceRecentInstancesCardComponent, + CompactServiceInstanceCardComponent, + RunningInstancesComponent, + ServicePlanPublicComponent, + ServicePlanPriceComponent, + CreateApplicationStep1Component, + CloudFoundryEventsListComponent, + AppNameUniqueDirective, + ApplicationInstanceChartComponent, + EnvVarViewComponent, + CfUserPermissionDirective + ], + providers: [ + ApplicationStateService, + CloudFoundryUserProvidedServicesService + ] }) export class CloudFoundrySharedModule { } diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/add-service-instance-base-step/add-service-instance-base-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/add-service-instance-base-step/add-service-instance-base-step.component.spec.ts index ef280c7cbd..7504a67aea 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/add-service-instance-base-step/add-service-instance-base-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/add-service-instance-base-step/add-service-instance-base-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../core/src/tab-nav.service'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -8,7 +8,7 @@ describe('AddServiceInstanceBaseStepComponent', () => { let component: AddServiceInstanceBaseStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AddServiceInstanceBaseStepComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/add-service-instance/add-service-instance.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/add-service-instance/add-service-instance.component.spec.ts index f79e72c929..2c3d53fa61 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/add-service-instance/add-service-instance.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/add-service-instance/add-service-instance.component.spec.ts @@ -1,5 +1,5 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { MaterialDesignFrameworkModule } from '@cfstratos/ajsf-material'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { MaterialDesignFrameworkModule } from '@ajsf/material'; import { ApplicationStateIconComponent, @@ -85,7 +85,7 @@ describe('AddServiceInstanceComponent', () => { let component: AddServiceInstanceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AppNameUniqueDirective, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/bind-apps-step/bind-apps-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/bind-apps-step/bind-apps-step.component.spec.ts index 499fafe49f..9301514c79 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/bind-apps-step/bind-apps-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/bind-apps-step/bind-apps-step.component.spec.ts @@ -1,5 +1,5 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { MaterialDesignFrameworkModule } from '@cfstratos/ajsf-material'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { MaterialDesignFrameworkModule } from '@ajsf/material'; import { PaginationMonitorFactory } from '../../../../../../store/src/monitors/pagination-monitor.factory'; import { @@ -15,7 +15,7 @@ describe('BindAppsStepComponent', () => { let component: BindAppsStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ BindAppsStepComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/bind-apps-step/bind-apps-step.component.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/bind-apps-step/bind-apps-step.component.ts index 7f5af3b6ea..7da43bb0da 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/bind-apps-step/bind-apps-step.component.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/bind-apps-step/bind-apps-step.component.ts @@ -1,5 +1,5 @@ import { AfterContentInit, Component, Input, OnDestroy } from '@angular/core'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { Store } from '@ngrx/store'; import { BehaviorSubject, Observable, of as observableOf, Subscription } from 'rxjs'; @@ -28,7 +28,7 @@ export class BindAppsStepComponent implements OnDestroy, AfterContentInit { validateSubscription: Subscription; validate = new BehaviorSubject(true); serviceInstanceGuid: string; - stepperForm: FormGroup; + stepperForm: UntypedFormGroup; guideText = 'Specify the application to bind (Optional)'; selectedServicePlan: APIResource; bindingParams: object = {}; @@ -37,8 +37,8 @@ export class BindAppsStepComponent implements OnDestroy, AfterContentInit { constructor( private store: Store, ) { - this.stepperForm = new FormGroup({ - apps: new FormControl(''), + this.stepperForm = new UntypedFormGroup({ + apps: new UntypedFormControl(''), }); } diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/csi-guids.service.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/csi-guids.service.ts index a21c6966ea..a4b13b4c05 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/csi-guids.service.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/csi-guids.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { StringifyOptions } from 'querystring'; +// import { StringifyOptions } from 'querystring'; @Injectable() export class CsiGuidsService { diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/no-service-plans/no-service-plans.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/no-service-plans/no-service-plans.component.spec.ts index b34c559e35..c4e1827c47 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/no-service-plans/no-service-plans.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/no-service-plans/no-service-plans.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoServicePlansComponent } from './no-service-plans.component'; @@ -6,7 +6,7 @@ describe('NoServicePlansComponent', () => { let component: NoServicePlansComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ NoServicePlansComponent ] }) diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/select-plan-step/select-plan-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/select-plan-step/select-plan-step.component.spec.ts index 4bb97e9e32..b08239cc59 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/select-plan-step/select-plan-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/select-plan-step/select-plan-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CardStatusComponent } from '../../../../../../core/src/shared/components/cards/card-status/card-status.component'; import { @@ -22,7 +22,7 @@ describe('SelectPlanStepComponent', () => { let component: SelectPlanStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ SelectPlanStepComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/select-plan-step/select-plan-step.component.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/select-plan-step/select-plan-step.component.ts index e1b2c4d645..8bcfb4a35e 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/select-plan-step/select-plan-step.component.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/select-plan-step/select-plan-step.component.ts @@ -7,7 +7,7 @@ import { ViewChild, ViewContainerRef, } from '@angular/core'; -import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; import { BehaviorSubject, combineLatest as observableCombineLatest, Observable, Subscription } from 'rxjs'; @@ -65,7 +65,7 @@ export class SelectPlanStepComponent implements OnDestroy { validate = new BehaviorSubject(false); subscription: Subscription; - stepperForm: FormGroup; + stepperForm: UntypedFormGroup; servicePlans$: Observable[]>; displayNames: { [guid: string]: string } = {}; @@ -77,8 +77,8 @@ export class SelectPlanStepComponent implements OnDestroy { private modeService: CsiModeService ) { - this.stepperForm = new FormGroup({ - servicePlans: new FormControl('', Validators.required), + this.stepperForm = new UntypedFormGroup({ + servicePlans: new UntypedFormControl('', Validators.required), }); this.servicePlans$ = this.store.select(selectCreateServiceInstance).pipe( diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-details-step/specify-details-step.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-details-step/specify-details-step.component.spec.ts index 164820d39a..a44a8c010e 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-details-step/specify-details-step.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-details-step/specify-details-step.component.spec.ts @@ -1,5 +1,5 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { MaterialDesignFrameworkModule } from '@cfstratos/ajsf-material'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { MaterialDesignFrameworkModule } from '@ajsf/material'; import { EntityMonitorFactory } from '../../../../../../store/src/monitors/entity-monitor.factory.service'; import { PaginationMonitorFactory } from '../../../../../../store/src/monitors/pagination-monitor.factory'; @@ -15,7 +15,7 @@ describe('SpecifyDetailsStepComponent', () => { let component: SpecifyDetailsStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ SpecifyDetailsStepComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-details-step/specify-details-step.component.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-details-step/specify-details-step.component.ts index 029efc2e84..944306ddec 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-details-step/specify-details-step.component.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-details-step/specify-details-step.component.ts @@ -1,6 +1,6 @@ import { COMMA, ENTER, SPACE } from '@angular/cdk/keycodes'; import { AfterContentInit, Component, Input, OnDestroy } from '@angular/core'; -import { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { MatChipInputEvent } from '@angular/material/chips'; import { Store } from '@ngrx/store'; import { @@ -81,8 +81,8 @@ export class SpecifyDetailsStepComponent implements OnDestroy, AfterContentInit formMode: CreateServiceFormMode; - selectExistingInstanceForm: FormGroup; - createNewInstanceForm: FormGroup; + selectExistingInstanceForm: UntypedFormGroup; + createNewInstanceForm: UntypedFormGroup; serviceInstances$: Observable[]>; bindableServiceInstances$: Observable[]>; cSIHelperService: CreateServiceInstanceHelper; @@ -256,12 +256,12 @@ export class SpecifyDetailsStepComponent implements OnDestroy, AfterContentInit } private setupForms() { - this.createNewInstanceForm = new FormGroup({ - name: new FormControl('', [Validators.required, this.nameTakenValidator(), Validators.maxLength(50)]), - tags: new FormControl(''), + this.createNewInstanceForm = new UntypedFormGroup({ + name: new UntypedFormControl('', [Validators.required, this.nameTakenValidator(), Validators.maxLength(50)]), + tags: new UntypedFormControl(''), }); - this.selectExistingInstanceForm = new FormGroup({ - serviceInstances: new FormControl('', [Validators.required]), + this.selectExistingInstanceForm = new UntypedFormGroup({ + serviceInstances: new UntypedFormControl('', [Validators.required]), }); } diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-user-provided-details/specify-user-provided-details.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-user-provided-details/specify-user-provided-details.component.spec.ts index 4fa276d943..9b4940ea5f 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-user-provided-details/specify-user-provided-details.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-user-provided-details/specify-user-provided-details.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { AppNameUniqueDirective } from '../../../directives/app-name-unique.directive/app-name-unique.directive'; @@ -12,7 +12,7 @@ describe('SpecifyUserProvidedDetailsComponent', () => { let component: SpecifyUserProvidedDetailsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ SpecifyUserProvidedDetailsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-user-provided-details/specify-user-provided-details.component.ts b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-user-provided-details/specify-user-provided-details.component.ts index bf23f3494c..63c8a75113 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-user-provided-details/specify-user-provided-details.component.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/add-service-instance/specify-user-provided-details/specify-user-provided-details.component.ts @@ -1,7 +1,7 @@ import { COMMA, ENTER, SPACE } from '@angular/cdk/keycodes'; import { HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http'; import { Component, Input, OnDestroy } from '@angular/core'; -import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { MatChipInputEvent } from '@angular/material/chips'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; @@ -48,21 +48,21 @@ export class SpecifyUserProvidedDetailsComponent implements OnDestroy { route && route.snapshot ? route.snapshot.params : { endpointId: null, serviceInstanceId: null }; this.isUpdate = endpointId && serviceInstanceId; - this.createEditServiceInstance = new FormGroup({ - name: new FormControl('', [Validators.required, Validators.maxLength(50)]), - syslog_drain_url: new FormControl('', [Validators.pattern(urlValidationExpression)]), - credentials: new FormControl('', isValidJsonValidator()), - route_service_url: new FormControl('', [Validators.pattern(urlValidationExpression)]), - tags: new FormControl([]), + this.createEditServiceInstance = new UntypedFormGroup({ + name: new UntypedFormControl('', [Validators.required, Validators.maxLength(50)]), + syslog_drain_url: new UntypedFormControl('', [Validators.pattern(urlValidationExpression)]), + credentials: new UntypedFormControl('', isValidJsonValidator()), + route_service_url: new UntypedFormControl('', [Validators.pattern(urlValidationExpression)]), + tags: new UntypedFormControl([]), }); - this.bindExistingInstance = new FormGroup({ - serviceInstances: new FormControl('', [Validators.required]), + this.bindExistingInstance = new UntypedFormGroup({ + serviceInstances: new UntypedFormControl('', [Validators.required]), }); this.initUpdate(serviceInstanceId, endpointId); this.setupValidate(); } - public createEditServiceInstance: FormGroup; - public bindExistingInstance: FormGroup; + public createEditServiceInstance: UntypedFormGroup; + public bindExistingInstance: UntypedFormGroup; public separatorKeysCodes = [ENTER, COMMA, SPACE]; public allServiceInstanceNames: string[]; public subs: Subscription[] = []; diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/application-instance-chart/application-instance-chart.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/application-instance-chart/application-instance-chart.component.spec.ts index fc47c9f6b3..e5504ec226 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/application-instance-chart/application-instance-chart.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/application-instance-chart/application-instance-chart.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -12,7 +12,7 @@ describe('ApplicationInstanceChartComponent', () => { let component: ApplicationInstanceChartComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.spec.ts index 4eacf1721f..3a6969721b 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-instances/card-app-instances.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../core/src/core/core.module'; @@ -26,7 +26,7 @@ describe('CardAppInstancesComponent', () => { let component: CardAppInstancesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardAppInstancesComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-status/card-app-status.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-status/card-app-status.component.spec.ts index c3a4e7dc27..3457c0b92d 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-status/card-app-status.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-status/card-app-status.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../core/src/core/core.module'; import { @@ -19,7 +19,7 @@ describe('CardAppStatusComponent', () => { let component: CardAppStatusComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardAppStatusComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-uptime/card-app-uptime.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-uptime/card-app-uptime.component.spec.ts index 654313f9e3..fd42d59f16 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-uptime/card-app-uptime.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-uptime/card-app-uptime.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../core/src/core/core.module'; @@ -30,7 +30,7 @@ describe('CardAppUptimeComponent', () => { let component: CardAppUptimeComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardAppUptimeComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-usage/card-app-usage.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-usage/card-app-usage.component.spec.ts index f0bc17b90a..803b44f6b7 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-usage/card-app-usage.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-app-usage/card-app-usage.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../core/src/core/core.module'; @@ -29,7 +29,7 @@ describe('CardAppUsageComponent', () => { let component: CardAppUsageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardAppUsageComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-info/card-cf-info.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-info/card-cf-info.component.spec.ts index 68f6a9d59e..dac4297dde 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-info/card-cf-info.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-info/card-cf-info.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -19,7 +19,7 @@ describe('CardCfInfoComponent', () => { let component: CardCfInfoComponent; let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardCfInfoComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-org-user-details/card-cf-org-user-details.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-org-user-details/card-cf-org-user-details.component.spec.ts index 45b086bc37..cf9e8c9368 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-org-user-details/card-cf-org-user-details.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-org-user-details/card-cf-org-user-details.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -25,7 +25,7 @@ describe('CardCfOrgUserDetailsComponent', () => { let component: CardCfOrgUserDetailsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardCfOrgUserDetailsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.html b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.html index f2b722ebda..47a893560a 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.html +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.html @@ -19,7 +19,7 @@ None assigned - view organization's quota + [routerLink]="[]" (click)="goToOrgQuota($event)">view organization's quota diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.spec.ts index 72fc9fc91e..149dbf0605 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-space-details/card-cf-space-details.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -17,7 +17,7 @@ describe('CardCfSpaceDetailsComponent', () => { let component: CardCfSpaceDetailsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardCfSpaceDetailsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-user-info/card-cf-user-info.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-user-info/card-cf-user-info.component.spec.ts index be9699125f..ddff1d19bb 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-user-info/card-cf-user-info.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/card-cf-user-info/card-cf-user-info.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MetadataItemComponent } from '../../../../../../core/src/shared/components/metadata-item/metadata-item.component'; import { @@ -12,7 +12,7 @@ describe('CardCfUserInfoComponent', () => { let component: CardCfUserInfoComponent; let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CardCfUserInfoComponent, MetadataItemComponent, CopyToClipboardComponent, CardCfUserInfoComponent], imports: generateCfBaseTestModulesNoShared(), diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/compact-service-instance-card/compact-service-instance-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/compact-service-instance-card/compact-service-instance-card.component.spec.ts index 7bd3b03468..c4ec1c93f9 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/compact-service-instance-card/compact-service-instance-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/compact-service-instance-card/compact-service-instance-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AppChipsComponent } from '../../../../../../core/src/shared/components/chips/chips.component'; import { @@ -10,7 +10,7 @@ describe('CompactServiceInstanceCardComponent', () => { let component: CompactServiceInstanceCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CompactServiceInstanceCardComponent, AppChipsComponent], imports: generateCfBaseTestModulesNoShared() diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-broker-card/service-broker-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-broker-card/service-broker-card.component.spec.ts index 6f64e8764f..c412d498a1 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-broker-card/service-broker-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-broker-card/service-broker-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -14,7 +14,7 @@ describe('ServiceBrokerCardComponent', () => { let component: ServiceBrokerCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ServiceBrokerCardComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-recent-instances-card/service-recent-instances-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-recent-instances-card/service-recent-instances-card.component.spec.ts index 727eb99ef0..0c50ebbfb0 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-recent-instances-card/service-recent-instances-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-recent-instances-card/service-recent-instances-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AppChipsComponent } from '../../../../../../core/src/shared/components/chips/chips.component'; import { MetadataCardTestComponents } from '../../../../../../core/test-framework/core-test.helper'; @@ -14,7 +14,7 @@ describe('ServiceRecentInstancesCardComponent', () => { let component: ServiceRecentInstancesCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ServiceRecentInstancesCardComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-summary-card/service-summary-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-summary-card/service-summary-card.component.spec.ts index a715f93b48..d5937d85c6 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-summary-card/service-summary-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cards/service-summary-card/service-summary-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -17,7 +17,7 @@ describe('ServiceSummaryCardComponent', () => { let component: ServiceSummaryCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ServiceSummaryCardComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cf-endpoint-details/cf-endpoint-details.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cf-endpoint-details/cf-endpoint-details.component.spec.ts index c6cf04c3a1..c2350b6a96 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cf-endpoint-details/cf-endpoint-details.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cf-endpoint-details/cf-endpoint-details.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../core/src/core/core.module'; import { SharedModule } from '../../../../../core/src/shared/shared.module'; @@ -8,7 +8,7 @@ describe('CfEndpointDetailsComponent', () => { let component: CfEndpointDetailsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CfEndpointDetailsComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cf-endpoints-missing/cf-endpoints-missing.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cf-endpoints-missing/cf-endpoints-missing.component.spec.ts index 4ba8f1de01..67032fb876 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cf-endpoints-missing/cf-endpoints-missing.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cf-endpoints-missing/cf-endpoints-missing.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { CoreModule } from '../../../../../core/src/core/core.module'; @@ -12,7 +12,7 @@ describe('CfEndpointsMissingComponent', () => { let component: CfEndpointsMissingComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CfEndpointsMissingComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cf-org-space-links/cf-org-space-links.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cf-org-space-links/cf-org-space-links.component.spec.ts index dc3c440bff..bac3aaa8d7 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cf-org-space-links/cf-org-space-links.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cf-org-space-links/cf-org-space-links.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { of } from 'rxjs'; @@ -12,7 +12,7 @@ describe('CfOrgSpaceLinksComponent', () => { let fixture: ComponentFixture; let service; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CfOrgSpaceLinksComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cf-role-checkbox/cf-role-checkbox.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cf-role-checkbox/cf-role-checkbox.component.spec.ts index e7ade5e7bd..62b949f958 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cf-role-checkbox/cf-role-checkbox.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cf-role-checkbox/cf-role-checkbox.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClientModule } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../core/src/core/core.module'; @@ -15,7 +15,7 @@ describe('CfRoleCheckboxComponent', () => { let component: CfRoleCheckboxComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cli-info/cli-command/cli-command.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cli-info/cli-command/cli-command.component.spec.ts index c4790774a0..305fa26829 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cli-info/cli-command/cli-command.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cli-info/cli-command/cli-command.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../core/src/core/core.module'; import { MDAppModule } from '../../../../../../core/src/core/md.module'; @@ -13,7 +13,7 @@ describe('CliCommandComponent', () => { let component: CliCommandComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CliCommandComponent, CodeBlockComponent, CopyToClipboardComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cli-info/cli-info.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cli-info/cli-info.component.spec.ts index d2de0218f4..60274073fb 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cli-info/cli-info.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cli-info/cli-info.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../core/src/core/core.module'; import { MDAppModule } from '../../../../../core/src/core/md.module'; @@ -12,7 +12,7 @@ describe('CliInfoComponent', () => { let component: CliInfoComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CliInfoComponent, CodeBlockComponent, CopyToClipboardComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cloud-foundry-events-list/cloud-foundry-events-list.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cloud-foundry-events-list/cloud-foundry-events-list.component.spec.ts index 97f86c96a9..df9858b5e9 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cloud-foundry-events-list/cloud-foundry-events-list.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cloud-foundry-events-list/cloud-foundry-events-list.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ListConfig } from '../../../../../core/src/shared/components/list/list.component.types'; import { CFBaseTestModules } from '../../../../test-framework/cf-test-helper'; @@ -12,7 +12,7 @@ describe('CloudFoundryEventsListComponent', () => { let component: CloudFoundryEventsListComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CloudFoundryEventsListComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/cloud-foundry-events-list/cloud-foundry-events-list.component.ts b/src/frontend/packages/cloud-foundry/src/shared/components/cloud-foundry-events-list/cloud-foundry-events-list.component.ts index 109ed876e0..daad135cbd 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/cloud-foundry-events-list/cloud-foundry-events-list.component.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/cloud-foundry-events-list/cloud-foundry-events-list.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnDestroy, OnInit } from '@angular/core'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { Subscription } from 'rxjs'; import { debounceTime, distinctUntilChanged } from 'rxjs/operators'; @@ -20,7 +20,7 @@ export class CloudFoundryEventsListComponent implements OnInit, OnDestroy { */ @Input() typeMustContain: string; - filtersFormGroup: FormGroup; + filtersFormGroup: UntypedFormGroup; typeValues: string[] = [ 'app.crash', 'audit.app.copy-bits', @@ -114,9 +114,9 @@ export class CloudFoundryEventsListComponent implements OnInit, OnDestroy { constructor( listConfig: ListConfig, ) { - this.filtersFormGroup = new FormGroup({ - actee: new FormControl(null, []), - type: new FormControl(null, []), + this.filtersFormGroup = new UntypedFormGroup({ + actee: new UntypedFormControl(null, []), + type: new UntypedFormControl(null, []), }); this.config = (listConfig as CfEventsConfigService); diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/create-application/create-application-step1/create-application-step1.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/create-application/create-application-step1/create-application-step1.component.spec.ts index cc6e2cacab..a95a1559b6 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/create-application/create-application-step1/create-application-step1.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/create-application/create-application-step1/create-application-step1.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { PaginationMonitorFactory } from '../../../../../../store/src/monitors/pagination-monitor.factory'; @@ -10,7 +10,7 @@ describe('CreateApplicationStep1Component', () => { let component: CreateApplicationStep1Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CreateApplicationStep1Component, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/env-var-view/env-var-view.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/env-var-view/env-var-view.component.spec.ts index 0047f9b5bb..e012de35af 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/env-var-view/env-var-view.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/env-var-view/env-var-view.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { CodeBlockComponent } from '../../../../../core/src/shared/components/code-block/code-block.component'; @@ -12,7 +12,7 @@ describe('EnvVarViewComponent', () => { let component: EnvVarViewComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ EnvVarViewComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/table-cell-cf-cell/table-cell-cf-cell.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/table-cell-cf-cell/table-cell-cf-cell.component.spec.ts index 5804f4d188..fe8c2219e1 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/table-cell-cf-cell/table-cell-cf-cell.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/table-cell-cf-cell/table-cell-cf-cell.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; import { UtilsService } from '../../../../../../../../core/src/core/utils.service'; @@ -8,7 +8,7 @@ describe('TableCellCfCellComponent', () => { let component: TableCellCfCellComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellCfCellComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/table-cell-usage/table-cell-usage.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/table-cell-usage/table-cell-usage.component.spec.ts index 16f49eebdc..957be314ba 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/table-cell-usage/table-cell-usage.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-instance/table-cell-usage/table-cell-usage.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; import { UtilsService } from '../../../../../../../../core/src/core/utils.service'; @@ -11,7 +11,7 @@ describe('TableCellUsageComponent', () => { let component: TableCellUsageComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellUsageComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-sevice-bindings/app-service-binding-card/app-service-binding-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-sevice-bindings/app-service-binding-card/app-service-binding-card.component.spec.ts index c92ca3f71b..45037f9f7a 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-sevice-bindings/app-service-binding-card/app-service-binding-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-sevice-bindings/app-service-binding-card/app-service-binding-card.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ConfirmationDialogService } from '../../../../../../../../core/src/shared/components/confirmation-dialog.service'; import { EntityMonitorFactory } from '../../../../../../../../store/src/monitors/entity-monitor.factory.service'; @@ -21,7 +21,7 @@ describe('AppServiceBindingCardComponent', () => { let component: AppServiceBindingCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AppServiceBindingCardComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-variables/table-cell-edit-variable/table-cell-edit-variable.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-variables/table-cell-edit-variable/table-cell-edit-variable.component.spec.ts index c1e990d6c9..4f0f9566f8 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-variables/table-cell-edit-variable/table-cell-edit-variable.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app-variables/table-cell-edit-variable/table-cell-edit-variable.component.spec.ts @@ -1,5 +1,5 @@ import { ListAppEnvVar } from '../cf-app-variables-data-source'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TableCellEditVariableComponent } from './table-cell-edit-variable.component'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -9,7 +9,7 @@ describe('TableCellEditVariableComponent', () => { let component: TableCellEditVariableComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellEditVariableComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/card/card-app.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/card/card-app.component.spec.ts index b0734cebe9..a66b2ff2dd 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/card/card-app.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/card/card-app.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -16,7 +16,7 @@ describe('CardAppComponent', () => { let component: CardAppComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardAppComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-cforgspace-header/table-cell-app-cforgspace-header.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-cforgspace-header/table-cell-app-cforgspace-header.component.spec.ts index 5ce454b9ee..f2119c4f49 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-cforgspace-header/table-cell-app-cforgspace-header.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-cforgspace-header/table-cell-app-cforgspace-header.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StoreModule } from '@ngrx/store'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -23,7 +23,7 @@ describe('TableCellAppCfOrgSpaceHeaderComponent', () => { let component: TableCellAppCfOrgSpaceHeaderComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellAppStatusComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-cforgspace/table-cell-app-cforgspace.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-cforgspace/table-cell-app-cforgspace.component.spec.ts index c36063be34..2abc76573a 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-cforgspace/table-cell-app-cforgspace.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-cforgspace/table-cell-app-cforgspace.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StoreModule } from '@ngrx/store'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -23,7 +23,7 @@ describe('TableCellAppCfOrgSpaceComponent', () => { let component: TableCellAppCfOrgSpaceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellAppStatusComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-instances/table-cell-app-instances.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-instances/table-cell-app-instances.component.spec.ts index 588c03ae11..10bc888515 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-instances/table-cell-app-instances.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-instances/table-cell-app-instances.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; import { PaginationMonitorFactory } from '../../../../../../../../store/src/monitors/pagination-monitor.factory'; @@ -10,7 +10,7 @@ describe('TableCellAppInstancesComponent', () => { let component: TableCellAppInstancesComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellAppInstancesComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-name/table-cell-app-name.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-name/table-cell-app-name.component.spec.ts index 8aeae3cbdf..9db9c8f1a9 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-name/table-cell-app-name.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-name/table-cell-app-name.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { ROUTER_NAVIGATION } from '@ngrx/router-store'; import { Store } from '@ngrx/store'; @@ -11,7 +11,7 @@ describe('TableCellAppNameComponent', () => { let component: TableCellAppNameComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellAppNameComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-status/table-cell-app-status.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-status/table-cell-app-status.component.spec.ts index f8cb5f8454..70c6ecc1e2 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-status/table-cell-app-status.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/app/table-cell-app-status/table-cell-app-status.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StoreModule } from '@ngrx/store'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -22,7 +22,7 @@ describe('TableCellAppStatusComponent', () => { let component: TableCellAppStatusComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellAppStatusComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-buildpacks/cf-buildpack-card/cf-buildpack-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-buildpacks/cf-buildpack-card/cf-buildpack-card.component.spec.ts index 41025902f1..53b6cd2c17 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-buildpacks/cf-buildpack-card/cf-buildpack-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-buildpacks/cf-buildpack-card/cf-buildpack-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -14,7 +14,7 @@ describe('CfBuildpackCardComponent', () => { let component: CfBuildpackCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CfBuildpackCardComponent, ...MetadataCardTestComponents, BooleanIndicatorComponent], imports: generateCfBaseTestModulesNoShared(), diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-buildpacks/cf-buildpack-card/cf-buildpack-card.component.theme.scss b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-buildpacks/cf-buildpack-card/cf-buildpack-card.component.theme.scss index 9c73988a7f..6371a39b61 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-buildpacks/cf-buildpack-card/cf-buildpack-card.component.theme.scss +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-buildpacks/cf-buildpack-card/cf-buildpack-card.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin cf-buildpack-card-theme($theme) { $primary: map-get($theme, primary); $warn: map-get($theme, warn); diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-confirm-roles/table-cell-confirm-org-space/table-cell-confirm-org-space.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-confirm-roles/table-cell-confirm-org-space/table-cell-confirm-org-space.component.spec.ts index d3638f26ec..06b701dd2b 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-confirm-roles/table-cell-confirm-org-space/table-cell-confirm-org-space.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-confirm-roles/table-cell-confirm-org-space/table-cell-confirm-org-space.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -9,7 +9,7 @@ describe('TableCellConfirmOrgSpaceComponent', () => { let component: TableCellConfirmOrgSpaceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-confirm-roles/table-cell-confirm-role-add-rem/table-cell-confirm-role-add-rem.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-confirm-roles/table-cell-confirm-role-add-rem/table-cell-confirm-role-add-rem.component.spec.ts index d0ff520581..24056a6b69 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-confirm-roles/table-cell-confirm-role-add-rem/table-cell-confirm-role-add-rem.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-confirm-roles/table-cell-confirm-role-add-rem/table-cell-confirm-role-add-rem.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../../../../../../core/src/core/md.module'; import { @@ -11,7 +11,7 @@ describe('TableCellConfirmRoleAddRemComponent', () => { let component: TableCellConfirmRoleAddRemComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ MDAppModule, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/event-metadata/event-metadata.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/event-metadata/event-metadata.component.spec.ts index 75c5a96853..92d962d489 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/event-metadata/event-metadata.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/event-metadata/event-metadata.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; import { ValuesPipe } from '../../../../../../../../core/src/shared/pipes/values.pipe'; @@ -8,7 +8,7 @@ describe('EventMetadataComponent', () => { let component: EventMetadataComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EventMetadataComponent, ValuesPipe], imports: [CoreModule] diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-actee/table-cell-event-actee.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-actee/table-cell-event-actee.component.spec.ts index 00786ecced..4c9b4fcf71 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-actee/table-cell-event-actee.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-actee/table-cell-event-actee.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CopyToClipboardComponent, @@ -11,7 +11,7 @@ describe('TableCellEventActeeComponent', () => { let component: TableCellEventActeeComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellEventActeeComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-action/table-cell-event-action.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-action/table-cell-event-action.component.spec.ts index d77e6ba3d2..7b73b00de9 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-action/table-cell-event-action.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-action/table-cell-event-action.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; import { APIResource } from '../../../../../../../../store/src/types/api.types'; @@ -9,7 +9,7 @@ describe('TableCellEventActionComponent', () => { let component: TableCellEventActionComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellEventActionComponent, EventTabActorIconPipe], imports: [CoreModule] diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-detail/table-cell-event-detail.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-detail/table-cell-event-detail.component.spec.ts index 777f255527..b39ee3d0bc 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-detail/table-cell-event-detail.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-detail/table-cell-event-detail.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; import { ValuesPipe } from '../../../../../../../../core/src/shared/pipes/values.pipe'; @@ -11,7 +11,7 @@ describe('TableCellEventDetailComponent', () => { let component: TableCellEventDetailComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellEventDetailComponent, ValuesPipe, EventMetadataComponent], imports: [CoreModule] diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-timestamp/table-cell-event-timestamp.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-timestamp/table-cell-event-timestamp.component.spec.ts index 45d7641ada..e2c98a7628 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-timestamp/table-cell-event-timestamp.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-timestamp/table-cell-event-timestamp.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EntityInfo } from '../../../../../../../../store/src/types/api.types'; import { TableCellEventTimestampComponent } from './table-cell-event-timestamp.component'; @@ -7,7 +7,7 @@ describe('TableCellEventTimestampComponent', () => { let component: TableCellEventTimestampComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellEventTimestampComponent] }) diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-type/table-cell-event-type.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-type/table-cell-event-type.component.spec.ts index b13814fc00..442759f250 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-type/table-cell-event-type.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-events/table-cell-event-type/table-cell-event-type.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EntityInfo } from '../../../../../../../../store/src/types/api.types'; import { TableCellEventTypeComponent } from './table-cell-event-type.component'; @@ -7,7 +7,7 @@ describe('TableCellEventTypeComponent', () => { let component: TableCellEventTypeComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellEventTypeComponent] }) diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-feature-flags/table-cell-feature-flag-description/table-cell-feature-flag-description.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-feature-flags/table-cell-feature-flag-description/table-cell-feature-flag-description.component.spec.ts index bdabef62ff..66df913d63 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-feature-flags/table-cell-feature-flag-description/table-cell-feature-flag-description.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-feature-flags/table-cell-feature-flag-description/table-cell-feature-flag-description.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TableCellFeatureFlagDescriptionComponent } from './table-cell-feature-flag-description.component'; @@ -6,7 +6,7 @@ describe('TableCellFeatureFlagDescriptionComponent', () => { let component: TableCellFeatureFlagDescriptionComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellFeatureFlagDescriptionComponent ] }) diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-feature-flags/table-cell-feature-flag-state/table-cell-feature-flag-state.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-feature-flags/table-cell-feature-flag-state/table-cell-feature-flag-state.component.spec.ts index ecae57d3a2..35d35f30b5 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-feature-flags/table-cell-feature-flag-state/table-cell-feature-flag-state.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-feature-flags/table-cell-feature-flag-state/table-cell-feature-flag-state.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -12,7 +12,7 @@ describe('TableCellFeatureFlagStateComponent', () => { let component: TableCellFeatureFlagStateComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellFeatureFlagStateComponent, BooleanIndicatorComponent], imports: generateCfBaseTestModulesNoShared() diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-orgs/cf-org-card/cf-org-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-orgs/cf-org-card/cf-org-card.component.spec.ts index 52edb4889a..2baf6e9fa2 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-orgs/cf-org-card/cf-org-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-orgs/cf-org-card/cf-org-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { Store } from '@ngrx/store'; import { testSessionData } from '@stratosui/store/testing'; @@ -20,7 +20,7 @@ describe('CfOrgCardComponent', () => { let component: CfOrgCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CfOrgCardComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-quotas/table-cell-quota/table-cell-quota.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-quotas/table-cell-quota/table-cell-quota.component.spec.ts index b503d2760f..a95a32b0ce 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-quotas/table-cell-quota/table-cell-quota.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-quotas/table-cell-quota/table-cell-quota.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -10,7 +10,7 @@ describe('TableCellQuotaComponent', () => { let component: TableCellQuotaComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellQuotaComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-route-apps-attached/table-cell-route-apps-attached.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-route-apps-attached/table-cell-route-apps-attached.component.spec.ts index a63b3659e7..73cb2c42fc 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-route-apps-attached/table-cell-route-apps-attached.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-route-apps-attached/table-cell-route-apps-attached.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AppChipsComponent } from '../../../../../../../../core/src/shared/components/chips/chips.component'; import { @@ -12,7 +12,7 @@ describe('TableCellRouteAppsAttachedComponent', () => { let component: TableCellRouteAppsAttachedComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellRouteAppsAttachedComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-route/table-cell-route.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-route/table-cell-route.component.spec.ts index 37094eb73b..e7bef1ecfb 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-route/table-cell-route.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-route/table-cell-route.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { generateCfStoreModules } from '../../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; @@ -10,7 +10,7 @@ describe('TableCellRouteComponent', () => { let component: TableCellRouteComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellRouteComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-tcproute/table-cell-tcproute.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-tcproute/table-cell-tcproute.component.spec.ts index a656e24739..8061ba63a4 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-tcproute/table-cell-tcproute.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-routes/table-cell-tcproute/table-cell-tcproute.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; import { @@ -13,7 +13,7 @@ describe('TableCellTCPRouteComponent', () => { let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellTCPRouteComponent, BooleanIndicatorComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-security-groups/cf-security-groups-card/cf-security-groups-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-security-groups/cf-security-groups-card/cf-security-groups-card.component.spec.ts index 78c76495df..27a3262de1 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-security-groups/cf-security-groups-card/cf-security-groups-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-security-groups/cf-security-groups-card/cf-security-groups-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -16,7 +16,7 @@ describe('CfSecurityGroupsCardComponent', () => { let component: CfSecurityGroupsCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CfSecurityGroupsCardComponent, MetadataCardTestComponents, BooleanIndicatorComponent, AppChipsComponent], imports: generateCfBaseTestModulesNoShared(), diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-security-groups/cf-security-groups-card/cf-security-groups-card.component.theme.scss b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-security-groups/cf-security-groups-card/cf-security-groups-card.component.theme.scss index fba1b1e3c0..69f39f9a32 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-security-groups/cf-security-groups-card/cf-security-groups-card.component.theme.scss +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-security-groups/cf-security-groups-card/cf-security-groups-card.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin cf-security-group-theme($theme) { .app-chip.mat-chip.mat-primary.tcp-class { background-color: mat-color($mat-indigo, 200); // color: mat-color($mat-grey, 50); diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/cf-service-card/cf-service-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/cf-service-card/cf-service-card.component.spec.ts index 33a16be1da..1683b05c96 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/cf-service-card/cf-service-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/cf-service-card/cf-service-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -26,7 +26,7 @@ describe('CfServiceCardComponent', () => { let component: CfServiceCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CfServiceCardComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-active/table-cell-service-active.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-active/table-cell-service-active.component.spec.ts index f54c3e16f0..7974c845d3 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-active/table-cell-service-active.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-active/table-cell-service-active.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; import { @@ -10,7 +10,7 @@ describe('TableCellServiceActiveComponent', () => { let component: TableCellServiceActiveComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellServiceActiveComponent, BooleanIndicatorComponent], imports: [CoreModule] diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-bindable/table-cell-service-bindable.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-bindable/table-cell-service-bindable.component.spec.ts index 01732fc56b..9445c6a24d 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-bindable/table-cell-service-bindable.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-bindable/table-cell-service-bindable.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -13,7 +13,7 @@ describe('TableCellServiceBindableComponent', () => { let component: TableCellServiceBindableComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellServiceBindableComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-broker/table-cell-service-broker.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-broker/table-cell-service-broker.component.spec.ts index d7569ed286..b86435de1a 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-broker/table-cell-service-broker.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-broker/table-cell-service-broker.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TableCellServiceBrokerComponent } from './table-cell-service-broker.component'; @@ -6,7 +6,7 @@ describe('TableCellServiceBrokerComponent', () => { let component: TableCellServiceBrokerComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellServiceBrokerComponent] }) diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-cf-breadcrumbs/table-cell-service-cf-breadcrumbs.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-cf-breadcrumbs/table-cell-service-cf-breadcrumbs.component.spec.ts index 1d859eeb25..02841eba0e 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-cf-breadcrumbs/table-cell-service-cf-breadcrumbs.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-cf-breadcrumbs/table-cell-service-cf-breadcrumbs.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModulesNoShared, @@ -11,7 +11,7 @@ describe('TableCellServiceCfBreadcrumbsComponent', () => { let component: TableCellServiceCfBreadcrumbsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellServiceCfBreadcrumbsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-provider/table-cell-service-provider.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-provider/table-cell-service-provider.component.spec.ts index fb29b61089..685c102adb 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-provider/table-cell-service-provider.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-provider/table-cell-service-provider.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TableCellServiceProviderComponent } from './table-cell-service-provider.component'; @@ -6,7 +6,7 @@ describe('TableCellServiceProviderComponent', () => { let component: TableCellServiceProviderComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellServiceProviderComponent] }) diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-references/table-cell-service-references.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-references/table-cell-service-references.component.spec.ts index dc8ddbb8be..000482fc47 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-references/table-cell-service-references.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-references/table-cell-service-references.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModulesNoShared, @@ -10,7 +10,7 @@ describe('TableCellServiceReferencesComponent', () => { let component: TableCellServiceReferencesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellServiceReferencesComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-tags/table-cell-service-tags.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-tags/table-cell-service-tags.component.spec.ts index 9449b6b3f5..6ef8b8e456 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-tags/table-cell-service-tags.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-services/table-cell-service-tags/table-cell-service-tags.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AppChipsComponent } from '../../../../../../../../core/src/shared/components/chips/chips.component'; import { @@ -11,7 +11,7 @@ describe('TableCellServiceTagsComponent', () => { let component: TableCellServiceTagsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellServiceTagsComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-instance-apps-attached/table-cell-service-instance-apps-attached.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-instance-apps-attached/table-cell-service-instance-apps-attached.component.spec.ts index 57ab449c0e..c9340a6495 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-instance-apps-attached/table-cell-service-instance-apps-attached.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-instance-apps-attached/table-cell-service-instance-apps-attached.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AppChipsComponent } from '../../../../../../../../core/src/shared/components/chips/chips.component'; import { EntityServiceFactory } from '../../../../../../../../store/src/entity-service-factory.service'; @@ -12,7 +12,7 @@ describe('TableCellServiceInstanceAppsAttachedComponent', () => { let component: TableCellServiceInstanceAppsAttachedComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellServiceInstanceAppsAttachedComponent, @@ -59,7 +59,7 @@ describe('TableCellServiceInstanceAppsAttachedComponent', () => { fixture.detectChanges(); }); - it('should create', async(() => { + it('should create', waitForAsync(() => { expect(component).toBeTruthy(); })); }); diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-instance-tags/table-cell-service-instance-tags.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-instance-tags/table-cell-service-instance-tags.component.spec.ts index e171b08058..5d21b0d712 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-instance-tags/table-cell-service-instance-tags.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-instance-tags/table-cell-service-instance-tags.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AppChipsComponent } from '../../../../../../../../core/src/shared/components/chips/chips.component'; import { EntityMonitorFactory } from '../../../../../../../../store/src/monitors/entity-monitor.factory.service'; @@ -11,7 +11,7 @@ describe('TableCellServiceInstanceTagsComponent', () => { let component: TableCellServiceInstanceTagsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellServiceInstanceTagsComponent, AppChipsComponent], imports: generateCfBaseTestModulesNoShared(), @@ -21,7 +21,7 @@ describe('TableCellServiceInstanceTagsComponent', () => { .compileComponents(); })); - beforeEach(async(() => { + beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(TableCellServiceInstanceTagsComponent); component = fixture.componentInstance; component.row = { @@ -53,7 +53,7 @@ describe('TableCellServiceInstanceTagsComponent', () => { fixture.detectChanges(); })); - it('should create', async(() => { + it('should create', waitForAsync(() => { expect(component).toBeTruthy(); })); }); diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-last-op/table-cell-service-last-op.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-last-op/table-cell-service-last-op.component.spec.ts index 00239ea2a1..ebbf0dec3f 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-last-op/table-cell-service-last-op.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service-last-op/table-cell-service-last-op.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -12,7 +12,7 @@ describe('TableCellServiceLastOpComponent', () => { let component: TableCellServiceLastOpComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellServiceLastOpComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service/table-cell-service.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service/table-cell-service.component.spec.ts index f0977104c0..ce9f446a86 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service/table-cell-service.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-service/table-cell-service.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { LongRunningCfOperationsService, @@ -17,7 +17,7 @@ describe('TableCellServiceComponent', () => { let component: TableCellServiceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellServiceComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-space-name/table-cell-space-name.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-space-name/table-cell-space-name.component.spec.ts index 420efe6165..359055ce9b 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-space-name/table-cell-space-name.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces-service-instances/table-cell-space-name/table-cell-space-name.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModulesNoShared, @@ -9,7 +9,7 @@ describe('TableCellSpaceNameComponent', () => { let component: TableCellSpaceNameComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellSpaceNameComponent], imports: generateCfBaseTestModulesNoShared() diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces/cf-space-card/cf-space-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces/cf-space-card/cf-space-card.component.spec.ts index 6f137e7428..94909b2057 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces/cf-space-card/cf-space-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-spaces/cf-space-card/cf-space-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { Store } from '@ngrx/store'; import { testSessionData } from '@stratosui/store/testing'; @@ -24,7 +24,7 @@ describe('CfSpaceCardComponent', () => { let component: CfSpaceCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CfSpaceCardComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-stacks/cf-stacks-card/cf-stacks-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-stacks/cf-stacks-card/cf-stacks-card.component.spec.ts index 5fce81a101..6d4671ae34 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-stacks/cf-stacks-card/cf-stacks-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-stacks/cf-stacks-card/cf-stacks-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EntityMonitorFactory } from '../../../../../../../../store/src/monitors/entity-monitor.factory.service'; import { MetadataCardTestComponents } from '../../../../../../../../core/test-framework/core-test.helper'; @@ -11,7 +11,7 @@ describe('CfStacksCardComponent', () => { let component: CfStacksCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CfStacksCardComponent, MetadataCardTestComponents], imports: generateCfBaseTestModulesNoShared(), diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users-org-space-roles/table-cell-org-space-role/table-cell-org-space-role.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users-org-space-roles/table-cell-org-space-role/table-cell-org-space-role.component.spec.ts index b6130d172c..10e9a90bb3 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users-org-space-roles/table-cell-org-space-role/table-cell-org-space-role.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users-org-space-roles/table-cell-org-space-role/table-cell-org-space-role.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClientModule } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -18,7 +18,7 @@ describe('TableCellSpaceRoleComponent', () => { let component: TableCellRoleOrgSpaceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users-org-space-roles/table-cell-select-org/table-cell-select-org.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users-org-space-roles/table-cell-select-org/table-cell-select-org.component.spec.ts index 6990244c14..ad138eaec5 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users-org-space-roles/table-cell-select-org/table-cell-select-org.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users-org-space-roles/table-cell-select-org/table-cell-select-org.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClientModule } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -16,7 +16,7 @@ describe('TableCellSelectOrgComponent', () => { let component: TableCellSelectOrgComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...generateCfStoreModules(), diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users/cf-org-permission-cell/cf-org-permission-cell.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users/cf-org-permission-cell/cf-org-permission-cell.component.spec.ts index c476e9ec73..a5a93ccdd4 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users/cf-org-permission-cell/cf-org-permission-cell.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users/cf-org-permission-cell/cf-org-permission-cell.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { SharedModule } from '../../../../../../../../core/src/shared/shared.module'; import { @@ -12,7 +12,7 @@ describe('CfUserPermissionCellComponent', () => { let component: CfOrgPermissionCellComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CfOrgPermissionCellComponent diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users/cf-space-permission-cell/cf-space-permission-cell.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users/cf-space-permission-cell/cf-space-permission-cell.component.spec.ts index 9f13a8b61f..5508e9bc31 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users/cf-space-permission-cell/cf-space-permission-cell.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/cf-users/cf-space-permission-cell/cf-space-permission-cell.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules, @@ -10,7 +10,7 @@ describe('CfSpacePermissionCellComponent', () => { let component: CfSpacePermissionCellComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CfSpacePermissionCellComponent], imports: generateCfBaseTestModules(), diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/service-plans-list-config.service.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/service-plans-list-config.service.spec.ts index b715869cc3..3fc0af6bba 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/service-plans-list-config.service.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/service-plans-list-config.service.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, inject, TestBed } from '@angular/core/testing'; +import { inject, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModules } from '../../../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ServicesService } from '../../../../../features/service-catalog/services.service'; @@ -18,7 +18,7 @@ describe('ServicePlansListConfigService', () => { }); }); - it('should be created', async(inject([ServicePlansListConfigService], (service: ServicePlansListConfigService) => { + it('should be created', waitForAsync(inject([ServicePlansListConfigService], (service: ServicePlansListConfigService) => { expect(service).toBeTruthy(); }))); }); diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-extras/table-cell-service-plan-extras.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-extras/table-cell-service-plan-extras.component.spec.ts index 6164a33490..760dd8ebe8 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-extras/table-cell-service-plan-extras.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-extras/table-cell-service-plan-extras.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StoreModule } from '@ngrx/store'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -11,7 +11,7 @@ describe('TableCellAServicePlanExtrasComponent', () => { let component: TableCellAServicePlanExtrasComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellAServicePlanExtrasComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-price/table-cell-service-plan-price.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-price/table-cell-service-plan-price.component.spec.ts index 7186abba8f..5cbbe7cf65 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-price/table-cell-service-plan-price.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-price/table-cell-service-plan-price.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StoreModule } from '@ngrx/store'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -10,7 +10,7 @@ describe('TableCellAServicePlanPriceComponent', () => { let component: TableCellAServicePlanPriceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellAServicePlanPriceComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-public/table-cell-service-plan-public.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-public/table-cell-service-plan-public.component.spec.ts index c1af664953..eee9f28091 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-public/table-cell-service-plan-public.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/service-plans/table-cell-service-plan-public/table-cell-service-plan-public.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StoreModule } from '@ngrx/store'; import { CoreModule } from '../../../../../../../../core/src/core/core.module'; @@ -13,7 +13,7 @@ describe('TableCellAServicePlanPublicComponent', () => { let component: TableCellAServicePlanPublicComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellAServicePlanPublicComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/services-wall/service-instance-card/service-instance-card.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/services-wall/service-instance-card/service-instance-card.component.spec.ts index 2fbc6522ef..646586a033 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/services-wall/service-instance-card/service-instance-card.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/list/list-types/services-wall/service-instance-card/service-instance-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EntityServiceFactory } from '../../../../../../../../store/src/entity-service-factory.service'; import { EntityMonitorFactory } from '../../../../../../../../store/src/monitors/entity-monitor.factory.service'; @@ -20,7 +20,7 @@ describe('ServiceInstanceCardComponent', () => { let component: ServiceInstanceCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ServiceInstanceCardComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/running-instances/running-instances.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/running-instances/running-instances.component.spec.ts index 86bfcfb122..34ccc49102 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/running-instances/running-instances.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/running-instances/running-instances.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../core/src/core/core.module'; import { PaginationMonitorFactory } from '../../../../../store/src/monitors/pagination-monitor.factory'; @@ -9,7 +9,7 @@ describe('RunningInstancesComponent', () => { let component: RunningInstancesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [RunningInstancesComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/schema-form/schema-form.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/schema-form/schema-form.component.spec.ts index 047a72ebe7..2e7deb8295 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/schema-form/schema-form.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/schema-form/schema-form.component.spec.ts @@ -1,5 +1,5 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { MaterialDesignFrameworkModule } from '@cfstratos/ajsf-material'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { MaterialDesignFrameworkModule } from '@ajsf/material'; import { generateCfBaseTestModulesNoShared } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { SchemaFormComponent } from './schema-form.component'; @@ -8,7 +8,7 @@ describe('SchemaFormComponent', () => { let component: SchemaFormComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ SchemaFormComponent diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/schema-form/schema-form.component.ts b/src/frontend/packages/cloud-foundry/src/shared/components/schema-form/schema-form.component.ts index 947468106e..626b4d6eea 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/schema-form/schema-form.component.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/schema-form/schema-form.component.ts @@ -1,7 +1,7 @@ import { AfterContentInit, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; -import { FormControl, FormGroup } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; -import { JsonPointer } from '@cfstratos/ajsf-core'; +import { JsonPointer } from '@ajsf/core'; import { BehaviorSubject, Subscription } from 'rxjs'; import { delay } from 'rxjs/operators'; @@ -65,7 +65,7 @@ export class SchemaFormComponent implements OnInit, OnDestroy, AfterContentInit cleanSchema: object; jsonData: object; - jsonForm: FormGroup; + jsonForm: UntypedFormGroup; formData: object = {}; formInitialData: object; @@ -75,8 +75,8 @@ export class SchemaFormComponent implements OnInit, OnDestroy, AfterContentInit subs: Subscription[] = []; ngOnInit() { - this.jsonForm = new FormGroup({ - json: new FormControl('', isValidJsonValidator()), + this.jsonForm = new UntypedFormGroup({ + json: new UntypedFormControl('', isValidJsonValidator()), }); } diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/select-service/select-service.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/select-service/select-service.component.spec.ts index 9f62582f19..22b148269d 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/select-service/select-service.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/select-service/select-service.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ApplicationStateIconComponent, @@ -59,7 +59,7 @@ describe('SelectServiceComponent', () => { let component: SelectServiceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ SelectServiceComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/select-service/select-service.component.ts b/src/frontend/packages/cloud-foundry/src/shared/components/select-service/select-service.component.ts index 501aba54d3..707f4b4212 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/select-service/select-service.component.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/select-service/select-service.component.ts @@ -1,5 +1,5 @@ import { AfterContentInit, Component, OnDestroy } from '@angular/core'; -import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { Store } from '@ngrx/store'; import { BehaviorSubject, combineLatest, Observable, of as observableOf, Subscription } from 'rxjs'; import { filter, map, switchMap, tap } from 'rxjs/operators'; @@ -32,7 +32,7 @@ export class SelectServiceComponent implements OnDestroy, AfterContentInit { cfGuid: string; serviceSubscription: Subscription; services$: Observable[]>; - stepperForm: FormGroup; + stepperForm: UntypedFormGroup; validate: BehaviorSubject = new BehaviorSubject(false); isFetching$: Observable; selectedService$: Observable>; @@ -43,8 +43,8 @@ export class SelectServiceComponent implements OnDestroy, AfterContentInit { private csiGuidService: CsiGuidsService, private servicesWallService: ServicesWallService ) { - this.stepperForm = new FormGroup({ - service: new FormControl('', [Validators.required as any]), + this.stepperForm = new UntypedFormGroup({ + service: new UntypedFormControl('', [Validators.required as any]), }); const cfSpaceGuid$ = combineLatest( diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/service-icon/service-icon.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/service-icon/service-icon.component.spec.ts index 3c2353cfa0..ce9cc3994d 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/service-icon/service-icon.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/service-icon/service-icon.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { generateCfBaseTestModulesNoShared } from '../../../../test-framework/cloud-foundry-endpoint-service.helper'; import { ServiceIconComponent } from './service-icon.component'; @@ -7,7 +7,7 @@ describe('ServiceIconComponent', () => { let component: ServiceIconComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ServiceIconComponent], imports: generateCfBaseTestModulesNoShared() diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/service-instance-last-op/service-instance-last-op.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/service-instance-last-op/service-instance-last-op.component.spec.ts index 9a29b6dc57..00f5aef9bb 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/service-instance-last-op/service-instance-last-op.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/service-instance-last-op/service-instance-last-op.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BooleanIndicatorComponent, @@ -10,7 +10,7 @@ describe('ServiceInstanceLastOpComponent', () => { let component: ServiceInstanceLastOpComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ServiceInstanceLastOpComponent, diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/service-plan-price/service-plan-price.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/service-plan-price/service-plan-price.component.spec.ts index 090c8048dd..b87201f874 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/service-plan-price/service-plan-price.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/service-plan-price/service-plan-price.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -9,7 +9,7 @@ describe('ServicePlanPriceComponent', () => { let component: ServicePlanPriceComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ServicePlanPriceComponent], imports: [ diff --git a/src/frontend/packages/cloud-foundry/src/shared/components/service-plan-public/service-plan-public.component.spec.ts b/src/frontend/packages/cloud-foundry/src/shared/components/service-plan-public/service-plan-public.component.spec.ts index d7788eb41e..47cdaa9075 100644 --- a/src/frontend/packages/cloud-foundry/src/shared/components/service-plan-public/service-plan-public.component.spec.ts +++ b/src/frontend/packages/cloud-foundry/src/shared/components/service-plan-public/service-plan-public.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { of } from 'rxjs'; import { EntityService } from '../../../../../store/src/entity-service'; @@ -22,7 +22,7 @@ describe('ServicePlanPublicComponent', () => { let element: HTMLElement; let servicesService: ServicesServiceMock; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ServicePlanPublicComponent], imports: generateCfBaseTestModulesNoShared(), diff --git a/src/frontend/packages/cloud-foundry/src/store/effects/app-variables.effects.ts b/src/frontend/packages/cloud-foundry/src/store/effects/app-variables.effects.ts index f47d0b266e..c61d1d5a88 100644 --- a/src/frontend/packages/cloud-foundry/src/store/effects/app-variables.effects.ts +++ b/src/frontend/packages/cloud-foundry/src/store/effects/app-variables.effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { map } from 'rxjs/operators'; import { AppMetadataTypes } from '../../actions/app-metadata.actions'; @@ -14,7 +14,7 @@ export class AppVariablesEffect { private actions$: Actions, ) { } - @Effect() apiRequestStart$ = this.actions$.pipe( + apiRequestStart$ = createEffect(() => this.actions$.pipe( ofType(AppVariables.UPDATE), map((apiAction: AppVariablesUpdate) => cfEntityCatalog.application.actions.update( apiAction.appGuid, @@ -23,5 +23,5 @@ export class AppVariablesEffect { null, [AppMetadataTypes.ENV_VARS] )) - ); + )); } diff --git a/src/frontend/packages/cloud-foundry/src/store/effects/app.effects.ts b/src/frontend/packages/cloud-foundry/src/store/effects/app.effects.ts index e609848843..fd16a0a26e 100644 --- a/src/frontend/packages/cloud-foundry/src/store/effects/app.effects.ts +++ b/src/frontend/packages/cloud-foundry/src/store/effects/app.effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { first, map } from 'rxjs/operators'; @@ -21,14 +21,14 @@ export class AppEffects { private store: Store, ) { } - @Effect({ dispatch: false }) updateSummary$ = this.actions$.pipe( + updateSummary$ = createEffect(() => this.actions$.pipe( ofType(ASSIGN_ROUTE_SUCCESS), map(action => { cfEntityCatalog.appSummary.api.get(action.apiAction.guid, action.apiAction.endpointGuid); }), - ); + ), { dispatch: false }); - @Effect({ dispatch: false }) clearCellMetrics$ = this.actions$.pipe( + clearCellMetrics$ = createEffect(() => this.actions$.pipe( ofType(CF_APP_UPDATE_SUCCESS), map(action => { // User's can scale down instances and previous instance data is kept in store, when the user scales up again this stale data can @@ -45,5 +45,5 @@ export class AppEffects { }); } }), - ); + ), { dispatch: false }); } diff --git a/src/frontend/packages/cloud-foundry/src/store/effects/cloud-foundry.effects.ts b/src/frontend/packages/cloud-foundry/src/store/effects/cloud-foundry.effects.ts index 7f86644ba1..4b65b181df 100644 --- a/src/frontend/packages/cloud-foundry/src/store/effects/cloud-foundry.effects.ts +++ b/src/frontend/packages/cloud-foundry/src/store/effects/cloud-foundry.effects.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, flatMap, mergeMap } from 'rxjs/operators'; @@ -24,8 +24,8 @@ export class CloudFoundryEffects { private store: Store ) { } - @Effect() - fetchInfo$ = this.actions$.pipe( + + fetchInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_CF_INFO), flatMap(action => { const actionType = 'fetch'; @@ -66,5 +66,5 @@ export class CloudFoundryEffects { ]) ); }) - ); + )); } diff --git a/src/frontend/packages/cloud-foundry/src/store/effects/create-app-effects.ts b/src/frontend/packages/cloud-foundry/src/store/effects/create-app-effects.ts index 9748f0d000..e4a85645f3 100644 --- a/src/frontend/packages/cloud-foundry/src/store/effects/create-app-effects.ts +++ b/src/frontend/packages/cloud-foundry/src/store/effects/create-app-effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { of as observableOf, throwError as observableThrowError } from 'rxjs'; import { catchError, map, switchMap, withLatestFrom } from 'rxjs/operators'; @@ -28,7 +28,7 @@ export class CreateAppPageEffects { proxyAPIVersion: string; cfAPIVersion: string; - @Effect() CheckAppNameIsFree$ = this.actions$.pipe( + CheckAppNameIsFree$ = createEffect(() => this.actions$.pipe( ofType(CHECK_NAME), withLatestFrom(this.store.select(selectNewAppCFDetails)), switchMap(([action, cfDetails]: [any, NewAppCFDetails]) => { @@ -49,7 +49,7 @@ export class CreateAppPageEffects { catchError(err => { return observableOf(new AppNameTaken(action.name)); })); - })); + }))); } export const selectNewAppState = (state: CFAppState): CreateNewApplicationState => state.createApplication; diff --git a/src/frontend/packages/cloud-foundry/src/store/effects/deploy-app.effects.ts b/src/frontend/packages/cloud-foundry/src/store/effects/deploy-app.effects.ts index 7efe080d09..cd31bb0f98 100644 --- a/src/frontend/packages/cloud-foundry/src/store/effects/deploy-app.effects.ts +++ b/src/frontend/packages/cloud-foundry/src/store/effects/deploy-app.effects.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { GitSCMService } from '@stratosui/git'; import { of as observableOf } from 'rxjs'; @@ -26,8 +26,8 @@ export class DeployAppEffects { private gitSCMService: GitSCMService ) { } - @Effect() - checkAppExists$ = this.actions$.pipe( + + checkAppExists$ = createEffect(() => this.actions$.pipe( ofType(CHECK_PROJECT_EXISTS), withLatestFrom(this.store.select(selectDeployAppState)), filter(([, state]) => { @@ -42,6 +42,6 @@ export class DeployAppEffects { )) ); }) - ); + )); } diff --git a/src/frontend/packages/cloud-foundry/src/store/effects/request.effects.ts b/src/frontend/packages/cloud-foundry/src/store/effects/request.effects.ts index ed653a0ddd..22bca7683e 100644 --- a/src/frontend/packages/cloud-foundry/src/store/effects/request.effects.ts +++ b/src/frontend/packages/cloud-foundry/src/store/effects/request.effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, first, map, mergeMap, withLatestFrom } from 'rxjs/operators'; @@ -41,7 +41,7 @@ export class CfValidateEffects { * 5) alternatively... if we've reached here for the same space but from an api request for that space.. ensure that the routes have not * been dropped because their count is over 50 */ - @Effect() validateEntities$ = this.actions$.pipe( + validateEntities$ = createEffect(() => this.actions$.pipe( ofType(EntitiesPipelineActionTypes.VALIDATE), mergeMap(action => { const validateAction: CfValidateEntitiesStart = action; @@ -92,9 +92,9 @@ export class CfValidateEffects { return []; })); }) - ); + )); - @Effect() completeEntities$ = this.actions$.pipe( + completeEntities$ = createEffect(() => this.actions$.pipe( ofType(EntitiesPipelineActionTypes.COMPLETE), mergeMap(action => { const completeAction: CfValidateEntitiesComplete = action; @@ -103,7 +103,7 @@ export class CfValidateEffects { this.update(completeAction.apiAction, false, null); } return actions; - })); + }))); update(apiAction, busy: boolean, error: string) { diff --git a/src/frontend/packages/cloud-foundry/src/store/effects/route.effects.ts b/src/frontend/packages/cloud-foundry/src/store/effects/route.effects.ts index 2d7d2555cb..0d23944628 100644 --- a/src/frontend/packages/cloud-foundry/src/store/effects/route.effects.ts +++ b/src/frontend/packages/cloud-foundry/src/store/effects/route.effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { map } from 'rxjs/operators'; @@ -16,8 +16,8 @@ export class RouteEffect { private store: Store ) { } - @Effect({ dispatch: false }) - unmapEffect$ = this.actions$.pipe( + + unmapEffect$ = createEffect(() => this.actions$.pipe( ofType(RouteEvents.UNMAP_ROUTE_SUCCESS), map((action: APISuccessOrFailedAction) => { const unmapAction: UnmapRoute = action.apiAction as UnmapRoute; @@ -26,5 +26,5 @@ export class RouteEffect { this.store.dispatch(new ClearPaginationOfEntity(action.apiAction, action.apiAction.guid, unmapAction.clearPaginationKey)); } }) - ); + ), { dispatch: false }); } diff --git a/src/frontend/packages/cloud-foundry/src/store/effects/service-instance.effects.ts b/src/frontend/packages/cloud-foundry/src/store/effects/service-instance.effects.ts index b4f6d50fc0..385f1a20e1 100644 --- a/src/frontend/packages/cloud-foundry/src/store/effects/service-instance.effects.ts +++ b/src/frontend/packages/cloud-foundry/src/store/effects/service-instance.effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { mergeMap } from 'rxjs/operators'; import { APISuccessOrFailedAction } from '../../../../store/src/types/request.types'; @@ -16,7 +16,7 @@ export class ServiceInstanceEffects { private longRunningOpService: LongRunningCfOperationsService ) { } - @Effect() updateSummary$ = this.actions$.pipe( + updateSummary$ = createEffect(() => this.actions$.pipe( ofType(DELETE_SERVICE_INSTANCE_ACTIONS[2]), mergeMap(action => { if (this.longRunningOpService.isLongRunning({ message: action.response })) { @@ -24,5 +24,5 @@ export class ServiceInstanceEffects { } return []; }), - ); + )); } diff --git a/src/frontend/packages/cloud-foundry/src/store/effects/update-app-effects.ts b/src/frontend/packages/cloud-foundry/src/store/effects/update-app-effects.ts index 62fccdcf8e..fefc174075 100644 --- a/src/frontend/packages/cloud-foundry/src/store/effects/update-app-effects.ts +++ b/src/frontend/packages/cloud-foundry/src/store/effects/update-app-effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { mergeMap } from 'rxjs/operators'; import { WrapperRequestActionSuccess } from '../../../../store/src/types/request.types'; @@ -15,7 +15,7 @@ export class UpdateAppEffects { ) { } - @Effect() UpdateAppInStore$ = this.actions$.pipe( + UpdateAppInStore$ = createEffect(() => this.actions$.pipe( ofType(CF_APP_UPDATE_SUCCESS), mergeMap((action: WrapperRequestActionSuccess) => { const updateAction = action.apiAction as UpdateExistingApplication; @@ -48,5 +48,5 @@ export class UpdateAppEffects { }); return actions; - })); + }))); } diff --git a/src/frontend/packages/cloud-foundry/src/store/effects/users-roles.effects.ts b/src/frontend/packages/cloud-foundry/src/store/effects/users-roles.effects.ts index 789eeb837e..0cf9fcb267 100644 --- a/src/frontend/packages/cloud-foundry/src/store/effects/users-roles.effects.ts +++ b/src/frontend/packages/cloud-foundry/src/store/effects/users-roles.effects.ts @@ -27,7 +27,6 @@ import { selectCfUsersRoles } from '../selectors/cf-users-roles.selector'; import { OrgUserRoleNames } from '../types/cf-user.types'; import { CfRoleChange, UsersRolesState } from '../types/users-roles.types'; - @Injectable() export class UsersRolesEffects { diff --git a/src/frontend/packages/cloud-foundry/src/test.ts b/src/frontend/packages/cloud-foundry/src/test.ts index f205020844..db08d2e9fd 100644 --- a/src/frontend/packages/cloud-foundry/src/test.ts +++ b/src/frontend/packages/cloud-foundry/src/test.ts @@ -1,7 +1,7 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files import 'core-js/es/reflect'; -import 'zone.js/dist/zone'; -import 'zone.js/dist/zone-testing'; +import 'zone.js'; +import 'zone.js/testing'; import { APP_BASE_HREF } from '@angular/common'; import { getTestBed } from '@angular/core/testing'; @@ -14,7 +14,9 @@ declare const require: any; const testBed = getTestBed(); testBed.initTestEnvironment( BrowserDynamicTestingModule, - platformBrowserDynamicTesting() + platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false } +} ); beforeEach(() => { diff --git a/src/frontend/packages/cloud-foundry/tsconfig.lib.json b/src/frontend/packages/cloud-foundry/tsconfig.lib.json index 1dc99824ea..1ace645d3b 100644 --- a/src/frontend/packages/cloud-foundry/tsconfig.lib.json +++ b/src/frontend/packages/cloud-foundry/tsconfig.lib.json @@ -1,6 +1,8 @@ { "extends": "../../../tsconfig.lib.json", "compilerOptions": { + "declaration": true, + "declarationMap": true, "outDir": "../../../../out-tsc" }, "exclude": ["./src/test.ts", "**/*.spec.ts"] diff --git a/src/frontend/packages/cloud-foundry/tsconfig.lib.prod.json b/src/frontend/packages/cloud-foundry/tsconfig.lib.prod.json index b1d501abbc..a83f1ff433 100644 --- a/src/frontend/packages/cloud-foundry/tsconfig.lib.prod.json +++ b/src/frontend/packages/cloud-foundry/tsconfig.lib.prod.json @@ -1,6 +1,10 @@ { "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declaration": false, + "declarationMap": false + }, "angularCompilerOptions": { - "enableIvy": false + "compilationMode": "partial" } } \ No newline at end of file diff --git a/src/frontend/packages/core/package.json b/src/frontend/packages/core/package.json index 63f4668511..e86f4be25d 100644 --- a/src/frontend/packages/core/package.json +++ b/src/frontend/packages/core/package.json @@ -1,5 +1,53 @@ { "name": "@stratosui/core", + "description": "Stratos Core", + "license": "Apache-2.0", + "repository": "https://github.com/cloudfoundry/stratos", + "dependencies": { + "@angular/animations": "^9.1.6", + "@angular/cdk": "^9.2.3", + "@angular/common": "^9.1.6", + "@angular/compiler": "^9.1.6", + "@angular/core": "^9.1.6", + "@angular/flex-layout": "^9.0.0-beta.29", + "@angular/forms": "^9.1.6", + "@angular/material": "^9.2.3", + "@angular/material-moment-adapter": "^9.2.3", + "@angular/platform-browser": "^9.1.6", + "@angular/platform-browser-dynamic": "^9.1.6", + "@angular/platform-server": "^9.1.6", + "@angular/router": "^9.1.6", + "@ngrx/effects": "^9.1.2", + "@ngrx/router-store": "^9.1.2", + "@ngrx/store": "^9.1.2", + "@ngrx/store-devtools": "^9.1.2", + "@swimlane/ngx-charts": "^13.0.3", + "@types/moment-timezone": "^0.5.13", + "@types/marked": "^0.7.4", + "angular2-virtual-scroll": "^0.4.16", + "core-js": "^3.6.5", + "immer": "^6.0.3", + "lodash-es": "^4.17.14", + "mappy-breakpoints": "^0.2.3", + "marked": "^0.8.2", + "intersect": "^1.0.1", + "moment": "^2.24.0", + "moment-timezone": "^0.5.28", + "ngrx-store-localstorage": "9.0.0", + "ngx-moment": "^3.5.0", + "normalizr": "^3.6.0", + "reselect": "^4.0.0", + "rxjs": "^6.5.5", + "rxjs-spy": "^7.0.2", + "rxjs-websockets": "~8.0.1", + "@cfstratos/ajsf-material": "^0.1.5", + "ts-md5": "^1.2.7", + "tslib": "^1.10.0", + "web-animations-js": "^2.3.2", + "xterm": "^4.5.0", + "xterm-addon-fit": "^0.3.0", + "zone.js": "~0.10.2" + }, "version": "0.0.1", "stratos": { "assets": { diff --git a/src/frontend/packages/core/sass/theme.scss b/src/frontend/packages/core/sass/theme.scss index 87818dfd16..98f33478b5 100644 --- a/src/frontend/packages/core/sass/theme.scss +++ b/src/frontend/packages/core/sass/theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @import './all-theme'; // Import the theme diff --git a/src/frontend/packages/core/src/app.component.spec.ts b/src/frontend/packages/core/src/app.component.spec.ts index 4b08b3b607..778aff736a 100644 --- a/src/frontend/packages/core/src/app.component.spec.ts +++ b/src/frontend/packages/core/src/app.component.spec.ts @@ -1,4 +1,4 @@ -import { async, TestBed } from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -10,7 +10,7 @@ import { SharedModule } from './shared/shared.module'; describe('AppComponent', () => { - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AppComponent @@ -28,7 +28,7 @@ describe('AppComponent', () => { }).compileComponents(); })); - it('should create the app', async(() => { + it('should create the app', waitForAsync(() => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.componentInstance; expect(app).toBeTruthy(); diff --git a/src/frontend/packages/core/src/app.component.ts b/src/frontend/packages/core/src/app.component.ts index 7da78ac04c..f475f283ba 100644 --- a/src/frontend/packages/core/src/app.component.ts +++ b/src/frontend/packages/core/src/app.component.ts @@ -1,11 +1,10 @@ import { DOCUMENT } from '@angular/common'; import { AfterContentInit, Component, HostBinding, Inject, OnDestroy, OnInit } from '@angular/core'; import { Store } from '@ngrx/store'; +import { AuthOnlyAppState, ThemeService } from '@stratosui/store'; import { Observable } from 'rxjs'; import { create } from 'rxjs-spy'; -import { AuthOnlyAppState } from '../../store/src/app-state'; -import { ThemeService } from '../../store/src/theme.service'; import { environment } from './environments/environment'; import { LoggedInService } from './logged-in.service'; diff --git a/src/frontend/packages/core/src/app.module.ts b/src/frontend/packages/core/src/app.module.ts index 2697e09541..77e32404aa 100644 --- a/src/frontend/packages/core/src/app.module.ts +++ b/src/frontend/packages/core/src/app.module.ts @@ -2,28 +2,34 @@ import { Injectable, NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { Params, RouteReuseStrategy, RouterStateSnapshot } from '@angular/router'; -import { DefaultRouterStateSerializer, RouterStateSerializer, StoreRouterConnectingModule } from '@ngrx/router-store'; +import { FullRouterStateSerializer, RouterStateSerializer, StoreRouterConnectingModule } from '@ngrx/router-store'; import { Store } from '@ngrx/store'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; import { getGitHubAPIURL, GITHUB_API_URL } from '@stratosui/git'; +import { + SetRecentlyVisitedEntityAction, + GeneralEntityAppState, + GeneralRequestDataState, + EntityCatalogModule, + entityCatalog, + EntityCatalogHelper, + EntityCatalogHelpers, + endpointEntityType, + STRATOS_ENDPOINT_TYPE, + getAPIRequestDataState, + selectEntity, + internalEventStateSelector, + recentlyVisitedSelector, + AppStoreModule, + stratosEntityCatalog, + generateStratosEntities, + EndpointModel, + IFavoriteMetadata, + UserFavorite, + UserFavoriteManager +} from '@stratosui/store'; import { debounceTime, filter, withLatestFrom } from 'rxjs/operators'; -import { SetRecentlyVisitedEntityAction } from '../../store/src/actions/recently-visited.actions'; -import { GeneralEntityAppState, GeneralRequestDataState } from '../../store/src/app-state'; -import { EntityCatalogModule } from '../../store/src/entity-catalog.module'; -import { entityCatalog } from '../../store/src/entity-catalog/entity-catalog'; -import { EntityCatalogHelper } from '../../store/src/entity-catalog/entity-catalog-entity/entity-catalog.service'; -import { EntityCatalogHelpers } from '../../store/src/entity-catalog/entity-catalog.helper'; -import { endpointEntityType, STRATOS_ENDPOINT_TYPE } from '../../store/src/helpers/stratos-entity-factory'; -import { getAPIRequestDataState, selectEntity } from '../../store/src/selectors/api.selectors'; -import { internalEventStateSelector } from '../../store/src/selectors/internal-events.selectors'; -import { recentlyVisitedSelector } from '../../store/src/selectors/recently-visitied.selectors'; -import { AppStoreModule } from '../../store/src/store.module'; -import { stratosEntityCatalog } from '../../store/src/stratos-entity-catalog'; -import { generateStratosEntities } from '../../store/src/stratos-entity-generator'; -import { EndpointModel } from '../../store/src/types/endpoint.types'; -import { IFavoriteMetadata, UserFavorite } from '../../store/src/types/user-favorites.types'; -import { UserFavoriteManager } from '../../store/src/user-favorite-manager'; import { AppComponent } from './app.component'; import { RouteModule } from './app.routing'; import { CoreModule } from './core/core.module'; @@ -107,7 +113,7 @@ class AppStoreDebugModule { } LoginModule, HomeModule, DashboardModule, - StoreRouterConnectingModule.forRoot({ serializer: DefaultRouterStateSerializer }), // Create action for router navigation + StoreRouterConnectingModule.forRoot({ serializer: FullRouterStateSerializer }), // Create action for router navigation AboutModule, CustomImportModule, XSRFModule, diff --git a/src/frontend/packages/core/src/app.routing.ts b/src/frontend/packages/core/src/app.routing.ts index a54b1c30d5..c4d01e7363 100644 --- a/src/frontend/packages/core/src/app.routing.ts +++ b/src/frontend/packages/core/src/app.routing.ts @@ -123,7 +123,7 @@ const appRoutes: Routes = [ CommonModule, CoreModule, SharedModule, - RouterModule.forRoot(appRoutes, { onSameUrlNavigation: 'reload' }), + RouterModule.forRoot(appRoutes, { onSameUrlNavigation: 'reload', relativeLinkResolution: 'legacy' }), CustomRoutingImportModule, ] }) diff --git a/src/frontend/packages/core/src/core/apiKey-auth-guard.service.ts b/src/frontend/packages/core/src/core/apiKey-auth-guard.service.ts index 7cb639208f..c8a136fc17 100644 --- a/src/frontend/packages/core/src/core/apiKey-auth-guard.service.ts +++ b/src/frontend/packages/core/src/core/apiKey-auth-guard.service.ts @@ -1,11 +1,10 @@ import { Injectable } from '@angular/core'; import { CanActivate } from '@angular/router'; import { Store } from '@ngrx/store'; +import { AppState, RouterNav } from '@stratosui/store'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { RouterNav } from '../../../store/src/actions/router.actions'; -import { AppState } from '../../../store/src/app-state'; import { CurrentUserPermissionsService } from './permissions/current-user-permissions.service'; import { StratosCurrentUserPermissions } from './permissions/stratos-user-permissions.checker'; diff --git a/src/frontend/packages/core/src/core/auth-guard.service.ts b/src/frontend/packages/core/src/core/auth-guard.service.ts index b64cdeb472..74f935443a 100644 --- a/src/frontend/packages/core/src/core/auth-guard.service.ts +++ b/src/frontend/packages/core/src/core/auth-guard.service.ts @@ -1,12 +1,10 @@ import { Injectable } from '@angular/core'; import { ActivatedRoute, CanActivate, Router } from '@angular/router'; import { Store } from '@ngrx/store'; +import { RouterNav, InternalAppState } from '@stratosui/store'; import { Observable } from 'rxjs'; import { first, map } from 'rxjs/operators'; -import { RouterNav } from '../../../store/src/actions/router.actions'; -import { InternalAppState } from '../../../store/src/app-state'; - export function queryParamMap(): { [key: string]: string } { const paramMap = {}; const query = window.location.search.substring(1); diff --git a/src/frontend/packages/core/src/core/button-blur-on-click.directive.ts b/src/frontend/packages/core/src/core/button-blur-on-click.directive.ts index 7553a5321d..df58f4af3c 100644 --- a/src/frontend/packages/core/src/core/button-blur-on-click.directive.ts +++ b/src/frontend/packages/core/src/core/button-blur-on-click.directive.ts @@ -1,6 +1,7 @@ -/* tslint:disable:directive-selector */ import { Directive, ElementRef, HostListener, Renderer2 } from '@angular/core'; +/* tslint:disable:directive-selector */ + @Directive({ selector: 'button [mat-icon-button]' }) diff --git a/src/frontend/packages/core/src/core/core.module.ts b/src/frontend/packages/core/src/core/core.module.ts index 75625cf771..1583c848a1 100644 --- a/src/frontend/packages/core/src/core/core.module.ts +++ b/src/frontend/packages/core/src/core/core.module.ts @@ -3,12 +3,9 @@ import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { Title } from '@angular/platform-browser'; import { RouterModule } from '@angular/router'; +import { PaginationMonitorFactory, EntityCatalogHelper, EntityServiceFactory, EntityMonitorFactory } from '@stratosui/store'; import { MomentModule } from 'ngx-moment'; -import { EntityCatalogHelper } from '../../../store/src/entity-catalog/entity-catalog-entity/entity-catalog.service'; -import { EntityServiceFactory } from '../../../store/src/entity-service-factory.service'; -import { EntityMonitorFactory } from '../../../store/src/monitors/entity-monitor.factory.service'; -import { PaginationMonitorFactory } from '../../../store/src/monitors/pagination-monitor.factory'; import { NoContentMessageComponent } from '../shared/components/no-content-message/no-content-message.component'; import { RecentEntitiesComponent } from '../shared/components/recent-entities/recent-entities.component'; import { UserAvatarComponent } from './../shared/components/user-avatar/user-avatar.component'; @@ -39,81 +36,78 @@ import { UtilsService } from './utils.service'; import { WindowRef } from './window-ref/window-ref.service'; @NgModule({ - imports: [ - MDAppModule, - RouterModule, - MomentModule - ], - exports: [ - MDAppModule, - RouterModule, - FormsModule, - MomentModule, - ReactiveFormsModule, - LogOutDialogComponent, - TruncatePipe, - InfinityPipe, - BytesToHumanSize, - MegaBytesToHumanSize, - SafeImgPipe, - ClickStopPropagationDirective, - DotContentComponent, - ButtonBlurOnClickDirective, - PageNotFoundComponentComponent, - PortalModule, - EntityFavoriteStarComponent, - RecentEntitiesComponent, - UserAvatarComponent, - DisableRouterLinkDirective, - StatefulIconComponent, - NoContentMessageComponent, - DisableRouterLinkDirective, - ShowHideButtonComponent - ], - providers: [ - AuthGuardService, - APIKeyAuthGuardService, - NotSetupGuardService, - PageHeaderService, - EventWatcherService, - WindowRef, - UtilsService, - EndpointsService, - UserService, - EntityServiceFactory, - EntityMonitorFactory, - EntityCatalogHelper, - PaginationMonitorFactory, - UserProfileService, - EntityServiceFactory, - { - provide: APP_TITLE, - useFactory: appTitleFactory, - deps: [Title] - } - ], - declarations: [ - StatefulIconComponent, - LogOutDialogComponent, - TruncatePipe, - InfinityPipe, - BytesToHumanSize, - MegaBytesToHumanSize, - SafeImgPipe, - ClickStopPropagationDirective, - DotContentComponent, - ButtonBlurOnClickDirective, - PageNotFoundComponentComponent, - EntityFavoriteStarComponent, - RecentEntitiesComponent, - DisableRouterLinkDirective, - NoContentMessageComponent, - UserAvatarComponent, - ShowHideButtonComponent - ], - entryComponents: [ - LogOutDialogComponent - ], + imports: [ + MDAppModule, + RouterModule, + MomentModule + ], + exports: [ + MDAppModule, + RouterModule, + FormsModule, + MomentModule, + ReactiveFormsModule, + LogOutDialogComponent, + TruncatePipe, + InfinityPipe, + BytesToHumanSize, + MegaBytesToHumanSize, + SafeImgPipe, + ClickStopPropagationDirective, + DotContentComponent, + ButtonBlurOnClickDirective, + PageNotFoundComponentComponent, + PortalModule, + EntityFavoriteStarComponent, + RecentEntitiesComponent, + UserAvatarComponent, + DisableRouterLinkDirective, + StatefulIconComponent, + NoContentMessageComponent, + DisableRouterLinkDirective, + ShowHideButtonComponent + ], + providers: [ + AuthGuardService, + APIKeyAuthGuardService, + NotSetupGuardService, + PageHeaderService, + EventWatcherService, + WindowRef, + UtilsService, + EndpointsService, + UserService, + EntityServiceFactory, + EntityMonitorFactory, + EntityCatalogHelper, + PaginationMonitorFactory, + UserProfileService, + EntityServiceFactory, + { + provide: APP_TITLE, + useFactory: appTitleFactory, + deps: [Title] + } + ], + declarations: [ + StatefulIconComponent, + LogOutDialogComponent, + TruncatePipe, + InfinityPipe, + BytesToHumanSize, + MegaBytesToHumanSize, + SafeImgPipe, + ClickStopPropagationDirective, + DotContentComponent, + ButtonBlurOnClickDirective, + PageNotFoundComponentComponent, + EntityFavoriteStarComponent, + RecentEntitiesComponent, + DisableRouterLinkDirective, + NoContentMessageComponent, + UserAvatarComponent, + ShowHideButtonComponent + ] }) export class CoreModule { constructor() { } diff --git a/src/frontend/packages/core/src/core/dispatch-sequencer.ts b/src/frontend/packages/core/src/core/dispatch-sequencer.ts index 0c63a753fb..c60bb38901 100644 --- a/src/frontend/packages/core/src/core/dispatch-sequencer.ts +++ b/src/frontend/packages/core/src/core/dispatch-sequencer.ts @@ -1,8 +1,8 @@ import { Action, Store } from '@ngrx/store'; +import { GeneralEntityAppState } from '@stratosui/store'; import { from, Observable, of as observableOf } from 'rxjs'; import { bufferTime, concatMap, delay, filter, map, mergeMap, switchMap, tap } from 'rxjs/operators'; -import { GeneralEntityAppState } from '../../../store/src/app-state'; export interface DispatchSequencerAction { diff --git a/src/frontend/packages/core/src/core/dot-content/dot-content.component.spec.ts b/src/frontend/packages/core/src/core/dot-content/dot-content.component.spec.ts index 5014978e0a..15bb05bfab 100644 --- a/src/frontend/packages/core/src/core/dot-content/dot-content.component.spec.ts +++ b/src/frontend/packages/core/src/core/dot-content/dot-content.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { DotContentComponent } from './dot-content.component'; @@ -6,7 +6,7 @@ describe('DotContentComponent', () => { let component: DotContentComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DotContentComponent] }) diff --git a/src/frontend/packages/core/src/core/endpoint-auth.ts b/src/frontend/packages/core/src/core/endpoint-auth.ts index 60384f3c47..f682eee134 100644 --- a/src/frontend/packages/core/src/core/endpoint-auth.ts +++ b/src/frontend/packages/core/src/core/endpoint-auth.ts @@ -1,6 +1,6 @@ import { Validators } from '@angular/forms'; +import { EndpointAuthTypeConfig, EndpointType } from '@stratosui/store'; -import { EndpointAuthTypeConfig, EndpointType } from '../../../store/src/extension-types'; import { CredentialsAuthFormComponent, } from '../features/endpoints/connect-endpoint-dialog/auth-forms/credentials-auth-form.component'; diff --git a/src/frontend/packages/core/src/core/endpoints-health-checks.ts b/src/frontend/packages/core/src/core/endpoints-health-checks.ts index 37a5c3164b..4a53995715 100644 --- a/src/frontend/packages/core/src/core/endpoints-health-checks.ts +++ b/src/frontend/packages/core/src/core/endpoints-health-checks.ts @@ -1,8 +1,5 @@ import { Injectable } from '@angular/core'; - -import { entityCatalog } from '../../../store/src/entity-catalog/entity-catalog'; -import { EndpointHealthCheck } from '../../../store/src/entity-catalog/entity-catalog.types'; -import { EndpointModel } from '../../../store/src/types/endpoint.types'; +import { entityCatalog, EndpointHealthCheck, EndpointModel } from '@stratosui/store'; @Injectable({ providedIn: 'root' diff --git a/src/frontend/packages/core/src/core/endpoints.service.ts b/src/frontend/packages/core/src/core/endpoints.service.ts index 08559e32fb..84b9089bea 100644 --- a/src/frontend/packages/core/src/core/endpoints.service.ts +++ b/src/frontend/packages/core/src/core/endpoints.service.ts @@ -1,25 +1,29 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router'; import { Store } from '@ngrx/store'; +import { + endpointEntitiesSelector, + endpointStatusSelector, + EndpointOnlyAppState, + EntityCatalogHelpers, + IRequestEntityTypeState, + IEndpointFavMetadata, + UserFavorite, + entityCatalog, + AuthState, + RouterNav, + EndpointHealthCheck, + EndpointModel, + EndpointState, +} from '@stratosui/store'; import { combineLatest as observableCombineLatest, Observable } from 'rxjs'; import { first, map, skipWhile, withLatestFrom } from 'rxjs/operators'; -import { RouterNav } from '../../../store/src/actions/router.actions'; -import { EndpointOnlyAppState, IRequestEntityTypeState } from '../../../store/src/app-state'; -import { entityCatalog } from '../../../store/src/entity-catalog/entity-catalog'; -import { EntityCatalogHelpers } from '../../../store/src/entity-catalog/entity-catalog.helper'; -import { EndpointHealthCheck } from '../../../store/src/entity-catalog/entity-catalog.types'; -import { AuthState } from '../../../store/src/reducers/auth.reducer'; -import { endpointEntitiesSelector, endpointStatusSelector } from '../../../store/src/selectors/endpoint.selectors'; -import { EndpointModel, EndpointState } from '../../../store/src/types/endpoint.types'; -import { IEndpointFavMetadata, UserFavorite } from '../../../store/src/types/user-favorites.types'; import { endpointHasMetricsByAvailable } from '../features/endpoints/endpoint-helpers'; import { SessionService } from '../shared/services/session.service'; import { EndpointHealthChecks } from './endpoints-health-checks'; import { UserService } from './user.service'; - - @Injectable() export class EndpointsService implements CanActivate { diff --git a/src/frontend/packages/core/src/core/entity-favorite-star/entity-favorite-star.component.spec.ts b/src/frontend/packages/core/src/core/entity-favorite-star/entity-favorite-star.component.spec.ts index 755a43f5e2..0600abd509 100644 --- a/src/frontend/packages/core/src/core/entity-favorite-star/entity-favorite-star.component.spec.ts +++ b/src/frontend/packages/core/src/core/entity-favorite-star/entity-favorite-star.component.spec.ts @@ -1,5 +1,5 @@ import { OverlayContainer } from '@angular/cdk/overlay'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BehaviorSubject, of } from 'rxjs'; import { PaginationMonitorFactory } from '../../../../store/src/monitors/pagination-monitor.factory'; @@ -19,7 +19,7 @@ describe('EntityFavoriteStarComponent', () => { let favorite: UserFavorite; let overlayContainerElement: HTMLElement; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ providers: [ ConfirmationDialogService, diff --git a/src/frontend/packages/core/src/core/entity-favorite-star/entity-favorite-star.component.ts b/src/frontend/packages/core/src/core/entity-favorite-star/entity-favorite-star.component.ts index e01afdbfa2..9e986369b9 100644 --- a/src/frontend/packages/core/src/core/entity-favorite-star/entity-favorite-star.component.ts +++ b/src/frontend/packages/core/src/core/entity-favorite-star/entity-favorite-star.component.ts @@ -1,9 +1,8 @@ import { Component, Input } from '@angular/core'; +import { UserFavoriteManager, IFavoriteMetadata, UserFavorite } from '@stratosui/store'; import { Observable } from 'rxjs'; import { first, tap } from 'rxjs/operators'; -import { IFavoriteMetadata, UserFavorite } from '../../../../store/src/types/user-favorites.types'; -import { UserFavoriteManager } from '../../../../store/src/user-favorite-manager'; import { ConfirmationDialogConfig } from '../../shared/components/confirmation-dialog.config'; import { ConfirmationDialogService } from '../../shared/components/confirmation-dialog.service'; import { EndpointsService } from '../endpoints.service'; diff --git a/src/frontend/packages/core/src/core/event-watcher/event-watcher.service.ts b/src/frontend/packages/core/src/core/event-watcher/event-watcher.service.ts index 73bf7d9b70..742c7773dd 100644 --- a/src/frontend/packages/core/src/core/event-watcher/event-watcher.service.ts +++ b/src/frontend/packages/core/src/core/event-watcher/event-watcher.service.ts @@ -1,10 +1,10 @@ +import { Injectable } from '@angular/core'; -import {fromEvent as observableFromEvent, Observable } from 'rxjs'; +import { WindowRef } from '../window-ref/window-ref.service'; +import {fromEvent as observableFromEvent } from 'rxjs'; import {map, debounceTime} from 'rxjs/operators'; -import { Injectable } from '@angular/core'; -import { WindowRef } from '../window-ref/window-ref.service'; export class ResizeEventData { innerWidth: number; diff --git a/src/frontend/packages/core/src/core/extension/extension-service.ts b/src/frontend/packages/core/src/core/extension/extension-service.ts index 83ad3390c7..2f948c1ebf 100644 --- a/src/frontend/packages/core/src/core/extension/extension-service.ts +++ b/src/frontend/packages/core/src/core/extension/extension-service.ts @@ -1,16 +1,14 @@ import { Injectable, ModuleWithProviders, NgModule } from '@angular/core'; import { ActivatedRoute, Route, Router } from '@angular/router'; import { Store } from '@ngrx/store'; +import { AppState, GeneralEntityAppState, EntityServiceFactory } from '@stratosui/store'; import { Observable } from 'rxjs'; -import { AppState, GeneralEntityAppState } from '../../../../store/src/app-state'; -import { EntityServiceFactory } from '../../../../store/src/entity-service-factory.service'; import { IPageSideNavTab } from '../../features/dashboard/page-side-nav/page-side-nav.component'; import { CurrentUserPermissionsService } from '../permissions/current-user-permissions.service'; export const extensionsActionRouteKey = 'extensionsActionsKey'; - // The different types of Tab export enum StratosTabType { Application = 'appTabs', diff --git a/src/frontend/packages/core/src/core/log-out-dialog/log-out-dialog.component.spec.ts b/src/frontend/packages/core/src/core/log-out-dialog/log-out-dialog.component.spec.ts index 7dafe71558..3709badf1e 100644 --- a/src/frontend/packages/core/src/core/log-out-dialog/log-out-dialog.component.spec.ts +++ b/src/frontend/packages/core/src/core/log-out-dialog/log-out-dialog.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Router } from '@angular/router'; @@ -24,7 +24,7 @@ describe('LogOutDialogComponent', () => { data: ''; } - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ providers: [ { provide: MatDialogRef, useClass: MatDialogRefMock }, diff --git a/src/frontend/packages/core/src/core/md.module.ts b/src/frontend/packages/core/src/core/md.module.ts index 044d0f7b9b..e5b60d0046 100644 --- a/src/frontend/packages/core/src/core/md.module.ts +++ b/src/frontend/packages/core/src/core/md.module.ts @@ -34,8 +34,6 @@ import { MatTabsModule } from '@angular/material/tabs'; import { MatToolbarModule } from '@angular/material/toolbar'; import { MatTooltipModule } from '@angular/material/tooltip'; - - const importExport = [ CommonModule, MatButtonModule, diff --git a/src/frontend/packages/core/src/core/not-setup-guard.service.ts b/src/frontend/packages/core/src/core/not-setup-guard.service.ts index d96dc3c828..210d484f37 100644 --- a/src/frontend/packages/core/src/core/not-setup-guard.service.ts +++ b/src/frontend/packages/core/src/core/not-setup-guard.service.ts @@ -2,11 +2,10 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { CanActivate } from '@angular/router'; import { Store } from '@ngrx/store'; +import { RouterNav, AppState } from '@stratosui/store'; import { Observable, of as observableOf } from 'rxjs'; import { catchError, map, tap } from 'rxjs/operators'; -import { RouterNav } from '../../../store/src/actions/router.actions'; -import { AppState } from '../../../store/src/app-state'; import { environment } from '../environments/environment'; const { proxyAPIVersion } = environment; diff --git a/src/frontend/packages/core/src/core/page-not-found-component/page-not-found-component.component.spec.ts b/src/frontend/packages/core/src/core/page-not-found-component/page-not-found-component.component.spec.ts index 2136619634..1fbf28ae5e 100644 --- a/src/frontend/packages/core/src/core/page-not-found-component/page-not-found-component.component.spec.ts +++ b/src/frontend/packages/core/src/core/page-not-found-component/page-not-found-component.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { PageNotFoundComponentComponent } from './page-not-found-component.component'; import { CoreModule } from '../core.module'; @@ -9,7 +9,7 @@ describe('PageNotFoundComponentComponent', () => { let component: PageNotFoundComponentComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ PageNotFoundComponentComponent, MatIcon ] }) diff --git a/src/frontend/packages/core/src/core/permissions/current-user-permissions.config.ts b/src/frontend/packages/core/src/core/permissions/current-user-permissions.config.ts index 9e08107255..2fdd9ebee7 100644 --- a/src/frontend/packages/core/src/core/permissions/current-user-permissions.config.ts +++ b/src/frontend/packages/core/src/core/permissions/current-user-permissions.config.ts @@ -1,4 +1,4 @@ -import { PermissionValues } from '../../../../store/src/selectors/current-user-role.selectors'; +import { PermissionValues } from '@stratosui/store'; export type PermissionConfigType = PermissionConfig[] | PermissionConfig | PermissionConfigLink; export interface IPermissionConfigs { diff --git a/src/frontend/packages/core/src/core/permissions/current-user-permissions.service.ts b/src/frontend/packages/core/src/core/permissions/current-user-permissions.service.ts index c7cf116b80..c64cbc60ad 100644 --- a/src/frontend/packages/core/src/core/permissions/current-user-permissions.service.ts +++ b/src/frontend/packages/core/src/core/permissions/current-user-permissions.service.ts @@ -1,10 +1,9 @@ import { Inject, Injectable, Optional } from '@angular/core'; import { Store } from '@ngrx/store'; +import { stratosEntityCatalog, InternalAppState } from '@stratosui/store'; import { combineLatest, Observable, of } from 'rxjs'; import { distinctUntilChanged, map, switchMap } from 'rxjs/operators'; -import { InternalAppState } from '../../../../store/src/app-state'; -import { stratosEntityCatalog } from '../../../../store/src/stratos-entity-catalog'; import { CurrentUserPermissions, PermissionConfig, @@ -18,7 +17,6 @@ import { } from './current-user-permissions.types'; import { StratosUserPermissionsChecker } from './stratos-user-permissions.checker'; - export const CUSTOM_USER_PERMISSION_CHECKERS = 'custom_user_perm_checkers'; @Injectable() diff --git a/src/frontend/packages/core/src/core/permissions/current-user-permissions.types.ts b/src/frontend/packages/core/src/core/permissions/current-user-permissions.types.ts index 60608d9879..9dcb94adcc 100644 --- a/src/frontend/packages/core/src/core/permissions/current-user-permissions.types.ts +++ b/src/frontend/packages/core/src/core/permissions/current-user-permissions.types.ts @@ -58,4 +58,4 @@ export abstract class BaseCurrentUserPermissionsChecker { distinctUntilChanged() ); } -} +} \ No newline at end of file diff --git a/src/frontend/packages/core/src/core/permissions/stratos-user-permissions.checker.ts b/src/frontend/packages/core/src/core/permissions/stratos-user-permissions.checker.ts index d44a58635a..37587df355 100644 --- a/src/frontend/packages/core/src/core/permissions/stratos-user-permissions.checker.ts +++ b/src/frontend/packages/core/src/core/permissions/stratos-user-permissions.checker.ts @@ -1,15 +1,15 @@ import { Store } from '@ngrx/store'; -import { Observable, of } from 'rxjs'; -import { filter, switchMap } from 'rxjs/operators'; - -import { GeneralEntityAppState } from '../../../../store/src/app-state'; -import { selectSessionData } from '../../../../store/src/reducers/auth.reducer'; import { + selectSessionData, + APIKeysEnabled, + GeneralEntityAppState, getCurrentUserStratosHasScope, getCurrentUserStratosRole, PermissionValues, -} from '../../../../store/src/selectors/current-user-role.selectors'; -import { APIKeysEnabled } from '../../../../store/src/types/auth.types'; +} from '@stratosui/store'; +import { Observable, of } from 'rxjs'; +import { filter, switchMap } from 'rxjs/operators'; + import { IPermissionConfigs, PermissionConfig, PermissionTypes } from './current-user-permissions.config'; import { BaseCurrentUserPermissionsChecker, @@ -18,7 +18,6 @@ import { IPermissionCheckCombiner, } from './current-user-permissions.types'; - export enum StratosCurrentUserPermissions { EDIT_ENDPOINT = 'edit-endpoint', EDIT_ADMIN_ENDPOINT = 'edit-admin-endpoint', diff --git a/src/frontend/packages/core/src/core/show-hide-button/show-hide-button.component.spec.ts b/src/frontend/packages/core/src/core/show-hide-button/show-hide-button.component.spec.ts index 683c2a5e12..9715eccb98 100644 --- a/src/frontend/packages/core/src/core/show-hide-button/show-hide-button.component.spec.ts +++ b/src/frontend/packages/core/src/core/show-hide-button/show-hide-button.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ShowHideButtonComponent } from './show-hide-button.component'; @@ -6,7 +6,7 @@ describe('ShowHideButtonComponent', () => { let component: ShowHideButtonComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ShowHideButtonComponent ] }) diff --git a/src/frontend/packages/core/src/core/stateful-icon/stateful-icon.component.spec.ts b/src/frontend/packages/core/src/core/stateful-icon/stateful-icon.component.spec.ts index 1a8cd63bc7..f05da3b714 100644 --- a/src/frontend/packages/core/src/core/stateful-icon/stateful-icon.component.spec.ts +++ b/src/frontend/packages/core/src/core/stateful-icon/stateful-icon.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StratosStatus } from '../../../../store/src/types/shared.types'; import { MDAppModule } from '../md.module'; @@ -9,7 +9,7 @@ describe('StatefulIconComponent', () => { let fixture: ComponentFixture; let element: HTMLElement; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [StatefulIconComponent], imports: [ diff --git a/src/frontend/packages/core/src/core/stateful-icon/stateful-icon.component.ts b/src/frontend/packages/core/src/core/stateful-icon/stateful-icon.component.ts index fdcd63847a..c669240116 100644 --- a/src/frontend/packages/core/src/core/stateful-icon/stateful-icon.component.ts +++ b/src/frontend/packages/core/src/core/stateful-icon/stateful-icon.component.ts @@ -1,6 +1,6 @@ import { Component, Input, TemplateRef } from '@angular/core'; -import { StratosStatus } from '../../../../store/src/types/shared.types'; +import { StratosStatus } from '@stratosui/store'; interface IconDefinition { icon: string; diff --git a/src/frontend/packages/core/src/core/user-profile.service.ts b/src/frontend/packages/core/src/core/user-profile.service.ts index 75e5d18b5b..79267cfe0d 100644 --- a/src/frontend/packages/core/src/core/user-profile.service.ts +++ b/src/frontend/packages/core/src/core/user-profile.service.ts @@ -1,16 +1,20 @@ import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; +import { + SessionData, + EntityService, + AuthState, + stratosEntityCatalog, + AppState, + ActionState, + getDefaultActionState, + UserProfileInfo, + UserProfileInfoEmail, + UserProfileInfoUpdates, +} from '@stratosui/store'; import { combineLatest, Observable, of as observableOf } from 'rxjs'; import { filter, first, map, publishReplay, refCount, switchMap } from 'rxjs/operators'; -import { AppState } from '../../../store/src/app-state'; -import { EntityService } from '../../../store/src/entity-service'; -import { ActionState, getDefaultActionState } from '../../../store/src/reducers/api-request-reducer/types'; -import { AuthState } from '../../../store/src/reducers/auth.reducer'; -import { stratosEntityCatalog } from '../../../store/src/stratos-entity-catalog'; -import { SessionData } from '../../../store/src/types/auth.types'; -import { UserProfileInfo, UserProfileInfoEmail, UserProfileInfoUpdates } from '../../../store/src/types/user-profile.types'; - @Injectable() export class UserProfileService { diff --git a/src/frontend/packages/core/src/core/user.service.ts b/src/frontend/packages/core/src/core/user.service.ts index 20c46eeb01..dfb4a03101 100644 --- a/src/frontend/packages/core/src/core/user.service.ts +++ b/src/frontend/packages/core/src/core/user.service.ts @@ -1,10 +1,9 @@ -import { map } from 'rxjs/operators'; -import { AuthState } from '../../../store/src/reducers/auth.reducer'; import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs'; import { Store } from '@ngrx/store'; -import { AuthOnlyAppState } from '../../../store/src/app-state'; +import { AuthOnlyAppState, AuthState } from '@stratosui/store'; +import { map } from 'rxjs/operators'; +import { Observable } from 'rxjs'; @Injectable() export class UserService { diff --git a/src/frontend/packages/core/src/core/utils.service.ts b/src/frontend/packages/core/src/core/utils.service.ts index cd40db21ed..569be81cc8 100644 --- a/src/frontend/packages/core/src/core/utils.service.ts +++ b/src/frontend/packages/core/src/core/utils.service.ts @@ -293,7 +293,6 @@ export const arraysEqual = (a: any[], b: any[]): boolean => { return false; }; - /* tslint:disable:no-bitwise */ export const createGuid = (): string => { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { diff --git a/src/frontend/packages/core/src/environments/environment.prod.ts b/src/frontend/packages/core/src/environments/environment.prod.ts index 630f9a6591..f7307fb9a1 100644 --- a/src/frontend/packages/core/src/environments/environment.prod.ts +++ b/src/frontend/packages/core/src/environments/environment.prod.ts @@ -1,4 +1,4 @@ -import { cfAPIVersion, proxyAPIVersion } from '../../../store/src/jetstream'; +import { cfAPIVersion, proxyAPIVersion } from '@stratosui/store'; export const environment = { production: true, diff --git a/src/frontend/packages/core/src/environments/environment.ts b/src/frontend/packages/core/src/environments/environment.ts index f192836eaf..3abff7eaa3 100644 --- a/src/frontend/packages/core/src/environments/environment.ts +++ b/src/frontend/packages/core/src/environments/environment.ts @@ -1,4 +1,4 @@ -import { cfAPIVersion, proxyAPIVersion } from '../../../store/src/jetstream'; +import { cfAPIVersion, proxyAPIVersion } from '@stratosui/store'; // The file contents for the current environment will overwrite these during build. // The build system defaults to the dev environment which uses `environment.ts`, but if you do diff --git a/src/frontend/packages/core/src/features/about/about-page/about-page.component.spec.ts b/src/frontend/packages/core/src/features/about/about-page/about-page.component.spec.ts index 69f0863602..6b34686f69 100644 --- a/src/frontend/packages/core/src/features/about/about-page/about-page.component.spec.ts +++ b/src/frontend/packages/core/src/features/about/about-page/about-page.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -13,7 +13,7 @@ describe('AboutPageComponent', () => { let component: AboutPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AboutPageComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/about/about-page/about-page.component.theme.scss b/src/frontend/packages/core/src/features/about/about-page/about-page.component.theme.scss index 39781bd628..48bdae30e7 100644 --- a/src/frontend/packages/core/src/features/about/about-page/about-page.component.theme.scss +++ b/src/frontend/packages/core/src/features/about/about-page/about-page.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin about-page-theme($theme, $app-theme) { $status: map-get($app-theme, status); .about-page__admin-card { diff --git a/src/frontend/packages/core/src/features/about/about-page/about-page.component.ts b/src/frontend/packages/core/src/features/about/about-page/about-page.component.ts index b0d8069992..4ec9954754 100644 --- a/src/frontend/packages/core/src/features/about/about-page/about-page.component.ts +++ b/src/frontend/packages/core/src/features/about/about-page/about-page.component.ts @@ -9,12 +9,10 @@ import { ViewContainerRef, } from '@angular/core'; import { Store } from '@ngrx/store'; +import { GeneralEntityAppState, AuthState, SessionData } from '@stratosui/store'; import { Observable } from 'rxjs'; import { filter, map } from 'rxjs/operators'; -import { GeneralEntityAppState } from '../../../../../store/src/app-state'; -import { AuthState } from '../../../../../store/src/reducers/auth.reducer'; -import { SessionData } from '../../../../../store/src/types/auth.types'; import { CustomizationService, CustomizationsMetadata } from '../../../core/customizations.types'; @Component({ diff --git a/src/frontend/packages/core/src/features/about/about.module.ts b/src/frontend/packages/core/src/features/about/about.module.ts index 9fe18f06af..fb1137e3a5 100644 --- a/src/frontend/packages/core/src/features/about/about.module.ts +++ b/src/frontend/packages/core/src/features/about/about.module.ts @@ -7,7 +7,6 @@ import { AboutRoutingModule } from './about.routing'; import { DiagnosticsPageComponent } from './diagnostics-page/diagnostics-page.component'; import { EulaPageComponent } from './eula-page/eula-page.component'; - @NgModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/features/about/about.routing.ts b/src/frontend/packages/core/src/features/about/about.routing.ts index ac74fa4ad4..03245d1730 100644 --- a/src/frontend/packages/core/src/features/about/about.routing.ts +++ b/src/frontend/packages/core/src/features/about/about.routing.ts @@ -1,8 +1,9 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; + import { AboutPageComponent } from './about-page/about-page.component'; -import { EulaPageComponent } from './eula-page/eula-page.component'; import { DiagnosticsPageComponent } from './diagnostics-page/diagnostics-page.component'; +import { EulaPageComponent } from './eula-page/eula-page.component'; const about: Routes = [ { diff --git a/src/frontend/packages/core/src/features/about/diagnostics-page/diagnostics-page.component.spec.ts b/src/frontend/packages/core/src/features/about/diagnostics-page/diagnostics-page.component.spec.ts index 16786352e6..69ff6c0ef9 100644 --- a/src/frontend/packages/core/src/features/about/diagnostics-page/diagnostics-page.component.spec.ts +++ b/src/frontend/packages/core/src/features/about/diagnostics-page/diagnostics-page.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -13,7 +13,7 @@ describe('DiagnosticsPageComponent', () => { let component: DiagnosticsPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DiagnosticsPageComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/about/diagnostics-page/diagnostics-page.component.ts b/src/frontend/packages/core/src/features/about/diagnostics-page/diagnostics-page.component.ts index 9d0b00af3e..9d800c4aeb 100644 --- a/src/frontend/packages/core/src/features/about/diagnostics-page/diagnostics-page.component.ts +++ b/src/frontend/packages/core/src/features/about/diagnostics-page/diagnostics-page.component.ts @@ -1,13 +1,10 @@ import { Component, OnInit } from '@angular/core'; import { Meta } from '@angular/platform-browser'; import { Store } from '@ngrx/store'; +import { GeneralEntityAppState, AuthState, SessionData } from '@stratosui/store'; import { Observable } from 'rxjs'; import { filter, map } from 'rxjs/operators'; -import { GeneralEntityAppState } from '../../../../../store/src/app-state'; -import { AuthState } from '../../../../../store/src/reducers/auth.reducer'; -import { SessionData } from '../../../../../store/src/types/auth.types'; - @Component({ selector: 'app-diagnostics-page', templateUrl: './diagnostics-page.component.html', diff --git a/src/frontend/packages/core/src/features/about/eula-page/eula-page.component.spec.ts b/src/frontend/packages/core/src/features/about/eula-page/eula-page.component.spec.ts index cd45da187e..a12d47a053 100644 --- a/src/frontend/packages/core/src/features/about/eula-page/eula-page.component.spec.ts +++ b/src/frontend/packages/core/src/features/about/eula-page/eula-page.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -14,7 +14,7 @@ describe('EulaPageComponent', () => { let component: EulaPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EulaPageComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/about/eula-page/eula-page.component.ts b/src/frontend/packages/core/src/features/about/eula-page/eula-page.component.ts index a93e345bf3..0103de51b1 100644 --- a/src/frontend/packages/core/src/features/about/eula-page/eula-page.component.ts +++ b/src/frontend/packages/core/src/features/about/eula-page/eula-page.component.ts @@ -1,5 +1,5 @@ -import { Component } from '@angular/core'; import { HttpClient } from '@angular/common/http'; +import { Component } from '@angular/core'; @Component({ selector: 'app-eula-page', diff --git a/src/frontend/packages/core/src/features/api-keys/add-api-key-dialog/add-api-key-dialog.component.spec.ts b/src/frontend/packages/core/src/features/api-keys/add-api-key-dialog/add-api-key-dialog.component.spec.ts index e27047ec08..727249d697 100644 --- a/src/frontend/packages/core/src/features/api-keys/add-api-key-dialog/add-api-key-dialog.component.spec.ts +++ b/src/frontend/packages/core/src/features/api-keys/add-api-key-dialog/add-api-key-dialog.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MatDialogRef } from '@angular/material/dialog'; import { BaseTestModules } from '../../../../test-framework/core-test.helper'; @@ -12,7 +12,7 @@ describe('AddApiKeyDialogComponent', () => { close: () => { } }; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...BaseTestModules, diff --git a/src/frontend/packages/core/src/features/api-keys/add-api-key-dialog/add-api-key-dialog.component.ts b/src/frontend/packages/core/src/features/api-keys/add-api-key-dialog/add-api-key-dialog.component.ts index dbb9f993d0..913cfa07a6 100644 --- a/src/frontend/packages/core/src/features/api-keys/add-api-key-dialog/add-api-key-dialog.component.ts +++ b/src/frontend/packages/core/src/features/api-keys/add-api-key-dialog/add-api-key-dialog.component.ts @@ -1,14 +1,10 @@ import { Component, OnDestroy } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { MatDialogRef } from '@angular/material/dialog'; +import { entityCatalog, stratosEntityCatalog, NormalizedResponse, ApiKey, RequestInfoState } from '@stratosui/store'; import { BehaviorSubject, Subscription } from 'rxjs'; import { filter, first, map, pairwise, tap } from 'rxjs/operators'; -import { ApiKey } from '../../../../../store/src/apiKey.types'; -import { entityCatalog } from '../../../../../store/src/entity-catalog/entity-catalog'; -import { RequestInfoState } from '../../../../../store/src/reducers/api-request-reducer/types'; -import { stratosEntityCatalog } from '../../../../../store/src/stratos-entity-catalog'; -import { NormalizedResponse } from '../../../../../store/src/types/api.types'; import { safeUnsubscribe } from '../../../core/utils.service'; @Component({ @@ -25,10 +21,10 @@ export class AddApiKeyDialogComponent implements OnDestroy { private sub: Subscription; - public formGroup: FormGroup; + public formGroup: UntypedFormGroup; constructor( - private fb: FormBuilder, + private fb: UntypedFormBuilder, public dialogRef: MatDialogRef, ) { this.formGroup = this.fb.group({ diff --git a/src/frontend/packages/core/src/features/api-keys/api-keys-page/api-keys-page.component.spec.ts b/src/frontend/packages/core/src/features/api-keys/api-keys-page/api-keys-page.component.spec.ts index 1c2318bba0..6063c857e0 100644 --- a/src/frontend/packages/core/src/features/api-keys/api-keys-page/api-keys-page.component.spec.ts +++ b/src/frontend/packages/core/src/features/api-keys/api-keys-page/api-keys-page.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MatDialogRef } from '@angular/material/dialog'; import { BaseTestModules } from '../../../../test-framework/core-test.helper'; @@ -13,7 +13,7 @@ describe('ApiKeysPageComponent', () => { close: () => { } }; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...BaseTestModules, diff --git a/src/frontend/packages/core/src/features/api-keys/api-keys-page/api-keys-page.component.ts b/src/frontend/packages/core/src/features/api-keys/api-keys-page/api-keys-page.component.ts index 4f130201b6..434110de53 100644 --- a/src/frontend/packages/core/src/features/api-keys/api-keys-page/api-keys-page.component.ts +++ b/src/frontend/packages/core/src/features/api-keys/api-keys-page/api-keys-page.component.ts @@ -1,9 +1,9 @@ import { Component } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; +import { stratosEntityCatalog } from '@stratosui/store'; import { Observable, Subject } from 'rxjs'; import { first, map, startWith } from 'rxjs/operators'; -import { stratosEntityCatalog } from '../../../../../store/src/stratos-entity-catalog'; import { ApiKeyListConfigService } from '../../../shared/components/list/list-types/apiKeys/apiKey-list-config.service'; import { ListConfig } from '../../../shared/components/list/list.component.types'; import { AddApiKeyDialogComponent } from '../add-api-key-dialog/add-api-key-dialog.component'; diff --git a/src/frontend/packages/core/src/features/api-keys/api-keys.module.ts b/src/frontend/packages/core/src/features/api-keys/api-keys.module.ts index c2311b97d4..c5e7efe7c3 100644 --- a/src/frontend/packages/core/src/features/api-keys/api-keys.module.ts +++ b/src/frontend/packages/core/src/features/api-keys/api-keys.module.ts @@ -2,9 +2,9 @@ import { NgModule } from '@angular/core'; import { CoreModule } from '../../core/core.module'; import { SharedModule } from '../../shared/shared.module'; +import { AddApiKeyDialogComponent } from './add-api-key-dialog/add-api-key-dialog.component'; import { ApiKeysPageComponent } from './api-keys-page/api-keys-page.component'; import { ApiKeysRoutingModule } from './api-keys.routing'; -import { AddApiKeyDialogComponent } from './add-api-key-dialog/add-api-key-dialog.component'; @NgModule({ diff --git a/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.spec.ts b/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.spec.ts index f448246a7d..6521d63f80 100644 --- a/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.spec.ts +++ b/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.spec.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; import { HttpClient, HttpClientModule, HttpHandler } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { StoreModule } from '@ngrx/store'; @@ -21,7 +21,7 @@ describe('DashboardBaseComponent', () => { let component: DashboardBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DashboardBaseComponent, SideNavComponent, PageSideNavComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.ts b/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.ts index 63470698a2..12072b82ea 100644 --- a/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.ts +++ b/src/frontend/packages/core/src/features/dashboard/dashboard-base/dashboard-base.component.ts @@ -4,16 +4,20 @@ import { AfterViewInit, Component, NgZone, OnDestroy, OnInit, ViewChild, ViewCon import { MatDrawer } from '@angular/material/sidenav'; import { ActivatedRoute, ActivatedRouteSnapshot, NavigationEnd, Route, Router } from '@angular/router'; import { Store } from '@ngrx/store'; +import { + GetCurrentUsersRelations, + CloseSideNav, + DisableMobileNav, + EnableMobileNav, + selectDashboardState, + DashboardOnlyAppState, + stratosEntityCatalog, + DashboardState, + entityCatalog, +} from '@stratosui/store'; import { combineLatest, Observable, of, Subscription } from 'rxjs'; import { distinctUntilChanged, filter, map, startWith, withLatestFrom } from 'rxjs/operators'; -import { CloseSideNav, DisableMobileNav, EnableMobileNav } from '../../../../../store/src/actions/dashboard-actions'; -import { GetCurrentUsersRelations } from '../../../../../store/src/actions/permissions.actions'; -import { DashboardOnlyAppState } from '../../../../../store/src/app-state'; -import { entityCatalog } from '../../../../../store/src/entity-catalog/entity-catalog'; -import { selectDashboardState } from '../../../../../store/src/selectors/dashboard.selectors'; -import { stratosEntityCatalog } from '../../../../../store/src/stratos-entity-catalog'; -import { DashboardState } from '../../../../../store/src/types/dashboard.types'; import { CustomizationService } from '../../../core/customizations.types'; import { EndpointsService } from '../../../core/endpoints.service'; import { IHeaderBreadcrumbLink } from '../../../shared/components/page-header/page-header.types'; @@ -23,7 +27,6 @@ import { IPageSideNavTab } from '../page-side-nav/page-side-nav.component'; import { PageHeaderService } from './../../../core/page-header-service/page-header.service'; import { SideNavItem } from './../side-nav/side-nav.component'; - @Component({ selector: 'app-dashboard-base', templateUrl: './dashboard-base.component.html', diff --git a/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.spec.ts b/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.spec.ts index 871b3dd00c..1f6d3435f8 100644 --- a/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.spec.ts +++ b/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EntityMonitorFactory } from '../../../../../store/src/monitors/entity-monitor.factory.service'; import { BaseTestModulesNoShared } from '../../../../test-framework/core-test.helper'; @@ -9,7 +9,7 @@ describe('PageSideNavComponent', () => { let component: PageSideNavComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [BaseTestModulesNoShared], declarations: [PageSideNavComponent], diff --git a/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.theme.scss b/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.theme.scss index 193c3fb671..50dd050bc8 100644 --- a/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.theme.scss +++ b/src/frontend/packages/core/src/features/dashboard/page-side-nav/page-side-nav.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @function gradient-generator($color) { @return linear-gradient(to right, $color 0%, $color 50%, transparent 100%); diff --git a/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.spec.ts b/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.spec.ts index 99b1bc3fc1..eeb3977995 100644 --- a/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.spec.ts +++ b/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -12,7 +12,7 @@ describe('SideNavComponent', () => { let component: SideNavComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [SideNavComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.theme.scss b/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.theme.scss index b74eb57f55..ad684e0216 100644 --- a/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.theme.scss +++ b/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin side-nav-theme($theme, $app-theme) { $primary: map-get($theme, primary); $side-nav-colors: map-get($app-theme, side-nav); diff --git a/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.ts b/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.ts index e652ff3217..1f81666c45 100644 --- a/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.ts +++ b/src/frontend/packages/core/src/features/dashboard/side-nav/side-nav.component.ts @@ -1,9 +1,8 @@ import { Component, EventEmitter, InjectionToken, Input, OnInit, Output } from '@angular/core'; import { Store } from '@ngrx/store'; +import { ToggleSideNav, AppState } from '@stratosui/store'; import { Observable } from 'rxjs'; -import { ToggleSideNav } from '../../../../../store/src/actions/dashboard-actions'; -import { AppState } from '../../../../../store/src/app-state'; import { CustomizationService, CustomizationsMetadata } from '../../../core/customizations.types'; import { environment } from '../../../environments/environment'; import { TabNavItem } from '../../../tab-nav.types'; diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-checkbox-cell/backup-checkbox-cell.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-checkbox-cell/backup-checkbox-cell.component.spec.ts index 448a1eac17..b68fbbfca0 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-checkbox-cell/backup-checkbox-cell.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-checkbox-cell/backup-checkbox-cell.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EndpointModel } from '../../../../../../store/src/types/endpoint.types'; import { BaseTestModulesNoShared } from '../../../../../test-framework/core-test.helper'; @@ -10,7 +10,7 @@ describe('BackupCheckboxCellComponent', () => { let component: BackupCheckboxCellComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [BackupCheckboxCellComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-checkbox-cell/backup-checkbox-cell.component.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-checkbox-cell/backup-checkbox-cell.component.ts index 0098d10c9b..3fdfc9e155 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-checkbox-cell/backup-checkbox-cell.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-checkbox-cell/backup-checkbox-cell.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; +import { EndpointModel } from '@stratosui/store'; -import { EndpointModel } from '../../../../../../store/src/types/endpoint.types'; import { TableCellCustom } from '../../../../shared/components/list/list.types'; import { BackupEndpointsService } from '../backup-endpoints.service'; diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-connection-cell/backup-connection-cell.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-connection-cell/backup-connection-cell.component.spec.ts index 09028f8d35..0bfe60a7a3 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-connection-cell/backup-connection-cell.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-connection-cell/backup-connection-cell.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EndpointModel } from '../../../../../../store/src/types/endpoint.types'; import { BaseTestModulesNoShared } from '../../../../../test-framework/core-test.helper'; @@ -9,7 +9,7 @@ describe('BackupConnectionCellComponent', () => { let component: BackupConnectionCellComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ BackupConnectionCellComponent, diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-connection-cell/backup-connection-cell.component.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-connection-cell/backup-connection-cell.component.ts index 13bddabaaa..aca3dd5642 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-connection-cell/backup-connection-cell.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-connection-cell/backup-connection-cell.component.ts @@ -1,7 +1,6 @@ import { Component, OnInit } from '@angular/core'; +import { entityCatalog, EndpointModel, SystemSharedUserGuid } from '@stratosui/store'; -import { entityCatalog } from '../../../../../../store/src/entity-catalog/entity-catalog'; -import { EndpointModel, SystemSharedUserGuid } from '../../../../../../store/src/types/endpoint.types'; import { TableCellCustom } from '../../../../shared/components/list/list.types'; import { BackupEndpointsService } from '../backup-endpoints.service'; import { BackupEndpointConnectionTypes, BackupEndpointTypes } from '../backup-restore.types'; diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints.service.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints.service.ts index 2aee2629c1..4e181bd631 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints.service.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints.service.ts @@ -1,13 +1,10 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; +import { GeneralEntityAppState, BrowserStandardEncoder, EndpointModel, entityCatalog } from '@stratosui/store'; import { BehaviorSubject, Observable } from 'rxjs'; import { first, map } from 'rxjs/operators'; -import { GeneralEntityAppState } from '../../../../../store/src/app-state'; -import { BrowserStandardEncoder } from '../../../../../store/src/browser-encoder'; -import { entityCatalog } from '../../../../../store/src/entity-catalog/entity-catalog'; -import { EndpointModel } from '../../../../../store/src/types/endpoint.types'; import { BackupEndpointConfigUI, BackupEndpointConnectionTypes, @@ -16,7 +13,6 @@ import { BaseEndpointConfig, } from './backup-restore.types'; - interface BackupRequest { state: BackupEndpointsConfig; password: string; @@ -177,6 +173,4 @@ export class BackupEndpointsService { // ); // } - - } diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints/backup-endpoints.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints/backup-endpoints.component.spec.ts index 5eb19422d8..44d2b8138f 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints/backup-endpoints.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints/backup-endpoints.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../../test-framework/core-test.helper'; import { SharedModule } from '../../../../shared/shared.module'; @@ -9,7 +9,7 @@ describe('BackupEndpointsComponent', () => { let component: BackupEndpointsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [BackupEndpointsComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints/backup-endpoints.component.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints/backup-endpoints.component.ts index b18aed5974..4d029e5800 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints/backup-endpoints.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-endpoints/backup-endpoints.component.ts @@ -1,13 +1,10 @@ import { Component, OnDestroy } from '@angular/core'; -import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import moment from 'moment'; +import { httpErrorResponseToSafeString, entityCatalog, stratosEntityCatalog, EndpointModel } from '@stratosui/store'; import { Observable, of, Subject, Subscription } from 'rxjs'; import { filter, first, map } from 'rxjs/operators'; -import { entityCatalog } from '../../../../../../store/src/entity-catalog/entity-catalog'; -import { httpErrorResponseToSafeString } from '../../../../../../store/src/jetstream'; -import { stratosEntityCatalog } from '../../../../../../store/src/stratos-entity-catalog'; -import { EndpointModel } from '../../../../../../store/src/types/endpoint.types'; import { safeUnsubscribe } from '../../../../core/utils.service'; import { ConfirmationDialogConfig } from '../../../../shared/components/confirmation-dialog.config'; import { ConfirmationDialogService } from '../../../../shared/components/confirmation-dialog.service'; @@ -68,7 +65,7 @@ export class BackupEndpointsComponent implements OnDestroy { // Step 2 passwordValid$: Observable; - passwordForm: FormGroup; + passwordForm: UntypedFormGroup; showPassword: boolean[] = []; constructor( @@ -109,9 +106,9 @@ export class BackupEndpointsComponent implements OnDestroy { } setupPasswordStep() { - this.passwordForm = new FormGroup({ - password: new FormControl('', [Validators.required, Validators.minLength(6)]), - password2: new FormControl(''), + this.passwordForm = new UntypedFormGroup({ + password: new UntypedFormControl('', [Validators.required, Validators.minLength(6)]), + password2: new UntypedFormControl(''), }); this.sub = this.passwordForm.controls.password.valueChanges.subscribe(value => this.passwordForm.controls.password2.setValidators( [Validators.required, Validators.pattern(value)] diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore-endpoints/backup-restore-endpoints.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore-endpoints/backup-restore-endpoints.component.spec.ts index 9e3ebe2233..2b1969937b 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore-endpoints/backup-restore-endpoints.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore-endpoints/backup-restore-endpoints.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../../test-framework/core-test.helper'; import { SharedModule } from '../../../../shared/shared.module'; @@ -9,7 +9,7 @@ describe('BackupRestoreEndpointsComponent', () => { let component: BackupRestoreEndpointsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [BackupRestoreEndpointsComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore-endpoints/backup-restore-endpoints.component.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore-endpoints/backup-restore-endpoints.component.ts index 615c1d2021..8c94898d3d 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore-endpoints/backup-restore-endpoints.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore-endpoints/backup-restore-endpoints.component.ts @@ -1,15 +1,13 @@ import { Component } from '@angular/core'; import { Store } from '@ngrx/store'; +import { AppState, RouterNav } from '@stratosui/store'; -import { RouterNav } from '../../../../../../store/src/actions/router.actions'; -import { AppState } from '../../../../../../store/src/app-state'; import { ITileConfig, ITileData } from '../../../../shared/components/tile/tile-selector.types'; interface IAppTileData extends ITileData { type: string; } - @Component({ selector: 'app-backup-restore-endpoints', templateUrl: './backup-restore-endpoints.component.html', diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore.types.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore.types.ts index edda11d612..996e7e54aa 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore.types.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/backup-restore.types.ts @@ -1,4 +1,4 @@ -import { EndpointModel } from '../../../../../store/src/types/endpoint.types'; +import { EndpointModel } from '@stratosui/store'; export enum BackupEndpointTypes { ENDPOINT = 'endpoint', diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints.service.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints.service.ts index 6367b56362..2637e4a7e5 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints.service.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints.service.ts @@ -1,14 +1,10 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; +import { selectSessionData, GeneralEntityAppState, BrowserStandardEncoder, SessionData } from '@stratosui/store'; import { BehaviorSubject, combineLatest, Observable } from 'rxjs'; import { filter, map, switchMap } from 'rxjs/operators'; -import { GeneralEntityAppState } from '../../../../../store/src/app-state'; -import { BrowserStandardEncoder } from '../../../../../store/src/browser-encoder'; -import { selectSessionData } from '../../../../../store/src/reducers/auth.reducer'; -import { SessionData } from '../../../../../store/src/types/auth.types'; - interface BackupContent { payload: string; dbVersion: number; diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints/restore-endpoints.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints/restore-endpoints.component.spec.ts index 46482bb15e..a4219c5f07 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints/restore-endpoints.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints/restore-endpoints.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../../test-framework/core-test.helper'; import { SharedModule } from '../../../../shared/shared.module'; @@ -9,7 +9,7 @@ describe('RestoreEndpointsComponent', () => { let component: RestoreEndpointsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [RestoreEndpointsComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints/restore-endpoints.component.ts b/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints/restore-endpoints.component.ts index b17eb4a817..50237b7643 100644 --- a/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints/restore-endpoints.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/backup-restore/restore-endpoints/restore-endpoints.component.ts @@ -1,20 +1,17 @@ import { Component } from '@angular/core'; -import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { MatCheckboxChange } from '@angular/material/checkbox'; import { Store } from '@ngrx/store'; +import { stratosEntityCatalog, GeneralEntityAppState, httpErrorResponseToSafeString } from '@stratosui/store'; import { Observable, of, Subject } from 'rxjs'; import { first, map } from 'rxjs/operators'; -import { GeneralEntityAppState } from '../../../../../../store/src/app-state'; -import { httpErrorResponseToSafeString } from '../../../../../../store/src/jetstream'; -import { stratosEntityCatalog } from '../../../../../../store/src/stratos-entity-catalog'; import { getEventFiles } from '../../../../core/browser-helper'; import { ConfirmationDialogConfig } from '../../../../shared/components/confirmation-dialog.config'; import { ConfirmationDialogService } from '../../../../shared/components/confirmation-dialog.service'; import { StepOnNextFunction, StepOnNextResult } from '../../../../shared/components/stepper/step/step.component'; import { RestoreEndpointsService } from '../restore-endpoints.service'; - @Component({ selector: 'app-restore-endpoints', templateUrl: './restore-endpoints.component.html', @@ -27,7 +24,7 @@ export class RestoreEndpointsComponent { // Step 2 passwordValid$: Observable; - passwordForm: FormGroup; + passwordForm: UntypedFormGroup; show = false; constructor( @@ -39,8 +36,8 @@ export class RestoreEndpointsComponent { } setupPasswordStep() { - this.passwordForm = new FormGroup({ - password: new FormControl('', [Validators.required, Validators.minLength(6)]), + this.passwordForm = new UntypedFormGroup({ + password: new UntypedFormControl('', [Validators.required, Validators.minLength(6)]), }); this.passwordValid$ = this.passwordForm.statusChanges.pipe( map(() => { diff --git a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/credentials-auth-form.component.ts b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/credentials-auth-form.component.ts index 1212e15770..a555e758b7 100644 --- a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/credentials-auth-form.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/credentials-auth-form.component.ts @@ -1,7 +1,6 @@ import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { IAuthForm } from '../../../../../../store/src/extension-types'; +import { UntypedFormGroup } from '@angular/forms'; +import { IAuthForm } from '@stratosui/store'; @Component({ selector: 'app-credentials-auth-form', @@ -18,7 +17,7 @@ export class CredentialsAuthFormComponent implements IAuthForm { passwordLabel: 'Password' }; - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; get config(): any { return this.pConfig; diff --git a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/none-auth-form.component.ts b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/none-auth-form.component.ts index 3b6bb325ee..c0151baba0 100644 --- a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/none-auth-form.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/none-auth-form.component.ts @@ -1,7 +1,6 @@ import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { IAuthForm } from '../../../../../../store/src/extension-types'; +import { UntypedFormGroup } from '@angular/forms'; +import { IAuthForm } from '@stratosui/store'; @Component({ selector: 'app-none-auth-form', @@ -9,5 +8,5 @@ import { IAuthForm } from '../../../../../../store/src/extension-types'; styleUrls: ['./none-auth-form.component.scss'] }) export class NoneAuthFormComponent implements IAuthForm { - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; } diff --git a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/sso-auth-form.component.ts b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/sso-auth-form.component.ts index 83243a24ec..cd7ad30e33 100644 --- a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/sso-auth-form.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/sso-auth-form.component.ts @@ -1,7 +1,6 @@ import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; - -import { IAuthForm } from '../../../../../../store/src/extension-types'; +import { UntypedFormGroup } from '@angular/forms'; +import { IAuthForm } from '@stratosui/store'; @Component({ selector: 'app-sso-auth-form', @@ -9,5 +8,5 @@ import { IAuthForm } from '../../../../../../store/src/extension-types'; styleUrls: ['./sso-auth-form.component.scss'] }) export class SSOAuthFormComponent implements IAuthForm { - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; } diff --git a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/token-endpoint/token-endpoint.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/token-endpoint/token-endpoint.component.spec.ts index 2c84115699..950ec99e9e 100644 --- a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/token-endpoint/token-endpoint.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/token-endpoint/token-endpoint.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TokenEndpointComponent } from './token-endpoint.component'; @@ -6,7 +6,7 @@ describe('TokenEndpointComponent', () => { let component: TokenEndpointComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TokenEndpointComponent ] }) diff --git a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/token-endpoint/token-endpoint.component.ts b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/token-endpoint/token-endpoint.component.ts index 45488b1571..94e2852903 100644 --- a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/token-endpoint/token-endpoint.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/auth-forms/token-endpoint/token-endpoint.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { IAuthForm } from '../../../../../../../store/src/extension-types'; @@ -11,7 +11,7 @@ import { IAuthForm } from '../../../../../../../store/src/extension-types'; export class TokenEndpointComponent implements IAuthForm { public showToken = false; - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; @Input() config: any = {}; } diff --git a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/connect-endpoint-dialog.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/connect-endpoint-dialog.component.spec.ts index 3f63c6c7d6..d6986e0cd2 100644 --- a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/connect-endpoint-dialog.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/connect-endpoint-dialog.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -31,7 +31,7 @@ describe('ConnectEndpointDialogComponent', () => { let component: ConnectEndpointDialogComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { const testingModule = TestBed.configureTestingModule({ providers: [ { provide: MatDialogRef, useClass: MatDialogRefMock }, diff --git a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/connect-endpoint-dialog.component.ts b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/connect-endpoint-dialog.component.ts index db1dc21604..ea93b1d890 100644 --- a/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/connect-endpoint-dialog.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/connect-endpoint-dialog/connect-endpoint-dialog.component.ts @@ -9,7 +9,6 @@ import { SidePanelService } from '../../../shared/services/side-panel.service'; import { SnackBarService } from '../../../shared/services/snackbar.service'; import { ConnectEndpointConfig, ConnectEndpointService } from '../connect.service'; - @Component({ selector: 'app-connect-endpoint-dialog', templateUrl: './connect-endpoint-dialog.component.html', diff --git a/src/frontend/packages/core/src/features/endpoints/connect-endpoint/connect-endpoint.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/connect-endpoint/connect-endpoint.component.spec.ts index 589e58009c..72f65643d5 100644 --- a/src/frontend/packages/core/src/features/endpoints/connect-endpoint/connect-endpoint.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/connect-endpoint/connect-endpoint.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; import { CoreTestingModule } from '../../../../test-framework/core-test.modules'; @@ -11,7 +11,7 @@ describe('ConnectEndpointComponent', () => { let component: ConnectEndpointComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ConnectEndpointComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/endpoints/connect-endpoint/connect-endpoint.component.ts b/src/frontend/packages/core/src/features/endpoints/connect-endpoint/connect-endpoint.component.ts index 36a0f6781b..008ab64fba 100644 --- a/src/frontend/packages/core/src/features/endpoints/connect-endpoint/connect-endpoint.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/connect-endpoint/connect-endpoint.component.ts @@ -10,11 +10,10 @@ import { ViewChild, ViewContainerRef, } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { entityCatalog, EndpointAuthTypeConfig, IAuthForm, IEndpointAuthComponent } from '@stratosui/store'; import { Subscription } from 'rxjs'; -import { entityCatalog } from '../../../../../store/src/entity-catalog/entity-catalog'; -import { EndpointAuthTypeConfig, IAuthForm, IEndpointAuthComponent } from '../../../../../store/src/extension-types'; import { BaseEndpointAuth } from '../../../core/endpoint-auth'; import { safeUnsubscribe } from '../../../core/utils.service'; import { ConnectEndpointConfig, ConnectEndpointData, ConnectEndpointService } from '../connect.service'; @@ -57,7 +56,7 @@ export class ConnectEndpointComponent implements OnInit, OnDestroy { @ViewChild('authForm', { read: ViewContainerRef, static: true }) public container: ViewContainerRef; - public endpointForm: FormGroup; + public endpointForm: UntypedFormGroup; private bodyContent = ''; @@ -72,7 +71,7 @@ export class ConnectEndpointComponent implements OnInit, OnDestroy { private subs: Subscription[] = []; constructor( - private fb: FormBuilder, + private fb: UntypedFormBuilder, private resolver: ComponentFactoryResolver, ) { } @@ -87,7 +86,6 @@ export class ConnectEndpointComponent implements OnInit, OnDestroy { this.authTypesForEndpoint = endpoint.definition.authTypes.filter(authType => authType.value !== BaseEndpointAuth.SSO.value); } - // Not all endpoint types might allow token sharing - typically types like metrics do this.canShareEndpointToken = endpoint.definition.tokenSharing; diff --git a/src/frontend/packages/core/src/features/endpoints/connect.service.ts b/src/frontend/packages/core/src/features/endpoints/connect.service.ts index 2676d7ba31..eba6e52bc5 100644 --- a/src/frontend/packages/core/src/features/endpoints/connect.service.ts +++ b/src/frontend/packages/core/src/features/endpoints/connect.service.ts @@ -1,12 +1,15 @@ +import { + entityCatalog, + stratosEntityCatalog, + EndpointModel, + AuthParams, + ConnectEndpoint, + EndpointType, + ActionState, +} from '@stratosui/store'; import { combineLatest, Observable, of, Subject, Subscription } from 'rxjs'; import { delay, distinctUntilChanged, filter, map, pairwise, startWith, switchMap, tap } from 'rxjs/operators'; -import { AuthParams, ConnectEndpoint } from '../../../../store/src/actions/endpoint.actions'; -import { entityCatalog } from '../../../../store/src/entity-catalog/entity-catalog'; -import { EndpointType } from '../../../../store/src/extension-types'; -import { ActionState } from '../../../../store/src/reducers/api-request-reducer/types'; -import { stratosEntityCatalog } from '../../../../store/src/stratos-entity-catalog'; -import { EndpointModel } from '../../../../store/src/types/endpoint.types'; import { EndpointsService } from '../../core/endpoints.service'; import { safeUnsubscribe } from '../../core/utils.service'; diff --git a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-base-step/create-endpoint-base-step.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-base-step/create-endpoint-base-step.component.spec.ts index eae2dd40c7..ad45d3a987 100644 --- a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-base-step/create-endpoint-base-step.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-base-step/create-endpoint-base-step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { ActivatedRoute } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; @@ -15,7 +15,7 @@ describe('CreateEndpointBaseStepComponent', () => { let component: CreateEndpointBaseStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CreateEndpointBaseStepComponent, diff --git a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-base-step/create-endpoint-base-step.component.ts b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-base-step/create-endpoint-base-step.component.ts index 3ae8aa6777..a555f93e3e 100644 --- a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-base-step/create-endpoint-base-step.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-base-step/create-endpoint-base-step.component.ts @@ -1,11 +1,13 @@ import { Component } from '@angular/core'; import { Store } from '@ngrx/store'; +import { + RouterNav, + GeneralEntityAppState, + entityCatalog, + selectSessionData, +} from '@stratosui/store'; import { map } from 'rxjs/operators'; -import { RouterNav } from '../../../../../../store/src/actions/router.actions'; -import { GeneralEntityAppState } from '../../../../../../store/src/app-state'; -import { entityCatalog } from '../../../../../../store/src/entity-catalog/entity-catalog'; -import { selectSessionData } from '../../../../../../store/src/reducers/auth.reducer'; import { BASE_REDIRECT_QUERY } from '../../../../shared/components/stepper/stepper.types'; import { ITileConfig } from '../../../../shared/components/tile/tile-selector.types'; import { BaseEndpointTileManager, ICreateEndpointTilesData } from './base-endpoint-tile-manager'; diff --git a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-cf-step-1/create-endpoint-cf-step-1.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-cf-step-1/create-endpoint-cf-step-1.component.spec.ts index 5573da963f..e08aa8ccf7 100644 --- a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-cf-step-1/create-endpoint-cf-step-1.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-cf-step-1/create-endpoint-cf-step-1.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { ActivatedRoute } from '@angular/router'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -13,7 +13,7 @@ describe('CreateEndpointCfStep1Component', () => { let component: CreateEndpointCfStep1Component; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CreateEndpointCfStep1Component], imports: [ diff --git a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-cf-step-1/create-endpoint-cf-step-1.component.ts b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-cf-step-1/create-endpoint-cf-step-1.component.ts index 013462f7af..b2614b51f1 100644 --- a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-cf-step-1/create-endpoint-cf-step-1.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-cf-step-1/create-endpoint-cf-step-1.component.ts @@ -1,15 +1,15 @@ import { AfterContentInit, Component, Input } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; +import { + ActionState, + stratosEntityCatalog, + entityCatalog, + StratosCatalogEndpointEntity +} from '@stratosui/store'; import { Observable } from 'rxjs'; -import { distinctUntilChanged, filter, map, pairwise } from 'rxjs/operators'; +import { filter, map, pairwise } from 'rxjs/operators'; -import { entityCatalog } from '../../../../../../store/src/entity-catalog/entity-catalog'; -import { - StratosCatalogEndpointEntity, -} from '../../../../../../store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity'; -import { ActionState } from '../../../../../../store/src/reducers/api-request-reducer/types'; -import { stratosEntityCatalog } from '../../../../../../store/src/stratos-entity-catalog'; import { getIdFromRoute } from '../../../../core/utils.service'; import { IStepperStep, StepOnNextFunction } from '../../../../shared/components/stepper/step/step.component'; import { SessionService } from '../../../../shared/services/session.service'; @@ -27,7 +27,7 @@ import { CreateEndpointHelperComponent } from '../create-endpoint-helper'; }) export class CreateEndpointCfStep1Component extends CreateEndpointHelperComponent implements IStepperStep, AfterContentInit { - registerForm: FormGroup; + registerForm: UntypedFormGroup; @Input() finalStep: boolean; private pFixedUrl: string; @@ -59,7 +59,7 @@ export class CreateEndpointCfStep1Component extends CreateEndpointHelperComponen showAdvancedOptions = false; constructor( - private fb: FormBuilder, + private fb: UntypedFormBuilder, activatedRoute: ActivatedRoute, private snackBarService: SnackBarService, sessionService: SessionService, diff --git a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-connect/create-endpoint-connect.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-connect/create-endpoint-connect.component.spec.ts index 4413a91ef7..b30a4e5630 100644 --- a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-connect/create-endpoint-connect.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-connect/create-endpoint-connect.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -13,7 +13,7 @@ describe('CreateEndpointConnectComponent', () => { let component: CreateEndpointConnectComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CreateEndpointConnectComponent, diff --git a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-connect/create-endpoint-connect.component.ts b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-connect/create-endpoint-connect.component.ts index 8a909bdf45..e38b84a8cb 100644 --- a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-connect/create-endpoint-connect.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint-connect/create-endpoint-connect.component.ts @@ -8,7 +8,6 @@ import { IStepperStep, StepOnNextResult } from '../../../../shared/components/st import { SidePanelService } from '../../../../shared/services/side-panel.service'; import { ConnectEndpointConfig, ConnectEndpointService } from '../../connect.service'; - @Component({ selector: 'app-create-endpoint-connect', templateUrl: './create-endpoint-connect.component.html', diff --git a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint.component.spec.ts index 14a0724331..8f6ebe02c0 100644 --- a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClientModule } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { ActivatedRoute } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; @@ -20,7 +20,7 @@ describe('CreateEndpointComponent', () => { let component: CreateEndpointComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CreateEndpointComponent, diff --git a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint.component.ts b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint.component.ts index 9423ed3ced..316ddfa566 100644 --- a/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/create-endpoint/create-endpoint.component.ts @@ -9,11 +9,10 @@ import { ViewContainerRef, } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; +import { entityCatalog } from '@stratosui/store'; -import { entityCatalog } from '../../../../../store/src/entity-catalog/entity-catalog'; import { getIdFromRoute } from '../../../core/utils.service'; - @Component({ selector: 'app-create-endpoint', templateUrl: './create-endpoint.component.html', diff --git a/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint-step/edit-endpoint-step.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint-step/edit-endpoint-step.component.spec.ts index 2ee96995c5..12d2fb7191 100644 --- a/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint-step/edit-endpoint-step.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint-step/edit-endpoint-step.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { createBasicStoreModule } from '../../../../../../store/testing/public-api'; @@ -12,7 +12,7 @@ describe('EditEndpointStepComponent', () => { let component: EditEndpointStepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditEndpointStepComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint-step/edit-endpoint-step.component.ts b/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint-step/edit-endpoint-step.component.ts index e611a44bb8..8126188b70 100644 --- a/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint-step/edit-endpoint-step.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint-step/edit-endpoint-step.component.ts @@ -1,20 +1,20 @@ import { Component, OnDestroy } from '@angular/core'; -import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; +import { + EndpointModel, + getFullEndpointApiUrl, + EntityCatalogSchemas, + IStratosEndpointDefinition, + stratosEntityCatalog, + entityCatalog, + ActionState, +} from '@stratosui/store'; import { Observable, Subscription } from 'rxjs'; import { filter, first, map, pairwise, switchMap } from 'rxjs/operators'; -import { getFullEndpointApiUrl } from '../../../../../../store/src/endpoint-utils'; -import { entityCatalog } from '../../../../../../store/src/entity-catalog/entity-catalog'; -import { ActionState } from '../../../../../../store/src/reducers/api-request-reducer/types'; -import { stratosEntityCatalog } from '../../../../../../store/src/stratos-entity-catalog'; import { StepOnNextFunction } from '../../../../shared/components/stepper/step/step.component'; import { getSSOClientRedirectURI } from '../../endpoint-helpers'; -import { - EntityCatalogSchemas, - IStratosEndpointDefinition, -} from './../../../../../../store/src/entity-catalog/entity-catalog.types'; -import { EndpointModel } from './../../../../../../store/src/types/endpoint.types'; import { getIdFromRoute, safeUnsubscribe } from './../../../../core/utils.service'; import { IStepperStep } from './../../../../shared/components/stepper/step/step.component'; @@ -31,7 +31,7 @@ interface EndpointModelMap { export class EditEndpointStepComponent implements OnDestroy, IStepperStep { endpointID: string; - editEndpoint: FormGroup; + editEndpoint: UntypedFormGroup; showAdvancedFields = false; clientRedirectURI: string; endpointTypeSupportsSSO = false; @@ -47,14 +47,14 @@ export class EditEndpointStepComponent implements OnDestroy, IStepperStep { constructor( activatedRoute: ActivatedRoute, ) { - this.editEndpoint = new FormGroup({ - name: new FormControl('', [Validators.required as any]), - url: new FormControl('', [Validators.required as any]), - skipSSL: new FormControl(false), - setClientInfo: new FormControl(false), - clientID: new FormControl(''), - clientSecret: new FormControl(''), - allowSSO: new FormControl(false), + this.editEndpoint = new UntypedFormGroup({ + name: new UntypedFormControl('', [Validators.required as any]), + url: new UntypedFormControl('', [Validators.required as any]), + skipSSL: new UntypedFormControl(false), + setClientInfo: new UntypedFormControl(false), + clientID: new UntypedFormControl(''), + clientSecret: new UntypedFormControl(''), + allowSSO: new UntypedFormControl(false), }); this.clientRedirectURI = getSSOClientRedirectURI(); diff --git a/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint.component.spec.ts index 6dbdbb0753..8c5f5de2bf 100644 --- a/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/edit-endpoint/edit-endpoint.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; @@ -16,7 +16,7 @@ describe('EditEndpointComponent', () => { let component: EditEndpointComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EditEndpointComponent, EditEndpointStepComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/endpoints/endpoint-helpers.ts b/src/frontend/packages/core/src/features/endpoints/endpoint-helpers.ts index 10b9a13fff..5b077d1cfa 100644 --- a/src/frontend/packages/core/src/features/endpoints/endpoint-helpers.ts +++ b/src/frontend/packages/core/src/features/endpoints/endpoint-helpers.ts @@ -1,16 +1,16 @@ import { Type } from '@angular/core'; import { Store } from '@ngrx/store'; -import { Observable } from 'rxjs'; -import { filter, first, map } from 'rxjs/operators'; - -import { AppState, EndpointOnlyAppState } from '../../../../store/src/app-state'; import { + AppState, + EndpointOnlyAppState, endpointEntitiesSelector, endpointsEntityRequestDataSelector, -} from '../../../../store/src/selectors/endpoint.selectors'; -import { EndpointModel } from '../../../../store/src/types/endpoint.types'; -import { EndpointListDetailsComponent } from '../../shared/components/list/list-types/endpoint/endpoint-list.helpers'; + EndpointModel, +} from '@stratosui/store'; +import { Observable } from 'rxjs'; +import { filter, first, map } from 'rxjs/operators'; +import { EndpointListDetailsComponent } from '../../shared/components/list/list-types/endpoint/endpoint-list.helpers'; export function getEndpointUsername(endpoint: EndpointModel) { return endpoint && endpoint.user ? endpoint.user.name : '-'; diff --git a/src/frontend/packages/core/src/features/endpoints/endpoints-page/endpoints-page.component.spec.ts b/src/frontend/packages/core/src/features/endpoints/endpoints-page/endpoints-page.component.spec.ts index 9773e3ab52..5009011ab5 100644 --- a/src/frontend/packages/core/src/features/endpoints/endpoints-page/endpoints-page.component.spec.ts +++ b/src/frontend/packages/core/src/features/endpoints/endpoints-page/endpoints-page.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { StoreModule } from '@ngrx/store'; @@ -18,7 +18,7 @@ describe('EndpointsPageComponent', () => { let component: EndpointsPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EndpointsPageComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/endpoints/endpoints-page/endpoints-page.component.ts b/src/frontend/packages/core/src/features/endpoints/endpoints-page/endpoints-page.component.ts index d69feadb7f..cd20e1accf 100644 --- a/src/frontend/packages/core/src/features/endpoints/endpoints-page/endpoints-page.component.ts +++ b/src/frontend/packages/core/src/features/endpoints/endpoints-page/endpoints-page.component.ts @@ -11,13 +11,10 @@ import { ViewContainerRef, } from '@angular/core'; import { Store } from '@ngrx/store'; +import { EndpointOnlyAppState, RouterNav, selectDashboardState, selectSessionData } from '@stratosui/store'; import { combineLatest, Observable, of, Subscription } from 'rxjs'; import { delay, first, map, switchMap, tap } from 'rxjs/operators'; -import { RouterNav } from '../../../../../store/src/actions/router.actions'; -import { EndpointOnlyAppState } from '../../../../../store/src/app-state'; -import { selectSessionData } from '../../../../../store/src/reducers/auth.reducer'; -import { selectDashboardState } from '../../../../../store/src/selectors/dashboard.selectors'; import { CustomizationService, CustomizationsMetadata } from '../../../core/customizations.types'; import { EndpointsService } from '../../../core/endpoints.service'; import { diff --git a/src/frontend/packages/core/src/features/endpoints/endpoints.module.ts b/src/frontend/packages/core/src/features/endpoints/endpoints.module.ts index df423b0f24..35f2a7c91d 100644 --- a/src/frontend/packages/core/src/features/endpoints/endpoints.module.ts +++ b/src/frontend/packages/core/src/features/endpoints/endpoints.module.ts @@ -21,35 +21,26 @@ import { EndpointsPageComponent } from './endpoints-page/endpoints-page.componen import { EndpointsRoutingModule } from './endpoints.routing'; @NgModule({ - imports: [ - CoreModule, - SharedModule, - EndpointsRoutingModule, - CreateEndpointModule, - ], - declarations: [ - EndpointsPageComponent, - ConnectEndpointDialogComponent, - CredentialsAuthFormComponent, - SSOAuthFormComponent, - NoneAuthFormComponent, - EditEndpointComponent, - EditEndpointStepComponent, - BackupRestoreEndpointsComponent, - BackupEndpointsComponent, - RestoreEndpointsComponent, - BackupCheckboxCellComponent, - BackupConnectionCellComponent, - TokenEndpointComponent, - ], - entryComponents: [ - ConnectEndpointDialogComponent, - CredentialsAuthFormComponent, - SSOAuthFormComponent, - NoneAuthFormComponent, - BackupCheckboxCellComponent, - BackupConnectionCellComponent, - TokenEndpointComponent - ] + imports: [ + CoreModule, + SharedModule, + EndpointsRoutingModule, + CreateEndpointModule, + ], + declarations: [ + EndpointsPageComponent, + ConnectEndpointDialogComponent, + CredentialsAuthFormComponent, + SSOAuthFormComponent, + NoneAuthFormComponent, + EditEndpointComponent, + EditEndpointStepComponent, + BackupRestoreEndpointsComponent, + BackupEndpointsComponent, + RestoreEndpointsComponent, + BackupCheckboxCellComponent, + BackupConnectionCellComponent, + TokenEndpointComponent, + ] }) export class EndpointsModule { } diff --git a/src/frontend/packages/core/src/features/error-page/error-page.module.ts b/src/frontend/packages/core/src/features/error-page/error-page.module.ts index 35f88bba05..7db0f0ca0a 100644 --- a/src/frontend/packages/core/src/features/error-page/error-page.module.ts +++ b/src/frontend/packages/core/src/features/error-page/error-page.module.ts @@ -1,4 +1,5 @@ import { NgModule } from '@angular/core'; + import { CoreModule } from '../../core/core.module'; import { SharedModule } from '../../shared/shared.module'; import { ErrorPageRoutingModule } from './error-page.routing'; diff --git a/src/frontend/packages/core/src/features/error-page/error-page.routing.ts b/src/frontend/packages/core/src/features/error-page/error-page.routing.ts index 2d944df4ca..a6fd5d840e 100644 --- a/src/frontend/packages/core/src/features/error-page/error-page.routing.ts +++ b/src/frontend/packages/core/src/features/error-page/error-page.routing.ts @@ -1,5 +1,6 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; + import { ErrorPageComponent } from './error-page/error-page.component'; const errorPage: Routes = [{ diff --git a/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.spec.ts b/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.spec.ts index f8cd0828ea..e0d82cd764 100644 --- a/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.spec.ts +++ b/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -12,7 +12,7 @@ describe('ErrorPageComponent', () => { let component: ErrorPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ErrorPageComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.theme.scss b/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.theme.scss index d36a63d590..e5ddfa2fdd 100644 --- a/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.theme.scss +++ b/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin error-page-theme($theme, $app-theme) { $background-color: map-get($app-theme, app-background-color); .error-page { diff --git a/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.ts b/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.ts index 67035ddeb1..202c425c9d 100644 --- a/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.ts +++ b/src/frontend/packages/core/src/features/error-page/error-page/error-page.component.ts @@ -2,18 +2,20 @@ import { Component, OnInit } from '@angular/core'; import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; +import { + InternalEventMonitorFactory, + EndpointModel, + getPreviousRoutingState, + StratosStatus, + endpointEntityType, + stratosEntityCatalog, + InternalEventState, + SendClearEndpointEventsAction, + AppState, +} from '@stratosui/store'; import { Observable, of } from 'rxjs'; import { first, map, withLatestFrom } from 'rxjs/operators'; -import { SendClearEndpointEventsAction } from '../../../../../store/src/actions/internal-events.actions'; -import { AppState } from '../../../../../store/src/app-state'; -import { endpointEntityType } from '../../../../../store/src/helpers/stratos-entity-factory'; -import { InternalEventMonitorFactory } from '../../../../../store/src/monitors/internal-event-monitor.factory'; -import { stratosEntityCatalog } from '../../../../../store/src/stratos-entity-catalog'; -import { EndpointModel } from '../../../../../store/src/types/endpoint.types'; -import { InternalEventState } from '../../../../../store/src/types/internal-events.types'; -import { getPreviousRoutingState } from '../../../../../store/src/types/routing.type'; -import { StratosStatus } from '../../../../../store/src/types/shared.types'; import { eventReturnUrlParam } from '../../event-page/events-page/events-page.component'; @Component({ diff --git a/src/frontend/packages/core/src/features/event-page/event-page.module.ts b/src/frontend/packages/core/src/features/event-page/event-page.module.ts index 05f50d7fb5..7821c7381b 100644 --- a/src/frontend/packages/core/src/features/event-page/event-page.module.ts +++ b/src/frontend/packages/core/src/features/event-page/event-page.module.ts @@ -1,8 +1,9 @@ import { NgModule } from '@angular/core'; -import { EventsPageComponent } from './events-page/events-page.component'; + import { CoreModule } from '../../core/core.module'; import { SharedModule } from '../../shared/shared.module'; import { EventPageRoutingModule } from './event-page.routing'; +import { EventsPageComponent } from './events-page/events-page.component'; @NgModule({ declarations: [EventsPageComponent], diff --git a/src/frontend/packages/core/src/features/event-page/event-page.routing.ts b/src/frontend/packages/core/src/features/event-page/event-page.routing.ts index d2c2dc4a1b..3624e04d2d 100644 --- a/src/frontend/packages/core/src/features/event-page/event-page.routing.ts +++ b/src/frontend/packages/core/src/features/event-page/event-page.routing.ts @@ -1,5 +1,6 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; + import { EventsPageComponent } from './events-page/events-page.component'; const eventPage: Routes = [{ diff --git a/src/frontend/packages/core/src/features/event-page/events-page/events-page.component.spec.ts b/src/frontend/packages/core/src/features/event-page/events-page/events-page.component.spec.ts index c79c2d4d5d..04848910f6 100644 --- a/src/frontend/packages/core/src/features/event-page/events-page/events-page.component.spec.ts +++ b/src/frontend/packages/core/src/features/event-page/events-page/events-page.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -13,7 +13,7 @@ describe('EventsPageComponent', () => { let component: EventsPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [EventsPageComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/event-page/events-page/events-page.component.ts b/src/frontend/packages/core/src/features/event-page/events-page/events-page.component.ts index 4730af28cd..102a044542 100644 --- a/src/frontend/packages/core/src/features/event-page/events-page/events-page.component.ts +++ b/src/frontend/packages/core/src/features/event-page/events-page/events-page.component.ts @@ -1,11 +1,10 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; +import { AppState, getPreviousRoutingState } from '@stratosui/store'; import { BehaviorSubject, Observable } from 'rxjs'; import { distinctUntilChanged, first, map, share, switchMap, tap } from 'rxjs/operators'; -import { AppState } from '../../../../../store/src/app-state'; -import { getPreviousRoutingState } from '../../../../../store/src/types/routing.type'; import { GlobalEventService, IGlobalEvent } from '../../../shared/global-events.service'; export const eventReturnUrlParam = 'returnFromEvents'; diff --git a/src/frontend/packages/core/src/features/home/home.module.ts b/src/frontend/packages/core/src/features/home/home.module.ts index 30d9845f91..b706fb5d83 100644 --- a/src/frontend/packages/core/src/features/home/home.module.ts +++ b/src/frontend/packages/core/src/features/home/home.module.ts @@ -12,7 +12,6 @@ import { HomePageEndpointCardComponent } from './home/home-page-endpoint-card/ho import { HomePageComponent } from './home/home-page.component'; import { HomeShortcutsComponent } from './home/home-shortcuts/home-shortcuts.component'; - @NgModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/features/home/home/default-endpoint-home-component/default-endpoint-home-component.component.spec.ts b/src/frontend/packages/core/src/features/home/home/default-endpoint-home-component/default-endpoint-home-component.component.spec.ts index a8c5ca650c..c6b67938f7 100644 --- a/src/frontend/packages/core/src/features/home/home/default-endpoint-home-component/default-endpoint-home-component.component.spec.ts +++ b/src/frontend/packages/core/src/features/home/home/default-endpoint-home-component/default-endpoint-home-component.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { DefaultEndpointHomeComponent } from './default-endpoint-home-component.component'; @@ -6,7 +6,7 @@ describe('DefaultEndpointHomeComponentComponent', () => { let component: DefaultEndpointHomeComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ DefaultEndpointHomeComponent ] }) diff --git a/src/frontend/packages/core/src/features/home/home/favorites-meta-card/favorites-meta-card.component.spec.ts b/src/frontend/packages/core/src/features/home/home/favorites-meta-card/favorites-meta-card.component.spec.ts index 72ac89c8f4..2ac5b2fd22 100644 --- a/src/frontend/packages/core/src/features/home/home/favorites-meta-card/favorites-meta-card.component.spec.ts +++ b/src/frontend/packages/core/src/features/home/home/favorites-meta-card/favorites-meta-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../../test-framework/core-test.helper'; import { FavoritesMetaCardComponent } from './favorites-meta-card.component'; @@ -7,7 +7,7 @@ describe('FavoritesMetaCardComponent', () => { let component: FavoritesMetaCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [...BaseTestModules], }) diff --git a/src/frontend/packages/core/src/features/home/home/favorites-side-panel/favorites-side-panel.component.spec.ts b/src/frontend/packages/core/src/features/home/home/favorites-side-panel/favorites-side-panel.component.spec.ts index ba66b4964d..9c5b66801b 100644 --- a/src/frontend/packages/core/src/features/home/home/favorites-side-panel/favorites-side-panel.component.spec.ts +++ b/src/frontend/packages/core/src/features/home/home/favorites-side-panel/favorites-side-panel.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { FavoritesSidePanelComponent } from './favorites-side-panel.component'; @@ -6,7 +6,7 @@ describe('FavoritesSidePanelComponent', () => { let component: FavoritesSidePanelComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ FavoritesSidePanelComponent ] }) diff --git a/src/frontend/packages/core/src/features/home/home/home-page-endpoint-card/home-page-endpoint-card.component.spec.ts b/src/frontend/packages/core/src/features/home/home/home-page-endpoint-card/home-page-endpoint-card.component.spec.ts index 3a027f1a0a..d4667d96b3 100644 --- a/src/frontend/packages/core/src/features/home/home/home-page-endpoint-card/home-page-endpoint-card.component.spec.ts +++ b/src/frontend/packages/core/src/features/home/home/home-page-endpoint-card/home-page-endpoint-card.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { EndpointModel } from '../../../../../../store/src/types/endpoint.types'; @@ -13,7 +13,7 @@ describe('HomePageEndpointCardComponent', () => { let component: HomePageEndpointCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ HomePageEndpointCardComponent ], imports: [ diff --git a/src/frontend/packages/core/src/features/home/home/home-page.component.spec.ts b/src/frontend/packages/core/src/features/home/home/home-page.component.spec.ts index 50bc61bf43..6e3cbc4128 100644 --- a/src/frontend/packages/core/src/features/home/home/home-page.component.spec.ts +++ b/src/frontend/packages/core/src/features/home/home/home-page.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createEmptyStoreModule } from '@stratosui/store/testing'; @@ -15,7 +15,7 @@ describe('HomePageComponent', () => { let component: HomePageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [HomePageComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/home/home/home-page.component.ts b/src/frontend/packages/core/src/features/home/home/home-page.component.ts index 5f5166ac62..29bdc912e3 100644 --- a/src/frontend/packages/core/src/features/home/home/home-page.component.ts +++ b/src/frontend/packages/core/src/features/home/home/home-page.component.ts @@ -11,19 +11,22 @@ import { ViewChildren, } from '@angular/core'; import { Store } from '@ngrx/store'; +import { + IUserFavoritesGroups, + EndpointModel, + entityCatalog, + AuthState, + RouterNav, + AppState, + UserFavoriteManager, + selectDashboardState, + SetHomeCardLayoutAction, + SetDashboardStateValueAction, +} from '@stratosui/store'; import { BehaviorSubject, combineLatest, Observable, of, Subscription } from 'rxjs'; import { debounceTime, filter, first, map, startWith } from 'rxjs/operators'; -import { SetHomeCardLayoutAction } from '../../../../../store/src/actions/dashboard-actions'; -import { RouterNav } from '../../../../../store/src/actions/router.actions'; -import { AppState } from '../../../../../store/src/app-state'; -import { EndpointModel, entityCatalog } from '../../../../../store/src/public-api'; -import { AuthState } from '../../../../../store/src/reducers/auth.reducer'; -import { selectDashboardState } from '../../../../../store/src/selectors/dashboard.selectors'; -import { UserFavoriteManager } from '../../../../../store/src/user-favorite-manager'; import { EndpointsService } from '../../../core/endpoints.service'; -import { SetDashboardStateValueAction } from './../../../../../store/src/actions/dashboard-actions'; -import { IUserFavoritesGroups } from './../../../../../store/src/types/favorite-groups.types'; import { HomePageCardLayout } from './../home.types'; import { HomePageEndpointCardComponent } from './home-page-endpoint-card/home-page-endpoint-card.component'; diff --git a/src/frontend/packages/core/src/features/home/home/home-shortcuts/home-shortcuts.component.spec.ts b/src/frontend/packages/core/src/features/home/home/home-shortcuts/home-shortcuts.component.spec.ts index 3495a47019..3298bcc0d8 100644 --- a/src/frontend/packages/core/src/features/home/home/home-shortcuts/home-shortcuts.component.spec.ts +++ b/src/frontend/packages/core/src/features/home/home/home-shortcuts/home-shortcuts.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { HomeShortcutsComponent } from './home-shortcuts.component'; @@ -6,7 +6,7 @@ describe('HomeShortcutsComponent', () => { let component: HomeShortcutsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ HomeShortcutsComponent ] }) diff --git a/src/frontend/packages/core/src/features/login/login-page/login-page.component.spec.ts b/src/frontend/packages/core/src/features/login/login-page/login-page.component.spec.ts index a5c220bcee..3edd83ce06 100644 --- a/src/frontend/packages/core/src/features/login/login-page/login-page.component.spec.ts +++ b/src/frontend/packages/core/src/features/login/login-page/login-page.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { StoreModule } from '@ngrx/store'; @@ -13,7 +13,7 @@ describe('LoginPageComponent', () => { let component: LoginPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [LoginPageComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/login/login-page/login-page.component.ts b/src/frontend/packages/core/src/features/login/login-page/login-page.component.ts index 385c1c9f9f..70bf67bb90 100644 --- a/src/frontend/packages/core/src/features/login/login-page/login-page.component.ts +++ b/src/frontend/packages/core/src/features/login/login-page/login-page.component.ts @@ -1,14 +1,10 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; import { NgForm } from '@angular/forms'; import { Store } from '@ngrx/store'; +import { InternalAppState, RouterRedirect, RouterNav, Login, VerifySession, AuthState } from '@stratosui/store'; import { Observable, Subscription } from 'rxjs'; import { map, startWith, takeWhile, tap } from 'rxjs/operators'; -import { Login, VerifySession } from '../../../../../store/src/actions/auth.actions'; -import { RouterNav } from '../../../../../store/src/actions/router.actions'; -import { InternalAppState } from '../../../../../store/src/app-state'; -import { AuthState } from '../../../../../store/src/reducers/auth.reducer'; -import { RouterRedirect } from '../../../../../store/src/reducers/routing.reducer'; import { queryParamMap } from '../../../core/auth-guard.service'; @Component({ diff --git a/src/frontend/packages/core/src/features/login/login.module.ts b/src/frontend/packages/core/src/features/login/login.module.ts index 64649d97ad..ae41aceb3d 100644 --- a/src/frontend/packages/core/src/features/login/login.module.ts +++ b/src/frontend/packages/core/src/features/login/login.module.ts @@ -5,7 +5,6 @@ import { SharedModule } from '../../shared/shared.module'; import { LoginPageComponent } from './login-page/login-page.component'; import { LogoutPageComponent } from './logout-page/logout-page.component'; - @NgModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/features/login/logout-page/logout-page.component.spec.ts b/src/frontend/packages/core/src/features/login/logout-page/logout-page.component.spec.ts index 5029385a87..e3d5a0aa45 100644 --- a/src/frontend/packages/core/src/features/login/logout-page/logout-page.component.spec.ts +++ b/src/frontend/packages/core/src/features/login/logout-page/logout-page.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { StoreModule } from '@ngrx/store'; @@ -13,7 +13,7 @@ describe('LogoutPageComponent', () => { let component: LogoutPageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [LogoutPageComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/login/logout-page/logout-page.component.ts b/src/frontend/packages/core/src/features/login/logout-page/logout-page.component.ts index 13cea014a1..54dfd01ecd 100644 --- a/src/frontend/packages/core/src/features/login/logout-page/logout-page.component.ts +++ b/src/frontend/packages/core/src/features/login/logout-page/logout-page.component.ts @@ -1,11 +1,9 @@ import { Component, OnInit } from '@angular/core'; import { Store } from '@ngrx/store'; +import { Logout, AppState } from '@stratosui/store'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { Logout } from '../../../../../store/src/actions/auth.actions'; -import { AppState } from '../../../../../store/src/app-state'; - @Component({ selector: 'app-logout-page', templateUrl: './logout-page.component.html', diff --git a/src/frontend/packages/core/src/features/metrics/metrics-endpoint-details/metrics-endpoint-details.component.spec.ts b/src/frontend/packages/core/src/features/metrics/metrics-endpoint-details/metrics-endpoint-details.component.spec.ts index b825e86948..2dd37c9a16 100644 --- a/src/frontend/packages/core/src/features/metrics/metrics-endpoint-details/metrics-endpoint-details.component.spec.ts +++ b/src/frontend/packages/core/src/features/metrics/metrics-endpoint-details/metrics-endpoint-details.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { createBasicStoreModule } from '../../../../../store/testing/src/store-test-helper'; import { CoreTestingModule } from '../../../../test-framework/core-test.modules'; @@ -11,7 +11,7 @@ describe('MetricsEndpointDetailsComponent', () => { let component: MetricsEndpointDetailsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/features/metrics/metrics-endpoint-details/metrics-endpoint-details.component.ts b/src/frontend/packages/core/src/features/metrics/metrics-endpoint-details/metrics-endpoint-details.component.ts index ff0d463ace..b5d49e1656 100644 --- a/src/frontend/packages/core/src/features/metrics/metrics-endpoint-details/metrics-endpoint-details.component.ts +++ b/src/frontend/packages/core/src/features/metrics/metrics-endpoint-details/metrics-endpoint-details.component.ts @@ -1,15 +1,12 @@ import { Component, Input } from '@angular/core'; import { Store } from '@ngrx/store'; +import { MetricsStratosAction, AppState, EndpointModel } from '@stratosui/store'; import { BehaviorSubject, combineLatest, Observable } from 'rxjs'; import { distinctUntilChanged, filter, map, publishReplay, refCount, tap } from 'rxjs/operators'; -import { MetricsStratosAction } from '../../../../../store/src/actions/metrics-api.actions'; -import { AppState } from '../../../../../store/src/app-state'; import { EndpointListDetailsComponent } from '../../../shared/components/list/list-types/endpoint/endpoint-list.helpers'; import { mapMetricsData } from '../metrics.helpers'; import { MetricsEndpointProvider, MetricsService } from '../services/metrics-service'; -import { EndpointModel } from './../../../../../store/src/types/endpoint.types'; - interface MetricsDetailsInfo { ok: number; diff --git a/src/frontend/packages/core/src/features/metrics/metrics.helpers.ts b/src/frontend/packages/core/src/features/metrics/metrics.helpers.ts index 86af252c22..2419698991 100644 --- a/src/frontend/packages/core/src/features/metrics/metrics.helpers.ts +++ b/src/frontend/packages/core/src/features/metrics/metrics.helpers.ts @@ -1,9 +1,7 @@ +import { getFullEndpointApiUrl, StratosStatus, entityCatalog } from '@stratosui/store'; import { Observable, of as observableOf } from 'rxjs'; -import { getFullEndpointApiUrl } from '../../../../store/src/endpoint-utils'; -import { StratosStatus } from '../../../../store/src/types/shared.types'; import { EndpointIcon } from '../endpoints/endpoint-helpers'; -import { entityCatalog } from './../../../../store/src/entity-catalog/entity-catalog'; import { MetricsEndpointProvider } from './services/metrics-service'; // Info for an endpoint that a metrics endpoint provides for diff --git a/src/frontend/packages/core/src/features/metrics/metrics.module.ts b/src/frontend/packages/core/src/features/metrics/metrics.module.ts index 0fa61010da..534f89bb1b 100644 --- a/src/frontend/packages/core/src/features/metrics/metrics.module.ts +++ b/src/frontend/packages/core/src/features/metrics/metrics.module.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { stratosEntityCatalog } from '@stratosui/store'; -import { stratosEntityCatalog } from '../../../../store/src/stratos-entity-catalog'; import { CoreModule } from '../../core/core.module'; import { BaseEndpointAuth } from '../../core/endpoint-auth'; import { SharedModule } from '../../shared/shared.module'; @@ -11,19 +11,16 @@ import { MetricsComponent } from './metrics/metrics.component'; import { MetricsService } from './services/metrics-service'; @NgModule({ - imports: [ - CoreModule, - CommonModule, - SharedModule, - MetricsRoutingModule, - ], - declarations: [MetricsComponent, MetricsEndpointDetailsComponent], - providers: [ - MetricsService, - ], - entryComponents: [ - MetricsEndpointDetailsComponent, - ] + imports: [ + CoreModule, + CommonModule, + SharedModule, + MetricsRoutingModule, + ], + declarations: [MetricsComponent, MetricsEndpointDetailsComponent], + providers: [ + MetricsService, + ] }) export class MetricsModule { diff --git a/src/frontend/packages/core/src/features/metrics/metrics/metrics.component.spec.ts b/src/frontend/packages/core/src/features/metrics/metrics/metrics.component.spec.ts index ae19f047f3..a3671b3d03 100644 --- a/src/frontend/packages/core/src/features/metrics/metrics/metrics.component.spec.ts +++ b/src/frontend/packages/core/src/features/metrics/metrics/metrics.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -16,7 +16,7 @@ describe('MetricsComponent', () => { let component: MetricsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CommonModule, diff --git a/src/frontend/packages/core/src/features/metrics/metrics/metrics.component.ts b/src/frontend/packages/core/src/features/metrics/metrics/metrics.component.ts index 2fb80c826d..0d8c68799b 100644 --- a/src/frontend/packages/core/src/features/metrics/metrics/metrics.component.ts +++ b/src/frontend/packages/core/src/features/metrics/metrics/metrics.component.ts @@ -1,15 +1,10 @@ import { Component } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; +import { MetricsAPIAction, MetricsAPITargets, MetricsStratosAction, AppState } from '@stratosui/store'; import { Observable } from 'rxjs'; import { filter, first, map } from 'rxjs/operators'; -import { - MetricsAPIAction, - MetricsAPITargets, - MetricsStratosAction, -} from '../../../../../store/src/actions/metrics-api.actions'; -import { AppState } from '../../../../../store/src/app-state'; import { getIdFromRoute } from '../../../core/utils.service'; import { IHeaderBreadcrumb } from '../../../shared/components/page-header/page-header.types'; import { EndpointIcon } from '../../endpoints/endpoint-helpers'; diff --git a/src/frontend/packages/core/src/features/metrics/services/metrics-service.ts b/src/frontend/packages/core/src/features/metrics/services/metrics-service.ts index 66f4eaacfc..8fbf0c977e 100644 --- a/src/frontend/packages/core/src/features/metrics/services/metrics-service.ts +++ b/src/frontend/packages/core/src/features/metrics/services/metrics-service.ts @@ -1,13 +1,15 @@ import { Injectable } from '@angular/core'; +import { + APIResource, + EntityInfo, + EndpointModel, + getFullEndpointApiUrl, + PaginationMonitor, + stratosEntityCatalog, +} from '@stratosui/store'; import { Observable } from 'rxjs'; import { map, publishReplay, refCount } from 'rxjs/operators'; -import { getFullEndpointApiUrl } from '../../../../../store/src/endpoint-utils'; -import { PaginationMonitor } from '../../../../../store/src/monitors/pagination-monitor'; -import { stratosEntityCatalog } from '../../../../../store/src/stratos-entity-catalog'; -import { APIResource, EntityInfo } from '../../../../../store/src/types/api.types'; -import { EndpointModel } from '../../../../../store/src/types/endpoint.types'; - export interface MetricsEndpointProvider { provider: EndpointModel; endpoints: EndpointModel[]; diff --git a/src/frontend/packages/core/src/features/no-endpoints-non-admin/no-endpoints-non-admin.component.spec.ts b/src/frontend/packages/core/src/features/no-endpoints-non-admin/no-endpoints-non-admin.component.spec.ts index 4e8f59f873..1f2a1e2421 100644 --- a/src/frontend/packages/core/src/features/no-endpoints-non-admin/no-endpoints-non-admin.component.spec.ts +++ b/src/frontend/packages/core/src/features/no-endpoints-non-admin/no-endpoints-non-admin.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -13,7 +13,7 @@ describe('NoEndpointsNonAdminComponent', () => { let component: NoEndpointsNonAdminComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [NoEndpointsNonAdminComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/setup/domain-mismatch/domain-mismatch.component.spec.ts b/src/frontend/packages/core/src/features/setup/domain-mismatch/domain-mismatch.component.spec.ts index 857bd97ec8..24354acb04 100644 --- a/src/frontend/packages/core/src/features/setup/domain-mismatch/domain-mismatch.component.spec.ts +++ b/src/frontend/packages/core/src/features/setup/domain-mismatch/domain-mismatch.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { DomainMismatchComponent } from './domain-mismatch.component'; import { MDAppModule } from '../../../core/md.module'; @@ -9,7 +9,7 @@ describe('DomainMismatchComponent', () => { let component: DomainMismatchComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ DomainMismatchComponent, IntroScreenComponent, StratosTitleComponent ], imports: [ diff --git a/src/frontend/packages/core/src/features/setup/local-account-wizard/local-account-wizard.component.spec.ts b/src/frontend/packages/core/src/features/setup/local-account-wizard/local-account-wizard.component.spec.ts index a15ea5f550..b353f8869a 100644 --- a/src/frontend/packages/core/src/features/setup/local-account-wizard/local-account-wizard.component.spec.ts +++ b/src/frontend/packages/core/src/features/setup/local-account-wizard/local-account-wizard.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -17,7 +17,7 @@ describe('LocalAccountWizardComponent', () => { let component: LocalAccountWizardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/features/setup/local-account-wizard/local-account-wizard.component.ts b/src/frontend/packages/core/src/features/setup/local-account-wizard/local-account-wizard.component.ts index 2b5dbdfcb4..cce127a3bf 100644 --- a/src/frontend/packages/core/src/features/setup/local-account-wizard/local-account-wizard.component.ts +++ b/src/frontend/packages/core/src/features/setup/local-account-wizard/local-account-wizard.component.ts @@ -1,14 +1,17 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { AbstractControl, FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { Store } from '@ngrx/store'; +import { + InternalAppState, + UAASetupState, + LocalAdminSetupData, + AuthState, + VerifySession, + SetupSaveConfig, +} from '@stratosui/store'; import { BehaviorSubject, Observable } from 'rxjs'; import { delay, filter, map, take, tap } from 'rxjs/operators'; -import { VerifySession } from '../../../../../store/src/actions/auth.actions'; -import { SetupSaveConfig } from '../../../../../store/src/actions/setup.actions'; -import { InternalAppState } from '../../../../../store/src/app-state'; -import { AuthState } from '../../../../../store/src/reducers/auth.reducer'; -import { LocalAdminSetupData, UAASetupState } from '../../../../../store/src/types/uaa-setup.types'; import { APP_TITLE } from '../../../core/core.types'; import { StepOnNextFunction } from '../../../shared/components/stepper/step/step.component'; @@ -19,7 +22,7 @@ import { StepOnNextFunction } from '../../../shared/components/stepper/step/step }) export class LocalAccountWizardComponent implements OnInit { - passwordForm: FormGroup; + passwordForm: UntypedFormGroup; validateLocalAuthForm: Observable; applyingSetup$ = new BehaviorSubject(false); @@ -28,9 +31,9 @@ export class LocalAccountWizardComponent implements OnInit { constructor(private store: Store>, @Inject(APP_TITLE) public title: string) { } ngOnInit() { - this.passwordForm = new FormGroup({ - adminPassword: new FormControl('', [Validators.required as any]), - adminPasswordConfirm: new FormControl('', [Validators.required as any]) + this.passwordForm = new UntypedFormGroup({ + adminPassword: new UntypedFormControl('', [Validators.required as any]), + adminPasswordConfirm: new UntypedFormControl('', [Validators.required as any]) }); this.validateLocalAuthForm = this.passwordForm.valueChanges.pipe( diff --git a/src/frontend/packages/core/src/features/setup/setup-welcome/setup-welcome.component.spec.ts b/src/frontend/packages/core/src/features/setup/setup-welcome/setup-welcome.component.spec.ts index 4e74e46d21..2591e40f48 100644 --- a/src/frontend/packages/core/src/features/setup/setup-welcome/setup-welcome.component.spec.ts +++ b/src/frontend/packages/core/src/features/setup/setup-welcome/setup-welcome.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -16,7 +16,7 @@ describe('SetupWelcomeComponent', () => { let component: SetupWelcomeComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/features/setup/setup-welcome/setup-welcome.component.ts b/src/frontend/packages/core/src/features/setup/setup-welcome/setup-welcome.component.ts index 725898888e..676d80dfec 100644 --- a/src/frontend/packages/core/src/features/setup/setup-welcome/setup-welcome.component.ts +++ b/src/frontend/packages/core/src/features/setup/setup-welcome/setup-welcome.component.ts @@ -1,11 +1,10 @@ -import { APP_TITLE } from './../../../core/core.types'; import { Component, Inject } from '@angular/core'; import { Store } from '@ngrx/store'; +import { RouterNav, GeneralEntityAppState } from '@stratosui/store'; -import { RouterNav } from '../../../../../store/src/actions/router.actions'; -import { GeneralEntityAppState } from '../../../../../store/src/app-state'; import { BASE_REDIRECT_QUERY } from '../../../shared/components/stepper/stepper.types'; import { ITileConfig, ITileData } from '../../../shared/components/tile/tile-selector.types'; +import { APP_TITLE } from './../../../core/core.types'; @Component({ selector: 'app-setup-welcome', @@ -47,5 +46,4 @@ export class SetupWelcomeComponent { } } - } diff --git a/src/frontend/packages/core/src/features/setup/setup.module.ts b/src/frontend/packages/core/src/features/setup/setup.module.ts index c730116607..6027cdf4ff 100644 --- a/src/frontend/packages/core/src/features/setup/setup.module.ts +++ b/src/frontend/packages/core/src/features/setup/setup.module.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; +import { ThemeService } from '@stratosui/store'; -import { ThemeService } from '../../../../store/src/theme.service'; import { CoreModule } from '../../core/core.module'; import { SharedModule } from '../../shared/shared.module'; import { DomainMismatchComponent } from './domain-mismatch/domain-mismatch.component'; @@ -9,7 +9,6 @@ import { SetupWelcomeComponent } from './setup-welcome/setup-welcome.component'; import { ConsoleUaaWizardComponent } from './uaa-wizard/console-uaa-wizard.component'; import { UpgradePageComponent } from './upgrade-page/upgrade-page.component'; - @NgModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/features/setup/uaa-wizard/console-uaa-wizard.component.spec.ts b/src/frontend/packages/core/src/features/setup/uaa-wizard/console-uaa-wizard.component.spec.ts index 56353578c4..6a06545cf8 100644 --- a/src/frontend/packages/core/src/features/setup/uaa-wizard/console-uaa-wizard.component.spec.ts +++ b/src/frontend/packages/core/src/features/setup/uaa-wizard/console-uaa-wizard.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; @@ -18,7 +18,7 @@ describe('ConsoleUaaWizardComponent', () => { let component: ConsoleUaaWizardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/features/setup/uaa-wizard/console-uaa-wizard.component.ts b/src/frontend/packages/core/src/features/setup/uaa-wizard/console-uaa-wizard.component.ts index 677d623ea1..d72e9a56ac 100644 --- a/src/frontend/packages/core/src/features/setup/uaa-wizard/console-uaa-wizard.component.ts +++ b/src/frontend/packages/core/src/features/setup/uaa-wizard/console-uaa-wizard.component.ts @@ -1,14 +1,17 @@ import { Component, Inject, OnInit, ViewEncapsulation } from '@angular/core'; -import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { Store } from '@ngrx/store'; +import { + VerifySession, + SetupConsoleGetScopes, + SetupSaveConfig, + AuthState, + UAASetupState, + InternalAppState, +} from '@stratosui/store'; import { BehaviorSubject, Observable } from 'rxjs'; import { delay, filter, map, skipWhile, take } from 'rxjs/operators'; -import { VerifySession } from '../../../../../store/src/actions/auth.actions'; -import { SetupConsoleGetScopes, SetupSaveConfig } from '../../../../../store/src/actions/setup.actions'; -import { InternalAppState } from '../../../../../store/src/app-state'; -import { AuthState } from '../../../../../store/src/reducers/auth.reducer'; -import { UAASetupState } from '../../../../../store/src/types/uaa-setup.types'; import { APP_TITLE } from '../../../core/core.types'; import { StepOnNextFunction } from '../../../shared/components/stepper/step/step.component'; import { getSSOClientRedirectURI } from '../../endpoints/endpoint-helpers'; @@ -29,7 +32,7 @@ export class ConsoleUaaWizardComponent implements OnInit { this.clientRedirectURI = getSSOClientRedirectURI(); } - uaaForm: FormGroup; + uaaForm: UntypedFormGroup; validateUAAForm: Observable; uaaScopes = []; selectedScope = ''; @@ -112,14 +115,14 @@ export class ConsoleUaaWizardComponent implements OnInit { })); } ngOnInit() { - this.uaaForm = new FormGroup({ - apiUrl: new FormControl('', [Validators.required as any]), - skipSll: new FormControl(false), - clientId: new FormControl('', [Validators.required as any]), - clientSecret: new FormControl(''), - adminUsername: new FormControl('', [Validators.required as any]), - adminPassword: new FormControl('', [Validators.required as any]), - useSSO: new FormControl(false), + this.uaaForm = new UntypedFormGroup({ + apiUrl: new UntypedFormControl('', [Validators.required as any]), + skipSll: new UntypedFormControl(false), + clientId: new UntypedFormControl('', [Validators.required as any]), + clientSecret: new UntypedFormControl(''), + adminUsername: new UntypedFormControl('', [Validators.required as any]), + adminPassword: new UntypedFormControl('', [Validators.required as any]), + useSSO: new UntypedFormControl(false), }); let observer; diff --git a/src/frontend/packages/core/src/features/user-profile/edit-profile-info/edit-profile-info.component.ts b/src/frontend/packages/core/src/features/user-profile/edit-profile-info/edit-profile-info.component.ts index 2b0e22684c..855e71878f 100644 --- a/src/frontend/packages/core/src/features/user-profile/edit-profile-info/edit-profile-info.component.ts +++ b/src/frontend/packages/core/src/features/user-profile/edit-profile-info/edit-profile-info.component.ts @@ -1,16 +1,15 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; -import { AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators } from '@angular/forms'; +import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms'; import { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core'; +import { UserProfileInfo, UserProfileInfoUpdates } from '@stratosui/store'; import { Subscription } from 'rxjs'; import { delay, first, map, take, tap } from 'rxjs/operators'; -import { UserProfileInfo, UserProfileInfoUpdates } from '../../../../../store/src/types/user-profile.types'; import { CurrentUserPermissionsService } from '../../../core/permissions/current-user-permissions.service'; import { StratosCurrentUserPermissions } from '../../../core/permissions/stratos-user-permissions.checker'; import { UserProfileService } from '../../../core/user-profile.service'; import { StepOnNextFunction } from '../../../shared/components/stepper/step/step.component'; - @Component({ selector: 'app-edit-profile-info', templateUrl: './edit-profile-info.component.html', @@ -21,14 +20,14 @@ import { StepOnNextFunction } from '../../../shared/components/stepper/step/step }) export class EditProfileInfoComponent implements OnInit, OnDestroy { - editProfileForm: FormGroup; + editProfileForm: UntypedFormGroup; showPassword: boolean[] = []; needsPasswordForEmailChange: boolean; constructor( private userProfileService: UserProfileService, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private currentUserPermissionsService: CurrentUserPermissionsService, ) { this.editProfileForm = this.fb.group({ @@ -52,7 +51,6 @@ export class EditProfileInfoComponent implements OnInit, OnDestroy { private emailAddress: string; - // Only allow password change if user has the 'password.write' group public canChangePassword = this.currentUserPermissionsService.can(StratosCurrentUserPermissions.PASSWORD_CHANGE); diff --git a/src/frontend/packages/core/src/features/user-profile/profile-info/profile-info.component.spec.ts b/src/frontend/packages/core/src/features/user-profile/profile-info/profile-info.component.spec.ts index e10f58880b..102287237e 100644 --- a/src/frontend/packages/core/src/features/user-profile/profile-info/profile-info.component.spec.ts +++ b/src/frontend/packages/core/src/features/user-profile/profile-info/profile-info.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -16,7 +16,7 @@ describe('ProfileInfoComponent', () => { let component: ProfileInfoComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ProfileInfoComponent], imports: [ diff --git a/src/frontend/packages/core/src/features/user-profile/profile-info/profile-info.component.ts b/src/frontend/packages/core/src/features/user-profile/profile-info/profile-info.component.ts index f1a46867c0..d685b6f319 100644 --- a/src/frontend/packages/core/src/features/user-profile/profile-info/profile-info.component.ts +++ b/src/frontend/packages/core/src/features/user-profile/profile-info/profile-info.component.ts @@ -1,9 +1,11 @@ import { Component } from '@angular/core'; +import { + ThemeService, + UserProfileInfo, +} from '@stratosui/store'; import { combineLatest, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { ThemeService } from '../../../../../store/src/theme.service'; -import { UserProfileInfo } from '../../../../../store/src/types/user-profile.types'; import { CurrentUserPermissionsService } from '../../../core/permissions/current-user-permissions.service'; import { StratosCurrentUserPermissions } from '../../../core/permissions/stratos-user-permissions.checker'; import { UserProfileService } from '../../../core/user-profile.service'; diff --git a/src/frontend/packages/core/src/features/user-profile/user-profile.module.ts b/src/frontend/packages/core/src/features/user-profile/user-profile.module.ts index d3c772f7ef..8ec11b172e 100644 --- a/src/frontend/packages/core/src/features/user-profile/user-profile.module.ts +++ b/src/frontend/packages/core/src/features/user-profile/user-profile.module.ts @@ -1,11 +1,12 @@ -import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { ProfileInfoComponent } from './profile-info/profile-info.component'; -import { UserProfileRoutingModule } from './user-profile.routing'; -import { SharedModule } from '../../shared/shared.module'; +import { NgModule } from '@angular/core'; + import { CoreModule } from '../../core/core.module'; -import { EditProfileInfoComponent } from './edit-profile-info/edit-profile-info.component'; import { UserProfileService } from '../../core/user-profile.service'; +import { SharedModule } from '../../shared/shared.module'; +import { EditProfileInfoComponent } from './edit-profile-info/edit-profile-info.component'; +import { ProfileInfoComponent } from './profile-info/profile-info.component'; +import { UserProfileRoutingModule } from './user-profile.routing'; @NgModule({ imports: [ diff --git a/src/frontend/packages/core/src/features/user-profile/user-profile.routing.ts b/src/frontend/packages/core/src/features/user-profile/user-profile.routing.ts index dff43201fb..da96927072 100644 --- a/src/frontend/packages/core/src/features/user-profile/user-profile.routing.ts +++ b/src/frontend/packages/core/src/features/user-profile/user-profile.routing.ts @@ -1,7 +1,8 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { ProfileInfoComponent } from './profile-info/profile-info.component'; + import { EditProfileInfoComponent } from './edit-profile-info/edit-profile-info.component'; +import { ProfileInfoComponent } from './profile-info/profile-info.component'; const userProfile: Routes = [{ path: '', diff --git a/src/frontend/packages/core/src/leaveEnterAngularZone.ts b/src/frontend/packages/core/src/leaveEnterAngularZone.ts index ac7637d3a0..862a51f1cf 100644 --- a/src/frontend/packages/core/src/leaveEnterAngularZone.ts +++ b/src/frontend/packages/core/src/leaveEnterAngularZone.ts @@ -1,7 +1,6 @@ import { NgZone } from '@angular/core'; import { Scheduler, Subscription } from 'rxjs'; - class LeaveZoneScheduler { constructor(private zone: NgZone, private scheduler: Scheduler) { } diff --git a/src/frontend/packages/core/src/logged-in.service.ts b/src/frontend/packages/core/src/logged-in.service.ts index b8c37cd8e9..bc9413d477 100644 --- a/src/frontend/packages/core/src/logged-in.service.ts +++ b/src/frontend/packages/core/src/logged-in.service.ts @@ -2,14 +2,10 @@ import { DOCUMENT } from '@angular/common'; import { Inject, Injectable, NgZone } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { Store } from '@ngrx/store'; +import { VerifySession, selectDashboardState, DashboardState, AppState, AuthState } from '@stratosui/store'; import { combineLatest, fromEvent, interval, merge, Subscription } from 'rxjs'; import { tap, withLatestFrom } from 'rxjs/operators'; -import { VerifySession } from '../../store/src/actions/auth.actions'; -import { AppState } from '../../store/src/app-state'; -import { AuthState } from '../../store/src/reducers/auth.reducer'; -import { selectDashboardState } from '../../store/src/selectors/dashboard.selectors'; -import { DashboardState } from '../../store/src/types/dashboard.types'; import { LogOutDialogComponent } from './core/log-out-dialog/log-out-dialog.component'; import { PageVisible } from './core/page-visible'; import { CurrentUserPermissionsService } from './core/permissions/current-user-permissions.service'; diff --git a/src/frontend/packages/core/src/main.ts b/src/frontend/packages/core/src/main.ts index 6c9db012ca..d9792e039a 100644 --- a/src/frontend/packages/core/src/main.ts +++ b/src/frontend/packages/core/src/main.ts @@ -1,7 +1,8 @@ import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; -import { environment } from './environments/environment'; + import { AppModule } from './app.module'; +import { environment } from './environments/environment'; if (environment.production) { enableProdMode(); diff --git a/src/frontend/packages/core/src/polyfills.ts b/src/frontend/packages/core/src/polyfills.ts index 7c9f8247d7..67fa701f0e 100644 --- a/src/frontend/packages/core/src/polyfills.ts +++ b/src/frontend/packages/core/src/polyfills.ts @@ -16,45 +16,14 @@ /*************************************************************************************************** * BROWSER POLYFILLS - */ - -/** - * IE9, IE10 and IE11 requires all of the following polyfills. - */ -// import 'core-js/es6/symbol'; -// import 'core-js/es6/object'; -// import 'core-js/es6/function'; -// import 'core-js/es6/parse-int'; -// import 'core-js/es6/parse-float'; -// import 'core-js/es6/number'; -// import 'core-js/es6/math'; -// import 'core-js/es6/string'; -// import 'core-js/es6/date'; -// import 'core-js/es6/array'; -// import 'core-js/es6/regexp'; -// import 'core-js/es6/map'; -// import 'core-js/es6/weak-map'; -// import 'core-js/es6/set'; - -/** - * IE10 and IE11 requires the following for NgClass support on SVG elements - */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. - -/** - * Required to support Web Animations `@angular/animation`. - * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation - */ -import 'web-animations-js'; // Run `npm install --save web-animations-js`. + */ // Run `npm install --save web-animations-js`. // https://github.com/angular/angular-cli/issues/14542 /*************************************************************************************************** * Zone JS is required by Angular itself. */ -import 'zone.js/dist/zone'; // Included with Angular CLI. - - +import 'zone.js'; // Included with Angular CLI. /*************************************************************************************************** * APPLICATION IMPORTS diff --git a/src/frontend/packages/core/src/route-reuse-stragegy.ts b/src/frontend/packages/core/src/route-reuse-stragegy.ts index 53170825fb..45cf383a68 100644 --- a/src/frontend/packages/core/src/route-reuse-stragegy.ts +++ b/src/frontend/packages/core/src/route-reuse-stragegy.ts @@ -4,7 +4,6 @@ import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from import { AppComponent } from './app.component'; import { DashboardBaseComponent } from './features/dashboard/dashboard-base/dashboard-base.component'; - @Injectable() export class CustomReuseStrategy extends RouteReuseStrategy { shouldDetach(route: ActivatedRouteSnapshot): boolean { return false; } diff --git a/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.spec.ts b/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.spec.ts index 571f14e1ee..69318c7a32 100644 --- a/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { endpointEntityType, stratosEntityFactory } from '../../../../../store/src/helpers/stratos-entity-factory'; import { BaseTestModules } from '../../../../test-framework/core-test.helper'; @@ -8,7 +8,7 @@ describe('AppActionMonitorIconComponent', () => { let component: AppActionMonitorIconComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...BaseTestModules diff --git a/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.theme.scss b/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.theme.scss index b0d98fd07c..674ac46b8e 100644 --- a/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin action-monitor-icon-theme($theme, $app-theme) { $status-colors: map-get($app-theme, status); .monitor-icon { diff --git a/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.ts b/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.ts index a093ea3d6d..c9410c4026 100644 --- a/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.ts +++ b/src/frontend/packages/core/src/shared/components/app-action-monitor-icon/app-action-monitor-icon.component.ts @@ -1,12 +1,15 @@ import { Component, Input, OnInit, Output } from '@angular/core'; +import { + EntityMonitor, + EntityMonitorFactory, + ActionState, + RequestInfoState, + rootUpdatingKey, + EntitySchema, +} from '@stratosui/store'; import { Observable, of } from 'rxjs'; import { distinctUntilChanged, map, pairwise, startWith, withLatestFrom } from 'rxjs/operators'; -import { EntitySchema } from '../../../../../store/src/helpers/entity-schema'; -import { EntityMonitor } from '../../../../../store/src/monitors/entity-monitor'; -import { EntityMonitorFactory } from '../../../../../store/src/monitors/entity-monitor.factory.service'; -import { ActionState, RequestInfoState, rootUpdatingKey } from '../../../../../store/src/reducers/api-request-reducer/types'; - export enum AppMonitorComponentTypes { UPDATE = 'MONITOR_UPDATE', DELETE = 'MONITOR_DELETE', @@ -84,7 +87,6 @@ export class ActionMonitorComponentState { (requestState.updating[this.updateKey] || { busy: false, error: false, message: '' }) private getUpdatingState(entityMonitor: EntityMonitor): Observable { - const completed$ = this.getHasCompletedObservable( entityMonitor.entityRequest$.pipe( map(requestState => this.fetchUpdatingState(requestState).busy), @@ -114,8 +116,6 @@ export class ActionMonitorComponentState { } } - - @Component({ selector: 'app-action-monitor-icon', templateUrl: './app-action-monitor-icon.component.html', diff --git a/src/frontend/packages/core/src/shared/components/app-action-monitor/app-action-monitor.component.spec.ts b/src/frontend/packages/core/src/shared/components/app-action-monitor/app-action-monitor.component.spec.ts index 164a7e54f7..27500fc519 100644 --- a/src/frontend/packages/core/src/shared/components/app-action-monitor/app-action-monitor.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/app-action-monitor/app-action-monitor.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../test-framework/core-test.helper'; import { AppActionMonitorComponent } from './app-action-monitor.component'; @@ -7,7 +7,7 @@ describe('AppActionMonitorComponent', () => { let component: AppActionMonitorComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: BaseTestModules }) diff --git a/src/frontend/packages/core/src/shared/components/app-action-monitor/app-action-monitor.component.ts b/src/frontend/packages/core/src/shared/components/app-action-monitor/app-action-monitor.component.ts index 752571cf3c..80b2750c4e 100644 --- a/src/frontend/packages/core/src/shared/components/app-action-monitor/app-action-monitor.component.ts +++ b/src/frontend/packages/core/src/shared/components/app-action-monitor/app-action-monitor.component.ts @@ -1,11 +1,9 @@ import { Component, Input, OnInit } from '@angular/core'; +import { rootUpdatingKey, EntitySchema, EntityMonitorFactory } from '@stratosui/store'; import { schema } from 'normalizr'; import { never as observableNever, Observable, of as observableOf } from 'rxjs'; import { map, publishReplay, refCount } from 'rxjs/operators'; -import { EntitySchema } from '../../../../../store/src/helpers/entity-schema'; -import { EntityMonitorFactory } from '../../../../../store/src/monitors/entity-monitor.factory.service'; -import { rootUpdatingKey } from '../../../../../store/src/reducers/api-request-reducer/types'; import { ActionMonitorComponentState, AppMonitorComponentTypes, @@ -130,5 +128,4 @@ export class AppActionMonitorComponent implements OnInit { }; } - } diff --git a/src/frontend/packages/core/src/shared/components/application-state/application-state-icon/application-state-icon.component.spec.ts b/src/frontend/packages/core/src/shared/components/application-state/application-state-icon/application-state-icon.component.spec.ts index ca56bd9c51..7ab25ab792 100644 --- a/src/frontend/packages/core/src/shared/components/application-state/application-state-icon/application-state-icon.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/application-state/application-state-icon/application-state-icon.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../../core/md.module'; import { ApplicationStateIconComponent } from './application-state-icon.component'; @@ -8,7 +8,7 @@ describe('ApplicationStateIconComponent', () => { let component: ApplicationStateIconComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ApplicationStateIconComponent, ApplicationStateIconPipe diff --git a/src/frontend/packages/core/src/shared/components/application-state/application-state-icon/application-state-icon.component.ts b/src/frontend/packages/core/src/shared/components/application-state/application-state-icon/application-state-icon.component.ts index 32c02fe9ca..f0c979cc0b 100644 --- a/src/frontend/packages/core/src/shared/components/application-state/application-state-icon/application-state-icon.component.ts +++ b/src/frontend/packages/core/src/shared/components/application-state/application-state-icon/application-state-icon.component.ts @@ -1,7 +1,5 @@ import { Component, Input } from '@angular/core'; - -import { StratosStatus } from '../../../../../../store/src/types/shared.types'; - +import { StratosStatus } from '@stratosui/store'; @Component({ selector: 'app-application-state-icon', diff --git a/src/frontend/packages/core/src/shared/components/application-state/application-state.component.spec.ts b/src/frontend/packages/core/src/shared/components/application-state/application-state.component.spec.ts index 2f0ac2cd06..2648f17ac2 100644 --- a/src/frontend/packages/core/src/shared/components/application-state/application-state.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/application-state/application-state.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../core/md.module'; import { ApplicationStateIconComponent } from './application-state-icon/application-state-icon.component'; @@ -9,7 +9,7 @@ describe('ApplicationStateComponent', () => { let component: ApplicationStateComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ApplicationStateComponent, diff --git a/src/frontend/packages/core/src/shared/components/application-state/application-state.component.ts b/src/frontend/packages/core/src/shared/components/application-state/application-state.component.ts index 635c090751..a1bdce8836 100644 --- a/src/frontend/packages/core/src/shared/components/application-state/application-state.component.ts +++ b/src/frontend/packages/core/src/shared/components/application-state/application-state.component.ts @@ -1,9 +1,8 @@ import { Component, Input, OnInit } from '@angular/core'; +import { StratosStatus, StratosStatusMetadata } from '@stratosui/store'; import { Observable } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; -import { StratosStatus, StratosStatusMetadata } from '../../../../../store/src/types/shared.types'; - @Component({ selector: 'app-application-state', templateUrl: './application-state.component.html', diff --git a/src/frontend/packages/core/src/shared/components/boolean-indicator/boolean-indicator.component.spec.ts b/src/frontend/packages/core/src/shared/components/boolean-indicator/boolean-indicator.component.spec.ts index f2af40a874..89412cdb8e 100644 --- a/src/frontend/packages/core/src/shared/components/boolean-indicator/boolean-indicator.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/boolean-indicator/boolean-indicator.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../core/core.module'; @@ -9,7 +9,7 @@ describe('BooleanIndicatorComponent', () => { let fixture: ComponentFixture; let element: HTMLElement; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [BooleanIndicatorComponent], imports: [CoreModule, NoopAnimationsModule] diff --git a/src/frontend/packages/core/src/shared/components/boolean-indicator/boolean-indicator.component.theme.scss b/src/frontend/packages/core/src/shared/components/boolean-indicator/boolean-indicator.component.theme.scss index a8f89edb09..e269bf864d 100644 --- a/src/frontend/packages/core/src/shared/components/boolean-indicator/boolean-indicator.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/boolean-indicator/boolean-indicator.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin app-boolean-indicator-theme($theme, $app-theme) { $primary: map-get($theme, primary); $status: map-get($app-theme, status); diff --git a/src/frontend/packages/core/src/shared/components/breadcrumbs/breadcrumbs.component.spec.ts b/src/frontend/packages/core/src/shared/components/breadcrumbs/breadcrumbs.component.spec.ts index fb52d79fab..59f1b97935 100644 --- a/src/frontend/packages/core/src/shared/components/breadcrumbs/breadcrumbs.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/breadcrumbs/breadcrumbs.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; @@ -12,7 +12,7 @@ describe('BreadcrumbsComponent', () => { let element: HTMLElement; let breadcrumbs: IBreadcrumb[]; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [CoreModule, RouterTestingModule.withRoutes([])], declarations: [BreadcrumbsComponent], diff --git a/src/frontend/packages/core/src/shared/components/card-progress-overlay/card-progress-overlay.component.spec.ts b/src/frontend/packages/core/src/shared/components/card-progress-overlay/card-progress-overlay.component.spec.ts index 8acfed0852..f32f2a1531 100644 --- a/src/frontend/packages/core/src/shared/components/card-progress-overlay/card-progress-overlay.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/card-progress-overlay/card-progress-overlay.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CardProgressOverlayComponent } from './card-progress-overlay.component'; import { CoreModule } from '../../../core/core.module'; @@ -7,7 +7,7 @@ describe('CardProgressOverlayComponent', () => { let component: CardProgressOverlayComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/shared/components/card-progress-overlay/card-progress-overlay.component.theme.scss b/src/frontend/packages/core/src/shared/components/card-progress-overlay/card-progress-overlay.component.theme.scss index 868fa619be..0c95217b76 100644 --- a/src/frontend/packages/core/src/shared/components/card-progress-overlay/card-progress-overlay.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/card-progress-overlay/card-progress-overlay.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin app-card-progerss-overlay-theme($theme, $app-theme) { $background: map-get($theme, background); diff --git a/src/frontend/packages/core/src/shared/components/cards/card-boolean-metric/card-boolean-metric.component.spec.ts b/src/frontend/packages/core/src/shared/components/cards/card-boolean-metric/card-boolean-metric.component.spec.ts index 7df190b6a2..d444c39b72 100644 --- a/src/frontend/packages/core/src/shared/components/cards/card-boolean-metric/card-boolean-metric.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/cards/card-boolean-metric/card-boolean-metric.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../../test-framework/core-test.helper'; import { CardBooleanMetricComponent } from './card-boolean-metric.component'; @@ -7,7 +7,7 @@ describe('CardBooleanMetricComponent', () => { let component: CardBooleanMetricComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CardBooleanMetricComponent], imports: [...BaseTestModulesNoShared], diff --git a/src/frontend/packages/core/src/shared/components/cards/card-boolean-metric/card-boolean-metric.component.ts b/src/frontend/packages/core/src/shared/components/cards/card-boolean-metric/card-boolean-metric.component.ts index 423ac143c7..7623ee938f 100644 --- a/src/frontend/packages/core/src/shared/components/cards/card-boolean-metric/card-boolean-metric.component.ts +++ b/src/frontend/packages/core/src/shared/components/cards/card-boolean-metric/card-boolean-metric.component.ts @@ -1,8 +1,6 @@ import { Component, Input, OnChanges, OnInit } from '@angular/core'; import { Store } from '@ngrx/store'; - -import { RouterNav } from '../../../../../../store/src/actions/router.actions'; -import { AppState } from '../../../../../../store/src/app-state'; +import { RouterNav, AppState } from '@stratosui/store'; @Component({ selector: 'app-card-boolean-metric', diff --git a/src/frontend/packages/core/src/shared/components/cards/card-number-metric/card-number-metric.component.spec.ts b/src/frontend/packages/core/src/shared/components/cards/card-number-metric/card-number-metric.component.spec.ts index 354dbc874e..e70eb19b6b 100644 --- a/src/frontend/packages/core/src/shared/components/cards/card-number-metric/card-number-metric.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/cards/card-number-metric/card-number-metric.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../../test-framework/core-test.helper'; import { CardStatusComponent } from '../card-status/card-status.component'; @@ -8,7 +8,7 @@ describe('CardNumberMetricComponent', () => { let component: CardNumberMetricComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CardNumberMetricComponent, CardStatusComponent], imports: [...BaseTestModulesNoShared], diff --git a/src/frontend/packages/core/src/shared/components/cards/card-status/card-status.component.spec.ts b/src/frontend/packages/core/src/shared/components/cards/card-status/card-status.component.spec.ts index 3a5fc1bf9c..75f73eba3e 100644 --- a/src/frontend/packages/core/src/shared/components/cards/card-status/card-status.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/cards/card-status/card-status.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CardStatusComponent } from './card-status.component'; @@ -6,7 +6,7 @@ describe('CardStatusComponent', () => { let component: CardStatusComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CardStatusComponent ] }) diff --git a/src/frontend/packages/core/src/shared/components/chips/chips.component.spec.ts b/src/frontend/packages/core/src/shared/components/chips/chips.component.spec.ts index a2c29359c9..92c21591e5 100644 --- a/src/frontend/packages/core/src/shared/components/chips/chips.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/chips/chips.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../core/core.module'; import { AppChipsComponent } from './chips.component'; @@ -15,7 +15,7 @@ describe('AppChipsComponent', () => { { value: 'value5', custom: 'custom5' } ]; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AppChipsComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/code-block/code-block.component.spec.ts b/src/frontend/packages/core/src/shared/components/code-block/code-block.component.spec.ts index 63f1ac0b9d..f362cdd2c2 100644 --- a/src/frontend/packages/core/src/shared/components/code-block/code-block.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/code-block/code-block.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; import { CoreTestingModule } from '../../../../test-framework/core-test.modules'; @@ -10,7 +10,7 @@ describe('CodeBlockComponent', () => { let component: CodeBlockComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CodeBlockComponent, diff --git a/src/frontend/packages/core/src/shared/components/code-block/code-block.component.theme.scss b/src/frontend/packages/core/src/shared/components/code-block/code-block.component.theme.scss index 92bfec6967..480af465d6 100644 --- a/src/frontend/packages/core/src/shared/components/code-block/code-block.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/code-block/code-block.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin code-block-theme($theme, $app-theme) { $is-dark: map-get($theme, is-dark); $primary: map-get($theme, primary); diff --git a/src/frontend/packages/core/src/shared/components/confirmation-dialog.service.ts b/src/frontend/packages/core/src/shared/components/confirmation-dialog.service.ts index 61639d052d..adcdd28481 100644 --- a/src/frontend/packages/core/src/shared/components/confirmation-dialog.service.ts +++ b/src/frontend/packages/core/src/shared/components/confirmation-dialog.service.ts @@ -5,8 +5,6 @@ import { take } from 'rxjs/operators'; import { ConfirmationDialogConfig } from './confirmation-dialog.config'; import { DialogConfirmComponent } from './dialog-confirm/dialog-confirm.component'; - - @Injectable() export class ConfirmationDialogService { diff --git a/src/frontend/packages/core/src/shared/components/copy-to-clipboard/copy-to-clipboard.component.spec.ts b/src/frontend/packages/core/src/shared/components/copy-to-clipboard/copy-to-clipboard.component.spec.ts index 952c401a0f..31f8d66c6c 100644 --- a/src/frontend/packages/core/src/shared/components/copy-to-clipboard/copy-to-clipboard.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/copy-to-clipboard/copy-to-clipboard.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; import { CoreTestingModule } from '../../../../test-framework/core-test.modules'; @@ -9,7 +9,7 @@ describe('CopyToClipboardComponent', () => { let component: CopyToClipboardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [CopyToClipboardComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/copy-to-clipboard/copy-to-clipboard.component.theme.scss b/src/frontend/packages/core/src/shared/components/copy-to-clipboard/copy-to-clipboard.component.theme.scss index 3de9149821..e03486ef0a 100644 --- a/src/frontend/packages/core/src/shared/components/copy-to-clipboard/copy-to-clipboard.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/copy-to-clipboard/copy-to-clipboard.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin copy-to-clipboard-theme($theme, $app-theme) { $primary: map-get($theme, primary); .copy { diff --git a/src/frontend/packages/core/src/shared/components/date-time/date-time.component.spec.ts b/src/frontend/packages/core/src/shared/components/date-time/date-time.component.spec.ts index ebe5136e75..f515ec8e70 100644 --- a/src/frontend/packages/core/src/shared/components/date-time/date-time.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/date-time/date-time.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { DateTimeComponent } from './date-time.component'; import { ReactiveFormsModule, FormsModule } from '@angular/forms'; @@ -9,7 +9,7 @@ describe('DateTimeComponent', () => { let component: DateTimeComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DateTimeComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/date-time/date-time.component.ts b/src/frontend/packages/core/src/shared/components/date-time/date-time.component.ts index fe9026a7a4..5e0a2df385 100644 --- a/src/frontend/packages/core/src/shared/components/date-time/date-time.component.ts +++ b/src/frontend/packages/core/src/shared/components/date-time/date-time.component.ts @@ -1,9 +1,10 @@ import { Component, EventEmitter, Input, OnDestroy, Output } from '@angular/core'; -import { FormControl } from '@angular/forms'; -import moment from 'moment'; +import { UntypedFormControl } from '@angular/forms'; import { combineLatest, Observable, Subscription } from 'rxjs'; import { debounceTime, filter, map, shareReplay, tap } from 'rxjs/operators'; +import moment from 'moment'; + @Component({ selector: 'app-date-time', templateUrl: './date-time.component.html', @@ -11,8 +12,8 @@ import { debounceTime, filter, map, shareReplay, tap } from 'rxjs/operators'; }) export class DateTimeComponent implements OnDestroy { - public date = new FormControl(); - public time = new FormControl(); + public date = new UntypedFormControl(); + public time = new UntypedFormControl(); private sub: Subscription; private changeSub: Subscription; private dateTimeValue: moment.Moment; diff --git a/src/frontend/packages/core/src/shared/components/details-card/details-card.component.spec.ts b/src/frontend/packages/core/src/shared/components/details-card/details-card.component.spec.ts index 14c31bbf85..199a89c32a 100644 --- a/src/frontend/packages/core/src/shared/components/details-card/details-card.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/details-card/details-card.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../core/core.module'; @@ -9,7 +9,7 @@ describe('DetailsCardComponent', () => { let component: DetailsCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DetailsCardComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/dialog-confirm/dialog-confirm.component.spec.ts b/src/frontend/packages/core/src/shared/components/dialog-confirm/dialog-confirm.component.spec.ts index 64c2904cc1..07130c091e 100644 --- a/src/frontend/packages/core/src/shared/components/dialog-confirm/dialog-confirm.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/dialog-confirm/dialog-confirm.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; @@ -29,7 +29,7 @@ describe('DialogConfirmComponent', () => { }; } - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [DialogConfirmComponent], providers: [ diff --git a/src/frontend/packages/core/src/shared/components/dialog-error/dialog-error.component.spec.ts b/src/frontend/packages/core/src/shared/components/dialog-error/dialog-error.component.spec.ts index 921d715fed..8277e66f68 100644 --- a/src/frontend/packages/core/src/shared/components/dialog-error/dialog-error.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/dialog-error/dialog-error.component.spec.ts @@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common'; import { CoreModule } from '../../../core/core.module'; import { SharedModule } from '../../shared.module'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { DialogErrorComponent } from './dialog-error.component'; @@ -10,7 +10,7 @@ describe('DialogErrorComponent', () => { let component: DialogErrorComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CommonModule, diff --git a/src/frontend/packages/core/src/shared/components/display-value/display-value.component.spec.ts b/src/frontend/packages/core/src/shared/components/display-value/display-value.component.spec.ts index acb5a4ba62..798e925fb4 100644 --- a/src/frontend/packages/core/src/shared/components/display-value/display-value.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/display-value/display-value.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { DisplayValueComponent } from './display-value.component'; @@ -6,7 +6,7 @@ describe('DisplayValueComponent', () => { let component: DisplayValueComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ DisplayValueComponent ] }) diff --git a/src/frontend/packages/core/src/shared/components/display-value/display-value.component.theme.scss b/src/frontend/packages/core/src/shared/components/display-value/display-value.component.theme.scss index 18f3f0b4e7..85bf033245 100644 --- a/src/frontend/packages/core/src/shared/components/display-value/display-value.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/display-value/display-value.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin display-value-theme($theme, $app-theme) { $foreground-colors: map-get($theme, foreground); .display-value { diff --git a/src/frontend/packages/core/src/shared/components/editable-display-value/editable-display-value.component.spec.ts b/src/frontend/packages/core/src/shared/components/editable-display-value/editable-display-value.component.spec.ts index f5c4daabaf..a6919d8c1d 100644 --- a/src/frontend/packages/core/src/shared/components/editable-display-value/editable-display-value.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/editable-display-value/editable-display-value.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../core/core.module'; import { DisplayValueComponent } from '../display-value/display-value.component'; @@ -9,7 +9,7 @@ describe('EditableDisplayValueComponent', () => { let component: EditableDisplayValueComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ EditableDisplayValueComponent, diff --git a/src/frontend/packages/core/src/shared/components/endpoints-missing/endpoints-missing.component.spec.ts b/src/frontend/packages/core/src/shared/components/endpoints-missing/endpoints-missing.component.spec.ts index b5687f40e7..f7ecc2c03a 100644 --- a/src/frontend/packages/core/src/shared/components/endpoints-missing/endpoints-missing.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/endpoints-missing/endpoints-missing.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -11,7 +11,7 @@ describe('EndpointsMissingComponent', () => { let component: EndpointsMissingComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/shared/components/entity-summary-title/entity-summary-title.component.spec.ts b/src/frontend/packages/core/src/shared/components/entity-summary-title/entity-summary-title.component.spec.ts index 4d7cfe695e..944768660f 100644 --- a/src/frontend/packages/core/src/shared/components/entity-summary-title/entity-summary-title.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/entity-summary-title/entity-summary-title.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../core/core.module'; import { EntitySummaryTitleComponent } from './entity-summary-title.component'; @@ -7,7 +7,7 @@ describe('EntitySummaryTitleComponent', () => { let component: EntitySummaryTitleComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/shared/components/enumerate/enumerate.component.spec.ts b/src/frontend/packages/core/src/shared/components/enumerate/enumerate.component.spec.ts index 8cd78f5b52..08a90c8de4 100644 --- a/src/frontend/packages/core/src/shared/components/enumerate/enumerate.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/enumerate/enumerate.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EnumerateComponent } from './enumerate.component'; @@ -6,7 +6,7 @@ describe('EnumerateComponent', () => { let component: EnumerateComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ EnumerateComponent ] }) diff --git a/src/frontend/packages/core/src/shared/components/extension-buttons/extension-buttons.component.spec.ts b/src/frontend/packages/core/src/shared/components/extension-buttons/extension-buttons.component.spec.ts index fd5f562dac..8c8b47e998 100644 --- a/src/frontend/packages/core/src/shared/components/extension-buttons/extension-buttons.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/extension-buttons/extension-buttons.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../test-framework/core-test.helper'; import { ExtensionButtonsComponent } from './extension-buttons.component'; @@ -7,7 +7,7 @@ describe('ExtensionButtonsComponent', () => { let component: ExtensionButtonsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ExtensionButtonsComponent], imports: [...BaseTestModulesNoShared], diff --git a/src/frontend/packages/core/src/shared/components/extension-buttons/extension-buttons.component.ts b/src/frontend/packages/core/src/shared/components/extension-buttons/extension-buttons.component.ts index d16ebf598a..967ad2997a 100644 --- a/src/frontend/packages/core/src/shared/components/extension-buttons/extension-buttons.component.ts +++ b/src/frontend/packages/core/src/shared/components/extension-buttons/extension-buttons.component.ts @@ -1,8 +1,8 @@ import { Component, Input, OnInit } from '@angular/core'; import { Store } from '@ngrx/store'; +import { AppState } from '@stratosui/store'; import { of } from 'rxjs'; -import { AppState } from '../../../../../store/src/app-state'; import { getActionsFromExtensions, StratosActionMetadata, diff --git a/src/frontend/packages/core/src/shared/components/file-input/file-input.component.spec.ts b/src/frontend/packages/core/src/shared/components/file-input/file-input.component.spec.ts index 8c380b1581..8c58e9afdc 100644 --- a/src/frontend/packages/core/src/shared/components/file-input/file-input.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/file-input/file-input.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../test-framework/core-test.helper'; import { FileInputComponent } from './file-input.component'; @@ -7,7 +7,7 @@ describe('FileInputComponent', () => { let component: FileInputComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [FileInputComponent], imports: [...BaseTestModulesNoShared] diff --git a/src/frontend/packages/core/src/shared/components/intro-screen/intro-screen.component.spec.ts b/src/frontend/packages/core/src/shared/components/intro-screen/intro-screen.component.spec.ts index 3a4874fc42..d708f2cee6 100644 --- a/src/frontend/packages/core/src/shared/components/intro-screen/intro-screen.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/intro-screen/intro-screen.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { IntroScreenComponent } from './intro-screen.component'; @@ -6,7 +6,7 @@ describe('IntroScreenComponent', () => { let component: IntroScreenComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [IntroScreenComponent] }) diff --git a/src/frontend/packages/core/src/shared/components/json-viewer/json-viewer.component.spec.ts b/src/frontend/packages/core/src/shared/components/json-viewer/json-viewer.component.spec.ts index f7eb491577..eddea79d14 100644 --- a/src/frontend/packages/core/src/shared/components/json-viewer/json-viewer.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/json-viewer/json-viewer.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { JsonViewerComponent } from './json-viewer.component'; @@ -6,7 +6,7 @@ describe('JsonViewerComponent', () => { let component: JsonViewerComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ JsonViewerComponent ] }) diff --git a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source-config.ts b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source-config.ts index 2cbc5ca9fc..fb39ee930b 100644 --- a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source-config.ts +++ b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source-config.ts @@ -1,14 +1,11 @@ import { Action, Store } from '@ngrx/store'; +import { EntitySchema, PaginatedAction, AppState } from '@stratosui/store'; import { Observable, OperatorFunction } from 'rxjs'; -import { AppState } from '../../../../../../store/src/app-state'; -import { EntitySchema } from '../../../../../../store/src/helpers/entity-schema'; -import { PaginatedAction } from '../../../../../../store/src/types/pagination.types'; import { IListConfig } from '../list.component.types'; import { DataFunction, DataFunctionDefinition } from './list-data-source'; import { getRowUniqueId, RowsState, RowState } from './list-data-source-types'; - /** * Allows a list to manage separate actions and/or separate entity types. * Also used to configure the entity type dropdown. diff --git a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source-types.ts b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source-types.ts index 96c4b0443e..b25e7e9591 100644 --- a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source-types.ts +++ b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source-types.ts @@ -1,14 +1,18 @@ import { DataSource } from '@angular/cdk/table'; import { Action } from '@ngrx/store'; +import { + IRequestEntityTypeState, + MetricsAction, + EntitySchema, + PaginatedAction, + PaginationEntityState, + PaginationParam, + ListFilter, + ListSort, + EntityCatalogEntityConfig, +} from '@stratosui/store'; import { BehaviorSubject, Observable, ReplaySubject } from 'rxjs'; -import { ListFilter, ListSort } from '../../../../../../store/src/actions/list.actions'; -import { MetricsAction } from '../../../../../../store/src/actions/metrics.actions'; -import { IRequestEntityTypeState } from '../../../../../../store/src/app-state'; -import { EntityCatalogEntityConfig } from '../../../../../../store/src/entity-catalog/entity-catalog.types'; -import { EntitySchema } from '../../../../../../store/src/helpers/entity-schema'; -import { PaginatedAction, PaginationEntityState, PaginationParam } from '../../../../../../store/src/types/pagination.types'; - export interface IEntitySelectItem { page: number; label: string; @@ -112,8 +116,6 @@ export interface IListDataSource extends ICoreListDataSource, ICoreTableLi filter$: Observable; sort$: Observable; - - getRowUniqueId: getRowUniqueId; entitySelectConfig?: EntitySelectConfig; // For multi action lists, this is used to configure the entity select. diff --git a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source.ts b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source.ts index 78e6054907..2577560072 100644 --- a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source.ts +++ b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-data-source.ts @@ -1,6 +1,22 @@ import { DataSource } from '@angular/cdk/table'; import { SortDirection } from '@angular/material/sort'; import { Store } from '@ngrx/store'; +import { + entityCatalog, + EntitySchema, + ListFilter, + ListSort, + MetricsAction, + AppState, + LocalPaginationHelpers, + PaginationMonitor, + getPaginationObservables, + PaginatedAction, + PaginationEntityState, + PaginationParam, + IgnorePaginationMaxedState, + SetResultCount, +} from '@stratosui/store'; import { BehaviorSubject, combineLatest, @@ -25,16 +41,6 @@ import { withLatestFrom, } from 'rxjs/operators'; -import { ListFilter, ListSort } from '../../../../../../store/src/actions/list.actions'; -import { MetricsAction } from '../../../../../../store/src/actions/metrics.actions'; -import { IgnorePaginationMaxedState, SetResultCount } from '../../../../../../store/src/actions/pagination.actions'; -import { AppState } from '../../../../../../store/src/app-state'; -import { entityCatalog } from '../../../../../../store/src/entity-catalog/entity-catalog'; -import { EntitySchema } from '../../../../../../store/src/helpers/entity-schema'; -import { LocalPaginationHelpers } from '../../../../../../store/src/helpers/local-list.helpers'; -import { PaginationMonitor } from '../../../../../../store/src/monitors/pagination-monitor'; -import { getPaginationObservables } from '../../../../../../store/src/reducers/pagination-reducer/pagination-reducer.helper'; -import { PaginatedAction, PaginationEntityState, PaginationParam } from '../../../../../../store/src/types/pagination.types'; import { IListDataSourceConfig, MultiActionConfig } from './list-data-source-config'; import { EntitySelectConfig, @@ -200,7 +206,6 @@ export abstract class ListDataSource extends DataSource implements this.pagination$ = pagination$; - this.sort$ = this.createSortObservable(); this.filter$ = this.createFilterObservable(); diff --git a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-pagination-controller.ts b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-pagination-controller.ts index 05cb64e459..dbbca2048f 100644 --- a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-pagination-controller.ts +++ b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/list-pagination-controller.ts @@ -1,22 +1,23 @@ import { NgZone } from '@angular/core'; import { Store } from '@ngrx/store'; -import { asyncScheduler, BehaviorSubject, Observable } from 'rxjs'; -import { tag } from 'rxjs-spy/operators'; -import { bufferTime, distinctUntilChanged, filter, first, map, observeOn, tap } from 'rxjs/operators'; - -import { ListFilter, ListPagination, ListSort } from '../../../../../../store/src/actions/list.actions'; import { + ListFilter, + ListPagination, + ListSort, + GeneralAppState, + defaultClientPaginationPageSize, AddParams, SetClientFilter, SetClientPage, SetClientPageSize, SetPage, -} from '../../../../../../store/src/actions/pagination.actions'; -import { GeneralAppState } from '../../../../../../store/src/app-state'; -import { - defaultClientPaginationPageSize, -} from '../../../../../../store/src/reducers/pagination-reducer/pagination-reducer-reset-pagination'; -import { PaginationClientFilter, PaginationEntityState } from '../../../../../../store/src/types/pagination.types'; + PaginationClientFilter, + PaginationEntityState, +} from '@stratosui/store'; +import { asyncScheduler, BehaviorSubject, Observable } from 'rxjs'; +import { tag } from 'rxjs-spy/operators'; +import { bufferTime, distinctUntilChanged, filter, first, map, observeOn, tap } from 'rxjs/operators'; + import { enterZone, leaveZone } from '../../../../leaveEnterAngularZone'; import { IListMultiFilterConfig } from '../list.component.types'; import { IListDataSource, ListPaginationMultiFilterChange } from './list-data-source-types'; diff --git a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/local-filtering-sorting.ts b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/local-filtering-sorting.ts index 65e589ac10..c7b7b31bb9 100644 --- a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/local-filtering-sorting.ts +++ b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/local-filtering-sorting.ts @@ -1,4 +1,5 @@ -import { MultiActionListEntity } from '../../../../../../store/src/monitors/pagination-monitor'; +import { MultiActionListEntity } from '@stratosui/store'; + import { DataFunction, DataFunctionDefinition } from './list-data-source'; export function getDataFunctionList(entityFunctions: (DataFunction | DataFunctionDefinition)[]): DataFunction[] { diff --git a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/local-list-controller.ts b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/local-list-controller.ts index 2d53920886..d797ffeffd 100644 --- a/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/local-list-controller.ts +++ b/src/frontend/packages/core/src/shared/components/list/data-sources-controllers/local-list-controller.ts @@ -1,9 +1,8 @@ +import { LocalPaginationHelpers, PaginationEntityState } from '@stratosui/store'; import { combineLatest, Observable, of as observableOf } from 'rxjs'; import { tag } from 'rxjs-spy/operators/tag'; import { distinctUntilChanged, map, publishReplay, refCount, switchMap, tap } from 'rxjs/operators'; -import { LocalPaginationHelpers } from '../../../../../../store/src/helpers/local-list.helpers'; -import { PaginationEntityState } from '../../../../../../store/src/types/pagination.types'; import { DataFunction } from './list-data-source'; import { splitCurrentPage } from './local-list-controller.helpers'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/card.component.types.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/card.component.types.ts index d9ca7b1960..ba55ee8fd9 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/card.component.types.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/card.component.types.ts @@ -2,7 +2,6 @@ import { Type } from '@angular/core'; import { CardCell } from '../list.types'; - export interface ICardMultiActionComponentList { [schemaKey: string]: Type>; } diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/card/card.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/card/card.component.spec.ts index d9c727b0e1..2c7cadfa9a 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/card/card.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/card/card.component.spec.ts @@ -1,6 +1,6 @@ import { CoreModule } from '../../../../../core/core.module'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CardComponent, listCards } from './card.component'; import { SharedModule } from '../../../../shared.module'; import { EntityInfo } from '../../../../../../../store/src/types/api.types'; @@ -9,7 +9,7 @@ describe('CardComponent', () => { let component: CardComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/card/card.component.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/card/card.component.ts index 4f4257a11a..69234aef97 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/card/card.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/card/card.component.ts @@ -1,6 +1,6 @@ import { Component, ComponentFactoryResolver, ComponentRef, Input, Type, ViewChild, ViewContainerRef } from '@angular/core'; +import { MultiActionListEntity } from '@stratosui/store'; -import { MultiActionListEntity } from '../../../../../../../store/src/monitors/pagination-monitor'; import { IListDataSource } from '../../data-sources-controllers/list-data-source-types'; import { EndpointCardComponent } from '../../list-types/endpoint/endpoint-card/endpoint-card.component'; import { CardCell } from '../../list.types'; @@ -17,12 +17,9 @@ interface ISetupData { item: T | MultiActionListEntity; } @Component({ - selector: 'app-card', - templateUrl: './card.component.html', - styleUrls: ['./card.component.scss'], - entryComponents: [ - ...listCards - ] + selector: 'app-card', + templateUrl: './card.component.html', + styleUrls: ['./card.component.scss'] }) export class CardComponent { private componentRef: ComponentRef; diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/cards.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/cards.component.spec.ts index aecdde19a9..5f9c87088f 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/cards.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/cards.component.spec.ts @@ -1,5 +1,5 @@ import { Type } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EntityInfo } from '../../../../../../store/src/types/api.types'; import { CoreModule } from '../../../../core/core.module'; @@ -12,7 +12,7 @@ describe('CardsComponent', () => { let component: CardsComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/cards.component.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/cards.component.ts index d211388c1b..aedad93f8b 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/cards.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/cards.component.ts @@ -1,6 +1,6 @@ import { Component, Input } from '@angular/core'; +import { MultiActionListEntity } from '@stratosui/store'; -import { MultiActionListEntity } from '../../../../../../store/src/monitors/pagination-monitor'; import { IListDataSource } from '../data-sources-controllers/list-data-source-types'; import { CardCell } from '../list.types'; import { CardTypes } from './card/card.component'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.spec.ts index 96e14179b7..8bb335ab10 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.spec.ts @@ -1,5 +1,5 @@ import { Component, ViewChild } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule } from '@ngrx/store'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -9,7 +9,7 @@ import { EntitySchema } from '../../../../../../../../store/src/helpers/entity-s import { EntityMonitorFactory } from '../../../../../../../../store/src/monitors/entity-monitor.factory.service'; import { ComponentEntityMonitorConfig, StratosStatus } from '../../../../../../../../store/src/types/shared.types'; import { IFavoriteMetadata, UserFavorite } from '../../../../../../../../store/src/types/user-favorites.types'; -import { UserFavoriteManager } from '../../../../../../../../store/src/user-favorite-manager'; +import { UserFavoriteManager } from '@stratosui/store'; import { CoreTestingModule } from '../../../../../../../test-framework/core-test.modules'; import { SharedModule } from '../../../../../shared.module'; import { MetaCardComponent } from './meta-card.component'; @@ -33,6 +33,10 @@ class UserFavoriteManagerMock { getIsFavoriteObservable() { return of(true); } + + getFavorite() { + return null; + } } class EntityMonitorFactoryMock { @@ -69,7 +73,7 @@ describe('MetaCardComponent', () => { let element: HTMLElement; let entityMonitorFactory: EntityMonitorFactoryMock; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ SharedModule, diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.theme.scss b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.theme.scss index e93de0d3e5..823fa1998e 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin meta-card-component($theme, $app-theme) { $background: map-get($theme, background); $foreground: map-get($theme, foreground); diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.ts index 22083ad37e..62f0da6506 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-base/meta-card.component.ts @@ -1,12 +1,16 @@ import { Component, ContentChild, ContentChildren, Input, OnDestroy, QueryList } from '@angular/core'; +import { + EntityMonitorFactory, + MenuItem, + IFavoriteMetadata, + UserFavorite, + ComponentEntityMonitorConfig, + StratosStatus, +} from '@stratosui/store'; import { combineLatest, Observable, of as observableOf, of, Subscription } from 'rxjs'; import { first, map, tap } from 'rxjs/operators'; -import { EntityMonitorFactory } from '../../../../../../../../store/src/monitors/entity-monitor.factory.service'; -import { MenuItem } from '../../../../../../../../store/src/types/menu-item.types'; -import { ComponentEntityMonitorConfig, StratosStatus } from '../../../../../../../../store/src/types/shared.types'; -import { IFavoriteMetadata, UserFavorite } from '../../../../../../../../store/src/types/user-favorites.types'; -import { UserFavoriteManager } from '../../../../../../../../store/src/user-favorite-manager'; +import { UserFavoriteManager } from '@stratosui/store'; import { safeUnsubscribe } from '../../../../../../core/utils.service'; import { MetaCardItemComponent } from '../meta-card-item/meta-card-item.component'; import { MetaCardTitleComponent } from '../meta-card-title/meta-card-title.component'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-item/meta-card-item.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-item/meta-card-item.component.spec.ts index 5a744e1348..427172e550 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-item/meta-card-item.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-item/meta-card-item.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MetaCardItemComponent } from './meta-card-item.component'; import { SharedModule } from '../../../../../shared.module'; @@ -7,7 +7,7 @@ describe('MetaCardItemComponent', () => { let component: MetaCardItemComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ SharedModule diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-key/meta-card-key.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-key/meta-card-key.component.spec.ts index 69758d81de..f4346ee7d6 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-key/meta-card-key.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-key/meta-card-key.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { SharedModule } from '../../../../../shared.module'; import { MetaCardKeyComponent } from './meta-card-key.component'; @@ -7,7 +7,7 @@ describe('MetaCardKeyComponent', () => { let component: MetaCardKeyComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ SharedModule diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-title/meta-card-title.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-title/meta-card-title.component.spec.ts index 5cf1ae0c58..ecad487192 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-title/meta-card-title.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-title/meta-card-title.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MetaCardTitleComponent } from './meta-card-title.component'; import { SharedModule } from '../../../../../shared.module'; @@ -7,7 +7,7 @@ describe('MetaCardTitleComponent', () => { let component: MetaCardTitleComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ SharedModule diff --git a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-value/meta-card-value.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-value/meta-card-value.component.spec.ts index 30507dd37c..4e20b623a9 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-value/meta-card-value.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-cards/meta-card/meta-card-value/meta-card-value.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MetaCardValueComponent } from './meta-card-value.component'; import { SharedModule } from '../../../../../shared.module'; @@ -7,7 +7,7 @@ describe('MetaCardValueComponent', () => { let component: MetaCardValueComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ SharedModule diff --git a/src/frontend/packages/core/src/shared/components/list/list-generics/entity-list-view/entity-list-view.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-generics/entity-list-view/entity-list-view.component.spec.ts index 96b5795d54..973889bc5d 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-generics/entity-list-view/entity-list-view.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-generics/entity-list-view/entity-list-view.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { STRATOS_ENDPOINT_TYPE, systemInfoEntityType } from '../../../../../../../store/src/helpers/stratos-entity-factory'; import { BaseTestModules } from '../../../../../../test-framework/core-test.helper'; @@ -8,7 +8,7 @@ describe('EntityListViewComponent', () => { let component: EntityListViewComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...BaseTestModules, diff --git a/src/frontend/packages/core/src/shared/components/list/list-generics/list-view/list-view.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-generics/list-view/list-view.component.spec.ts index c245cdeecb..86aa5a3ecc 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-generics/list-view/list-view.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-generics/list-view/list-view.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { createBasicStoreModule } from '../../../../../../../store/testing/public-api'; @@ -11,7 +11,7 @@ describe('ListViewComponent', () => { let component: ListViewComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/shared/components/list/list-generics/list-view/list-view.component.ts b/src/frontend/packages/core/src/shared/components/list/list-generics/list-view/list-view.component.ts index fea74610ae..8a1f5de08b 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-generics/list-view/list-view.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-generics/list-view/list-view.component.ts @@ -1,4 +1,4 @@ -import { Component, ComponentFactoryResolver, ComponentRef, Injector, Input, OnDestroy, ViewChild } from '@angular/core'; +import { Component, ComponentFactoryResolver, ComponentRef, Injector, Input, OnDestroy, Type, ViewChild } from '@angular/core'; import { ListComponent } from '../../list.component'; import { IListConfig, ListConfig } from '../../list.component.types'; @@ -6,12 +6,9 @@ import { ListHostDirective } from '../helpers/list-host.directive'; import { ListConfigProvider } from '../list-config-provider.types'; @Component({ - selector: 'app-list-view', - templateUrl: './list-view.component.html', - styleUrls: ['./list-view.component.scss'], - entryComponents: [ - ListComponent - ] + selector: 'app-list-view', + templateUrl: './list-view.component.html', + styleUrls: ['./list-view.component.scss'] }) export class ListViewComponent implements OnDestroy { @@ -41,13 +38,11 @@ export class ListViewComponent implements OnDestroy { // Clean up old component this.ngOnDestroy(); - const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ListComponent); + // const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ListComponent); const viewContainerRef = this.listHost.viewContainerRef; - this.componentRef = viewContainerRef.createComponent( - componentFactory, - null, - this.makeCustomConfigInjector(listConfig.getListConfig()) - ); + this.componentRef = viewContainerRef.createComponent(ListComponent,{ + injector: this.makeCustomConfigInjector(listConfig.getListConfig()) + }); } private makeCustomConfigInjector(listConfig: IListConfig) { diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-actions/table-cell-actions.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-actions/table-cell-actions.component.spec.ts index a171fb8dcc..ff2c231351 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-actions/table-cell-actions.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-actions/table-cell-actions.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; import { of as observableOf } from 'rxjs'; @@ -13,7 +13,7 @@ describe('TableCellActionsComponent', () => { let component: TableCellActionsComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ providers: [ ListConfig diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-actions/table-cell-actions.component.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-actions/table-cell-actions.component.ts index 4bd44e875a..03b602d68b 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-actions/table-cell-actions.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-actions/table-cell-actions.component.ts @@ -1,14 +1,13 @@ import { Component, Input, OnInit } from '@angular/core'; import { Store } from '@ngrx/store'; +import { AppState } from '@stratosui/store'; import { BehaviorSubject, combineLatest, Observable, of as observableOf } from 'rxjs'; import { map } from 'rxjs/operators'; -import { AppState } from '../../../../../../../store/src/app-state'; import { RowState } from '../../data-sources-controllers/list-data-source-types'; import { IListAction, ListConfig } from '../../list.component.types'; import { TableCellCustom } from '../../list.types'; - @Component({ selector: 'app-table-cell-actions', templateUrl: './table-cell-actions.component.html', diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-boolean-indicator/table-cell-boolean-indicator.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-boolean-indicator/table-cell-boolean-indicator.component.spec.ts index 7f03345367..679ca9b66d 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-boolean-indicator/table-cell-boolean-indicator.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-boolean-indicator/table-cell-boolean-indicator.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../../../test-framework/core-test.helper'; import { BooleanIndicatorComponent } from '../../../boolean-indicator/boolean-indicator.component'; @@ -9,7 +9,7 @@ describe('TableCellBooleanIndicatorComponent', () => { let component: TableCellBooleanIndicatorComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellBooleanIndicatorComponent, BooleanIndicatorComponent], imports: [...BaseTestModulesNoShared] diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-edit/table-cell-edit.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-edit/table-cell-edit.component.spec.ts index 297e59e6cf..30a51c1a76 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-edit/table-cell-edit.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-edit/table-cell-edit.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TableCellEditComponent } from './table-cell-edit.component'; import { CoreModule } from '../../../../../core/core.module'; @@ -8,7 +8,7 @@ describe('TableCellEditComponent', () => { let component: TableCellEditComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellEditComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-expander/table-cell-expander.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-expander/table-cell-expander.component.spec.ts index 208ef4b21d..e833b63adf 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-expander/table-cell-expander.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-expander/table-cell-expander.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { TableRowExpandedService } from '../table-row/table-row-expanded-service'; @@ -8,7 +8,7 @@ describe('TableCellExpanderComponent', () => { let component: TableCellExpanderComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellExpanderComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-favorite/table-cell-favorite.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-favorite/table-cell-favorite.component.spec.ts index ac8fa9a7fd..cbf2368c20 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-favorite/table-cell-favorite.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-favorite/table-cell-favorite.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../../../test-framework/core-test.helper'; import { TableCellFavoriteComponent } from './table-cell-favorite.component'; @@ -7,7 +7,7 @@ describe('TableCellFavoriteComponent', () => { let component: TableCellFavoriteComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellFavoriteComponent, diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-favorite/table-cell-favorite.component.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-favorite/table-cell-favorite.component.ts index d82c0e3b76..d64c5ef157 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-favorite/table-cell-favorite.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-favorite/table-cell-favorite.component.ts @@ -1,6 +1,6 @@ import { Component, Input } from '@angular/core'; +import { IFavoriteMetadata, UserFavorite } from '@stratosui/store'; -import { IFavoriteMetadata, UserFavorite } from '../../../../../../../store/src/types/user-favorites.types'; import { TableCellCustom } from '../../list.types'; import { ITableColumn } from '../table.types'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-icon/table-cell-icon.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-icon/table-cell-icon.component.spec.ts index 7a5d053d44..76c3d4194d 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-icon/table-cell-icon.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-icon/table-cell-icon.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../core/core.module'; import { TableCellIconComponent } from './table-cell-icon.component'; @@ -7,7 +7,7 @@ describe('TableCellIconComponent', () => { let component: TableCellIconComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TableCellIconComponent, diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-icon/table-cell-icon.component.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-icon/table-cell-icon.component.ts index c2e4406c83..dcd48b0675 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-icon/table-cell-icon.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-icon/table-cell-icon.component.ts @@ -14,7 +14,6 @@ export interface TableCellIconComponentConfig { }) export class TableCellIconComponent extends TableCellCustom> { - @Input('row') get row() { return super.row; } set row(row: T) { diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-radio/table-cell-radio.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-radio/table-cell-radio.component.spec.ts index 60a884ed59..d785b2f4fd 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-radio/table-cell-radio.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-radio/table-cell-radio.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { APIResource } from '../../../../../../../store/src/types/api.types'; import { CoreModule } from '../../../../../core/core.module'; @@ -10,7 +10,7 @@ describe('TableCellRadioComponent', () => { let fixture: ComponentFixture>; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellRadioComponent], imports: [CoreModule], diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-request-monitor-icon/table-cell-request-monitor-icon.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-request-monitor-icon/table-cell-request-monitor-icon.component.spec.ts index 85787d6f57..394cb6b3ce 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-request-monitor-icon/table-cell-request-monitor-icon.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-request-monitor-icon/table-cell-request-monitor-icon.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { endpointEntityType, stratosEntityFactory } from '../../../../../../../store/src/helpers/stratos-entity-factory'; import { BaseTestModules } from '../../../../../../test-framework/core-test.helper'; @@ -9,7 +9,7 @@ describe('TableCellRequestMonitorIconComponent', () => { let component: TableCellRequestMonitorIconComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ BaseTestModules, diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-request-monitor-icon/table-cell-request-monitor-icon.component.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-request-monitor-icon/table-cell-request-monitor-icon.component.ts index 7d6d6bb72d..973462d104 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-request-monitor-icon/table-cell-request-monitor-icon.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-request-monitor-icon/table-cell-request-monitor-icon.component.ts @@ -1,8 +1,6 @@ import { Component, OnInit } from '@angular/core'; -import { getRowMetadata } from '@stratosui/store'; +import { getRowMetadata, EntitySchema, APIResource } from '@stratosui/store'; -import { EntitySchema } from '../../../../../../../store/src/helpers/entity-schema'; -import { APIResource } from '../../../../../../../store/src/types/api.types'; import { AppMonitorComponentTypes } from '../../../app-action-monitor-icon/app-action-monitor-icon.component'; import { TableCellCustom } from '../../list.types'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-select/table-cell-select.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-select/table-cell-select.component.spec.ts index 87afb01fe0..3dba71aa1f 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-select/table-cell-select.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-select/table-cell-select.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../core/core.module'; import { IListDataSource } from '../../data-sources-controllers/list-data-source-types'; @@ -9,7 +9,7 @@ describe('TableCellSelectComponent', () => { let component: TableCellSelectComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellSelectComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-select/table-cell-select.component.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-select/table-cell-select.component.ts index 6783b2ed8b..11b470819b 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-select/table-cell-select.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-select/table-cell-select.component.ts @@ -5,7 +5,6 @@ import { map } from 'rxjs/operators'; import { RowState } from '../../data-sources-controllers/list-data-source-types'; import { TableCellCustom } from '../../list.types'; - @Component({ selector: 'app-table-cell-select', templateUrl: './table-cell-select.component.html', diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-side-panel/table-cell-side-panel.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-side-panel/table-cell-side-panel.component.spec.ts index a09acd8a06..191ab6eba6 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-side-panel/table-cell-side-panel.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell-side-panel/table-cell-side-panel.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { SidePanelService } from '../../../../services/side-panel.service'; @@ -8,7 +8,7 @@ describe('TableCellSidePanelComponent', () => { let component: TableCellSidePanelComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellSidePanelComponent], providers: [ diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell/table-cell.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell/table-cell.component.spec.ts index ffea2724cc..e441d146c0 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell/table-cell.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell/table-cell.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../core/core.module'; import { UtilsService } from '../../../../../core/utils.service'; @@ -19,7 +19,7 @@ describe('TableCellComponent', () => { let component: TableCellComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AppActionMonitorIconComponent, diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell/table-cell.component.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell/table-cell.component.ts index 2bd2fd27d5..56f1c07cd5 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-cell/table-cell.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-cell/table-cell.component.ts @@ -8,8 +8,8 @@ import { ViewContainerRef, ViewEncapsulation, } from '@angular/core'; +import { MultiActionListEntity } from '@stratosui/store'; -import { MultiActionListEntity } from '../../../../../../../store/src/monitors/pagination-monitor'; import { coreEndpointListDetailsComponents } from '../../../../../features/endpoints/endpoint-helpers'; import { IListDataSource } from '../../data-sources-controllers/list-data-source-types'; import { @@ -41,7 +41,6 @@ import { TableCellSidePanelComponent } from '../table-cell-side-panel/table-cell import { TableHeaderSelectComponent } from '../table-header-select/table-header-select.component'; import { ICellDefinition } from '../table.types'; - export const listTableCells: Type>[] = [ TableCellDefaultComponent, TableHeaderSelectComponent, @@ -63,13 +62,10 @@ export const listTableCells: Type>[] = [ ]; @Component({ - selector: 'app-table-cell', - templateUrl: './table-cell.component.html', - styleUrls: ['./table-cell.component.scss'], - encapsulation: ViewEncapsulation.None, - // When we look at modules we should think about swapping this approach (create + insert in code, hard code types here) with - // NgComponentOutlet (create in html with custom external module factory). Alternatively try marking as entry component where they live? - entryComponents: [...listTableCells] + selector: 'app-table-cell', + templateUrl: './table-cell.component.html', + styleUrls: ['./table-cell.component.scss'], + encapsulation: ViewEncapsulation.None }) export class TableCellComponent implements OnInit { @ViewChild('target', { read: ViewContainerRef, static: true }) diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-header-select/table-header-select.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-header-select/table-header-select.component.spec.ts index 9cb0b4badf..9f20a6beec 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-header-select/table-header-select.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-header-select/table-header-select.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TableHeaderSelectComponent } from './table-header-select.component'; import { CoreModule } from '../../../../../core/core.module'; @@ -8,7 +8,7 @@ describe('TableHeaderSelectComponent', () => { let component: TableHeaderSelectComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableHeaderSelectComponent], imports: [CoreModule] diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row-state-manager.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row-state-manager.spec.ts index 871d5896ef..23cb1a5e39 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row-state-manager.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row-state-manager.spec.ts @@ -1,7 +1,7 @@ import { tap, skip } from 'rxjs/operators'; import { RowsState, RowState } from '../../data-sources-controllers/list-data-source-types'; import { Observable, Subscription } from 'rxjs'; -import { async } from '@angular/core/testing'; +import { waitForAsync } from '@angular/core/testing'; import { TableRowStateManager } from './table-row-state-manager'; @@ -20,7 +20,7 @@ describe('TableRowStateManager', () => { expect(actualState).not.toEqual(fake); expect(stateManager.rowState).not.toEqual(fake); }; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { stateManager = new TableRowStateManager(); obs = stateManager.observable; if (sub) { @@ -29,7 +29,7 @@ describe('TableRowStateManager', () => { })); - it('should init the state', async(() => { + it('should init the state', waitForAsync(() => { const initState = { 1: { error: true @@ -49,7 +49,7 @@ describe('TableRowStateManager', () => { }) ).subscribe(); })); - it('should update the row state', async(() => { + it('should update the row state', waitForAsync(() => { const initState = { 1: { error: true, @@ -90,7 +90,7 @@ describe('TableRowStateManager', () => { ).subscribe(); stateManager.updateRowState('1', updateState); })); - it('should update the state', async(() => { + it('should update the state', waitForAsync(() => { const initState = { 1: { error: true, @@ -133,7 +133,7 @@ describe('TableRowStateManager', () => { stateManager.updateState(updateState); })); - it('should set the state', async(() => { + it('should set the state', waitForAsync(() => { const initState = { 1: { error: true, @@ -165,7 +165,7 @@ describe('TableRowStateManager', () => { stateManager.setState(setState); })); - it('should set the row state', async((done) => { + it('should set the row state', waitForAsync((done) => { const initState = { 1: { error: true, diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row.component.spec.ts index f36f1698d9..8878f9a56d 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row.component.spec.ts @@ -1,6 +1,6 @@ import { CdkTableModule } from '@angular/cdk/table'; import { Component } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { of as observableOf } from 'rxjs'; @@ -40,7 +40,7 @@ describe('TableRowComponent', () => { const elementShown = (element: Element) => element && window.getComputedStyle(element).display !== 'none'; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableRowComponent, TestHostComponent], imports: [ @@ -65,7 +65,7 @@ describe('TableRowComponent', () => { expect(component).toBeTruthy(); }); - it('should show error', async(() => { + it('should show error', waitForAsync(() => { fixture.detectChanges(); const [error1, error2] = getElements('table-row__error'); const errorShown = elementShown(error1); diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row.component.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row.component.ts index 2c8325d488..869f83cca3 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table-row/table-row.component.ts @@ -18,7 +18,6 @@ import { ListExpandedComponentType } from '../../list.component.types'; import { CardCell } from '../../list.types'; import { TableRowExpandedService } from './table-row-expanded-service'; - @Component({ selector: 'app-table-row', templateUrl: './table-row.component.html', diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table.component.spec.ts index 875a84c668..c2a3e5cf27 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table.component.spec.ts @@ -1,6 +1,6 @@ import { CdkTableModule } from '@angular/cdk/table'; import { Component, ViewChild } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { createBasicStoreModule } from '@stratosui/store/testing'; import { EMPTY, of as observableOf } from 'rxjs'; @@ -97,7 +97,7 @@ describe('TableComponent', () => { let component: TableHostComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/shared/components/list/list-table/table.component.ts b/src/frontend/packages/core/src/shared/components/list/list-table/table.component.ts index e63d89b826..dcded2feb5 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-table/table.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-table/table.component.ts @@ -1,12 +1,12 @@ import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { MatSort, Sort } from '@angular/material/sort'; +import { ListSort } from '@stratosui/store'; import { combineLatest as observableCombineLatest, Subscription } from 'rxjs'; import { tap } from 'rxjs/operators'; import { ITableListDataSource } from '../data-sources-controllers/list-data-source-types'; import { IListPaginationController } from '../data-sources-controllers/list-pagination-controller'; import { ListExpandedComponentType } from '../list.component.types'; -import { ListSort } from './../../../../../../store/src/actions/list.actions'; import { TableCellActionsComponent } from './table-cell-actions/table-cell-actions.component'; import { TableCellExpanderComponent, TableCellExpanderConfig } from './table-cell-expander/table-cell-expander.component'; import { TableCellSelectComponent } from './table-cell-select/table-cell-select.component'; @@ -14,7 +14,6 @@ import { TableHeaderSelectComponent } from './table-header-select/table-header-s import { TableRowExpandedService } from './table-row/table-row-expanded-service'; import { ITableColumn } from './table.types'; - const tableColumnSelect: ITableColumn = { columnId: 'select', headerCellComponent: TableHeaderSelectComponent, diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/apiKeys/apiKey-data-source.ts b/src/frontend/packages/core/src/shared/components/list/list-types/apiKeys/apiKey-data-source.ts index a57eee6721..14cf8c2839 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/apiKeys/apiKey-data-source.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/apiKeys/apiKey-data-source.ts @@ -1,8 +1,6 @@ import { Store } from '@ngrx/store'; +import { AppState, GetAllApiKeys, ApiKey } from '@stratosui/store'; -import { GetAllApiKeys } from '../../../../../../../store/src/actions/apiKey.actions'; -import { ApiKey } from '../../../../../../../store/src/apiKey.types'; -import { AppState } from '../../../../../../../store/src/app-state'; import { ListDataSource } from '../../data-sources-controllers/list-data-source'; import { IListConfig } from '../../list.component.types'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/apiKeys/apiKey-list-config.service.ts b/src/frontend/packages/core/src/shared/components/list/list-types/apiKeys/apiKey-list-config.service.ts index 98746a10f2..0928cedd7a 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/apiKeys/apiKey-list-config.service.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/apiKeys/apiKey-list-config.service.ts @@ -1,12 +1,10 @@ import { Injectable } from '@angular/core'; import { SortDirection } from '@angular/material/sort'; import { Store } from '@ngrx/store'; +import { ApiKey, stratosEntityCatalog, ListView, AppState } from '@stratosui/store'; + import moment from 'moment'; -import { ListView } from '../../../../../../../store/src/actions/list.actions'; -import { ApiKey } from '../../../../../../../store/src/apiKey.types'; -import { AppState } from '../../../../../../../store/src/app-state'; -import { stratosEntityCatalog } from '../../../../../../../store/src/stratos-entity-catalog'; import { ConfirmationDialogConfig } from '../../../confirmation-dialog.config'; import { ConfirmationDialogService } from '../../../confirmation-dialog.service'; import { ITableColumn } from '../../list-table/table.types'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/base-endpoints-data-source.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/base-endpoints-data-source.ts index cb329f65d0..acbc1590d4 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/base-endpoints-data-source.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/base-endpoints-data-source.ts @@ -1,17 +1,19 @@ import { Store } from '@ngrx/store'; +import { + PaginationMonitorFactory, + GetAllEndpoints, + AppState, + InternalEventMonitorFactory, + EndpointModel, + PaginationEntityState, + CreatePagination, + endpointEntityType, + EntityMonitorFactory, + endpointEntitiesSelector, +} from '@stratosui/store'; import { Observable } from 'rxjs'; import { map, pairwise, tap, withLatestFrom } from 'rxjs/operators'; -import { GetAllEndpoints } from '../../../../../../../store/src/actions/endpoint.actions'; -import { CreatePagination } from '../../../../../../../store/src/actions/pagination.actions'; -import { AppState } from '../../../../../../../store/src/app-state'; -import { endpointEntityType } from '../../../../../../../store/src/helpers/stratos-entity-factory'; -import { EntityMonitorFactory } from '../../../../../../../store/src/monitors/entity-monitor.factory.service'; -import { InternalEventMonitorFactory } from '../../../../../../../store/src/monitors/internal-event-monitor.factory'; -import { PaginationMonitorFactory } from '../../../../../../../store/src/monitors/pagination-monitor.factory'; -import { endpointEntitiesSelector } from '../../../../../../../store/src/selectors/endpoint.selectors'; -import { EndpointModel } from '../../../../../../../store/src/types/endpoint.types'; -import { PaginationEntityState } from '../../../../../../../store/src/types/pagination.types'; import { DataFunction, DataFunctionDefinition, ListDataSource } from '../../data-sources-controllers/list-data-source'; import { IListDataSourceConfig } from '../../data-sources-controllers/list-data-source-config'; import { RowsState } from '../../data-sources-controllers/list-data-source-types'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-card/endpoint-card.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-card/endpoint-card.component.spec.ts index 329ae6d4f2..ee8173b54b 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-card/endpoint-card.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-card/endpoint-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; import { EndpointModel } from '../../../../../../../../store/src/types/endpoint.types'; @@ -14,7 +14,7 @@ describe('EndpointCardComponent', () => { let component: EndpointCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [MetricsEndpointDetailsComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-card/endpoint-card.component.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-card/endpoint-card.component.ts index 06f27b7fe6..a3eed6a7a4 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-card/endpoint-card.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-card/endpoint-card.component.ts @@ -9,20 +9,21 @@ import { ViewContainerRef, } from '@angular/core'; import { Store } from '@ngrx/store'; +import { + getFullEndpointApiUrl, + entityCatalog, + MenuItem, + StratosStatus, + StratosCatalogEndpointEntity, + EndpointModel, + UserFavoriteEndpoint, + UserFavoriteManager, + RouterNav, + AppState, +} from '@stratosui/store'; import { combineLatest, Observable, of, ReplaySubject, Subscription } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; -import { AppState } from '../../../../../../../../store/src/app-state'; -import { getFullEndpointApiUrl } from '../../../../../../../../store/src/endpoint-utils'; -import { entityCatalog } from '../../../../../../../../store/src/entity-catalog/entity-catalog'; -import { - StratosCatalogEndpointEntity, -} from '../../../../../../../../store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity'; -import { EndpointModel } from '../../../../../../../../store/src/types/endpoint.types'; -import { MenuItem } from '../../../../../../../../store/src/types/menu-item.types'; -import { StratosStatus } from '../../../../../../../../store/src/types/shared.types'; -import { UserFavoriteEndpoint } from '../../../../../../../../store/src/types/user-favorites.types'; -import { UserFavoriteManager } from '../../../../../../../../store/src/user-favorite-manager'; import { EndpointsService } from '../../../../../../core/endpoints.service'; import { safeUnsubscribe } from '../../../../../../core/utils.service'; import { coreEndpointListDetailsComponents } from '../../../../../../features/endpoints/endpoint-helpers'; @@ -30,17 +31,15 @@ import { createMetaCardMenuItemSeparator } from '../../../list-cards/meta-card/m import { CardCell } from '../../../list.types'; import { BaseEndpointsDataSource } from '../base-endpoints-data-source'; import { EndpointListDetailsComponent, EndpointListHelper } from '../endpoint-list.helpers'; -import { RouterNav } from './../../../../../../../../store/src/actions/router.actions'; import { CopyToClipboardComponent } from './../../../../copy-to-clipboard/copy-to-clipboard.component'; import { SessionService } from '../../../../../services/session.service'; import { CurrentUserPermissionsService } from '../../../../../../core/permissions/current-user-permissions.service'; import { StratosCurrentUserPermissions } from '../../../../../../core/permissions/stratos-user-permissions.checker'; @Component({ - selector: 'app-endpoint-card', - templateUrl: './endpoint-card.component.html', - styleUrls: ['./endpoint-card.component.scss'], - entryComponents: [...coreEndpointListDetailsComponents] + selector: 'app-endpoint-card', + templateUrl: './endpoint-card.component.html', + styleUrls: ['./endpoint-card.component.scss'] }) export class EndpointCardComponent extends CardCell implements OnInit, OnDestroy { @@ -180,7 +179,6 @@ export class EndpointCardComponent extends CardCell implements On this.component.row = this.row; this.componentRef.changeDetectorRef.detectChanges(); - this.updateCardStatus(); } diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-data-source.helpers.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-data-source.helpers.ts index e5862804f9..43ea5b2a6b 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-data-source.helpers.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-data-source.helpers.ts @@ -1,13 +1,9 @@ +import { DisconnectEndpoint, EntityMonitorFactory, PaginationMonitor, EndpointModel } from '@stratosui/store'; import { combineLatest } from 'rxjs'; import { distinctUntilChanged, map, mergeMap, switchMap, tap } from 'rxjs/operators'; -import { DisconnectEndpoint } from '../../../../../../../store/src/actions/endpoint.actions'; -import { EntityMonitorFactory } from '../../../../../../../store/src/monitors/entity-monitor.factory.service'; -import { PaginationMonitor } from '../../../../../../../store/src/monitors/pagination-monitor'; -import { EndpointModel } from '../../../../../../../store/src/types/endpoint.types'; import { TableRowStateManager } from '../../list-table/table-row/table-row-state-manager'; - export function EndpointRowStateSetUpManager( paginationMonitor: PaginationMonitor, entityMonitorFactory: EntityMonitorFactory, diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-list.helpers.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-list.helpers.ts index 25b9d8d5ca..e2a6cbc64d 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-list.helpers.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoint-list.helpers.ts @@ -1,15 +1,10 @@ import { ComponentFactoryResolver, ComponentRef, Injectable, ViewContainerRef } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { Store } from '@ngrx/store'; +import { stratosEntityCatalog, RouterNav, AppState, entityCatalog, EndpointModel, ActionState } from '@stratosui/store'; import { combineLatest, Observable, of } from 'rxjs'; import { map, pairwise } from 'rxjs/operators'; -import { RouterNav } from '../../../../../../../store/src/actions/router.actions'; -import { AppState } from '../../../../../../../store/src/app-state'; -import { entityCatalog } from '../../../../../../../store/src/entity-catalog/entity-catalog'; -import { ActionState } from '../../../../../../../store/src/reducers/api-request-reducer/types'; -import { stratosEntityCatalog } from '../../../../../../../store/src/stratos-entity-catalog'; -import { EndpointModel } from '../../../../../../../store/src/types/endpoint.types'; import { CurrentUserPermissionsService } from '../../../../../core/permissions/current-user-permissions.service'; import { StratosCurrentUserPermissions } from '../../../../../core/permissions/stratos-user-permissions.checker'; import { diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoints-data-source.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoints-data-source.ts index 8ae915ccf3..8df0d9bd25 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoints-data-source.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoints-data-source.ts @@ -1,15 +1,16 @@ import { Store } from '@ngrx/store'; +import { + EntityMonitorFactory, + EndpointModel, + AppState, + InternalEventMonitorFactory, + PaginationMonitorFactory, + stratosEntityCatalog, +} from '@stratosui/store'; -import { AppState } from '../../../../../../../store/src/app-state'; -import { EntityMonitorFactory } from '../../../../../../../store/src/monitors/entity-monitor.factory.service'; -import { InternalEventMonitorFactory } from '../../../../../../../store/src/monitors/internal-event-monitor.factory'; -import { PaginationMonitorFactory } from '../../../../../../../store/src/monitors/pagination-monitor.factory'; -import { stratosEntityCatalog } from '../../../../../../../store/src/stratos-entity-catalog'; -import { EndpointModel } from '../../../../../../../store/src/types/endpoint.types'; import { IListConfig } from '../../list.component.types'; import { BaseEndpointsDataSource } from './base-endpoints-data-source'; - export class EndpointsDataSource extends BaseEndpointsDataSource { store: Store; diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoints-list-config.service.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoints-list-config.service.ts index ebdbf37e7e..69cc080018 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoints-list-config.service.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/endpoints-list-config.service.ts @@ -1,18 +1,20 @@ import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; +import { + ListView, + AppState, + InternalEventMonitorFactory, + EndpointModel, + PaginationEntityState, + SetClientFilter, + entityCatalog, + EntityMonitorFactory, + PaginationMonitorFactory, + stratosEntityCatalog, +} from '@stratosui/store'; import { BehaviorSubject, combineLatest, of } from 'rxjs'; import { debounceTime, filter, first, map } from 'rxjs/operators'; -import { ListView } from '../../../../../../../store/src/actions/list.actions'; -import { SetClientFilter } from '../../../../../../../store/src/actions/pagination.actions'; -import { AppState } from '../../../../../../../store/src/app-state'; -import { entityCatalog } from '../../../../../../../store/src/entity-catalog/entity-catalog'; -import { EntityMonitorFactory } from '../../../../../../../store/src/monitors/entity-monitor.factory.service'; -import { InternalEventMonitorFactory } from '../../../../../../../store/src/monitors/internal-event-monitor.factory'; -import { PaginationMonitorFactory } from '../../../../../../../store/src/monitors/pagination-monitor.factory'; -import { stratosEntityCatalog } from '../../../../../../../store/src/stratos-entity-catalog'; -import { EndpointModel } from '../../../../../../../store/src/types/endpoint.types'; -import { PaginationEntityState } from '../../../../../../../store/src/types/pagination.types'; import { UserFavoriteManager } from '../../../../../../../store/src/user-favorite-manager'; import { SessionService } from '../../../../services/session.service'; import { CurrentUserPermissionsService } from '../../../../../core/permissions/current-user-permissions.service'; @@ -35,8 +37,6 @@ import { TableCellEndpointDetailsComponent } from './table-cell-endpoint-details import { TableCellEndpointNameComponent } from './table-cell-endpoint-name/table-cell-endpoint-name.component'; import { TableCellEndpointStatusComponent } from './table-cell-endpoint-status/table-cell-endpoint-status.component'; - - @Injectable() export class EndpointsListConfigService implements IListConfig { cardComponent = EndpointCardComponent; diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-address/table-cell-endpoint-address.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-address/table-cell-endpoint-address.component.spec.ts index 1222435209..1baa1d704b 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-address/table-cell-endpoint-address.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-address/table-cell-endpoint-address.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../../../../test-framework/core-test.helper'; import { EndpointListHelper } from '../endpoint-list.helpers'; @@ -8,7 +8,7 @@ describe('TableCellEndpointAddressComponent', () => { let component: TableCellEndpointAddressComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [], imports: [...BaseTestModules], diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-address/table-cell-endpoint-address.component.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-address/table-cell-endpoint-address.component.ts index e7274cc597..da9acfdeb0 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-address/table-cell-endpoint-address.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-address/table-cell-endpoint-address.component.ts @@ -1,10 +1,8 @@ import { Component, Input } from '@angular/core'; +import { EndpointModel, getFullEndpointApiUrl, stratosEntityCatalog } from '@stratosui/store'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { getFullEndpointApiUrl } from '../../../../../../../../store/src/endpoint-utils'; -import { stratosEntityCatalog } from '../../../../../../../../store/src/stratos-entity-catalog'; -import { EndpointModel } from '../../../../../../../../store/src/types/endpoint.types'; import { TableCellCustom } from '../../../list.types'; import { RowWithEndpointId } from '../table-cell-endpoint-name/table-cell-endpoint-name.component'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-details/table-cell-endpoint-details.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-details/table-cell-endpoint-details.component.spec.ts index 7c9db5b9c5..2f82a95eb0 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-details/table-cell-endpoint-details.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-details/table-cell-endpoint-details.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../../../../test-framework/core-test.helper'; import { EndpointListHelper } from '../endpoint-list.helpers'; @@ -8,7 +8,7 @@ describe('TableCellEndpointDetailsComponent', () => { let component: TableCellEndpointDetailsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [], imports: [...BaseTestModules], diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-details/table-cell-endpoint-details.component.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-details/table-cell-endpoint-details.component.ts index 875378f576..f2c71c417e 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-details/table-cell-endpoint-details.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-details/table-cell-endpoint-details.component.ts @@ -8,9 +8,8 @@ import { ViewChild, ViewContainerRef, } from '@angular/core'; +import { entityCatalog, EndpointModel } from '@stratosui/store'; -import { entityCatalog } from '../../../../../../../../store/src/entity-catalog/entity-catalog'; -import { EndpointModel } from '../../../../../../../../store/src/types/endpoint.types'; import { TableCellCustom } from '../../../list.types'; import { EndpointListDetailsComponent, EndpointListHelper } from '../endpoint-list.helpers'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-name/table-cell-endpoint-name.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-name/table-cell-endpoint-name.component.spec.ts index 6813bb19d8..34bc279ae0 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-name/table-cell-endpoint-name.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-name/table-cell-endpoint-name.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EntityMonitorFactory } from '../../../../../../../../store/src/monitors/entity-monitor.factory.service'; import { EndpointModel } from '../../../../../../../../store/src/types/endpoint.types'; @@ -10,7 +10,7 @@ describe('TableCellEndpointNameComponent', () => { let component: TableCellEndpointNameComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ CoreModule, diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-name/table-cell-endpoint-name.component.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-name/table-cell-endpoint-name.component.ts index ea8467ffe0..59aa77381c 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-name/table-cell-endpoint-name.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-name/table-cell-endpoint-name.component.ts @@ -1,10 +1,8 @@ import { Component, Input } from '@angular/core'; +import { entityCatalog, EndpointModel, stratosEntityCatalog } from '@stratosui/store'; import { Observable } from 'rxjs'; import { filter, map } from 'rxjs/operators'; -import { entityCatalog } from '../../../../../../../../store/src/entity-catalog/entity-catalog'; -import { stratosEntityCatalog } from '../../../../../../../../store/src/stratos-entity-catalog'; -import { EndpointModel } from '../../../../../../../../store/src/types/endpoint.types'; import { EndpointsService } from '../../../../../../core/endpoints.service'; import { TableCellCustom } from '../../../list.types'; diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-status/table-cell-endpoint-status.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-status/table-cell-endpoint-status.component.spec.ts index 2bceee6209..bdc642247a 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-status/table-cell-endpoint-status.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-status/table-cell-endpoint-status.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EndpointModel } from '../../../../../../../../store/src/types/endpoint.types'; import { CoreModule } from '../../../../../../core/core.module'; @@ -8,7 +8,7 @@ describe('TableCellEndpointStatusComponent', () => { let component: TableCellEndpointStatusComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellEndpointStatusComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-status/table-cell-endpoint-status.component.ts b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-status/table-cell-endpoint-status.component.ts index 4bc0b5572f..604bd3105c 100644 --- a/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-status/table-cell-endpoint-status.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list-types/endpoint/table-cell-endpoint-status/table-cell-endpoint-status.component.ts @@ -1,7 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; +import { entityCatalog, EndpointModel } from '@stratosui/store'; -import { entityCatalog } from '../../../../../../../../store/src/entity-catalog/entity-catalog'; -import { EndpointModel } from '../../../../../../../../store/src/types/endpoint.types'; import { TableCellCustom } from '../../../list.types'; @Component({ diff --git a/src/frontend/packages/core/src/shared/components/list/list.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/list.component.spec.ts index 79d01782ed..a6f3b219ca 100644 --- a/src/frontend/packages/core/src/shared/components/list/list.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/list.component.spec.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, NgZone } from '@angular/core'; -import { async, ComponentFixture, inject, TestBed } from '@angular/core/testing'; +import { ComponentFixture, inject, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Store } from '@ngrx/store'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -119,7 +119,7 @@ describe('ListComponent', () => { let component: ListComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ providers: [ { provide: ListConfig, useClass: EndpointsListConfigService }, @@ -260,7 +260,7 @@ describe('ListComponent', () => { // expect(sortSection.hidden).toBeFalsy(); }); - it('First filter hidden if only one option', async(() => { + it('First filter hidden if only one option', () => { component.config.getMultiFiltersConfigs = () => { return [ { @@ -301,8 +301,8 @@ describe('ListComponent', () => { const multiFilterSection: HTMLElement = hostElement.querySelector('.list-component__header__left--multi-filters'); expect(multiFilterSection.hidden).toBeFalsy(); expect(multiFilterSection.childElementCount).toBe(0); - - })); + + }); }); diff --git a/src/frontend/packages/core/src/shared/components/list/list.component.theme.scss b/src/frontend/packages/core/src/shared/components/list/list.component.theme.scss index 654f1a09e1..3aa02a6d1e 100644 --- a/src/frontend/packages/core/src/shared/components/list/list.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/list/list.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @import '../../../../sass/mixins'; @mixin list-theme($theme, $app-theme) { $primary: map-get($theme, primary); diff --git a/src/frontend/packages/core/src/shared/components/list/list.component.ts b/src/frontend/packages/core/src/shared/components/list/list.component.ts index 0bfe7df8e7..523f8755c4 100644 --- a/src/frontend/packages/core/src/shared/components/list/list.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/list.component.ts @@ -19,6 +19,23 @@ import { NgForm, NgModel } from '@angular/forms'; import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { SortDirection } from '@angular/material/sort'; import { Store } from '@ngrx/store'; +import { + SetClientFilterKey, + SetPage, + entityCatalog, + getListStateObservables, + GeneralAppState, + ListFilter, + ListPagination, + ListSort, + ListView, + SetListViewAction, + EntityCatalogEntityConfig, + ActionState, + ResetPagination, + ResetPaginationSortFilter, + PaginatedAction, +} from '@stratosui/store'; import { asapScheduler, BehaviorSubject, @@ -44,25 +61,6 @@ import { withLatestFrom, } from 'rxjs/operators'; -import { - ListFilter, - ListPagination, - ListSort, - ListView, - SetListViewAction, -} from '../../../../../store/src/actions/list.actions'; -import { - ResetPagination, - ResetPaginationSortFilter, - SetClientFilterKey, - SetPage, -} from '../../../../../store/src/actions/pagination.actions'; -import { GeneralAppState } from '../../../../../store/src/app-state'; -import { entityCatalog } from '../../../../../store/src/entity-catalog/entity-catalog'; -import { EntityCatalogEntityConfig } from '../../../../../store/src/entity-catalog/entity-catalog.types'; -import { ActionState } from '../../../../../store/src/reducers/api-request-reducer/types'; -import { getListStateObservables } from '../../../../../store/src/reducers/list.reducer'; -import { PaginatedAction } from '../../../../../store/src/types/pagination.types'; import { safeUnsubscribe } from '../../../core/utils.service'; import { EntitySelectConfig, diff --git a/src/frontend/packages/core/src/shared/components/list/list.component.types.ts b/src/frontend/packages/core/src/shared/components/list/list.component.types.ts index 8178325a14..6ede94f4d8 100644 --- a/src/frontend/packages/core/src/shared/components/list/list.component.types.ts +++ b/src/frontend/packages/core/src/shared/components/list/list.component.types.ts @@ -1,13 +1,9 @@ import { Type } from '@angular/core'; +import { ActionState, defaultClientPaginationPageSize, ListView } from '@stratosui/store'; import moment from 'moment'; import { BehaviorSubject, combineLatest, Observable, of as observableOf } from 'rxjs'; import { filter, first, map, startWith, switchMap } from 'rxjs/operators'; -import { ListView } from '../../../../../store/src/actions/list.actions'; -import { ActionState } from '../../../../../store/src/reducers/api-request-reducer/types'; -import { - defaultClientPaginationPageSize, -} from '../../../../../store/src/reducers/pagination-reducer/pagination-reducer-reset-pagination'; import { ITimeRange } from '../../services/metrics-range-selector.types'; import { ListDataSource } from './data-sources-controllers/list-data-source'; import { IListDataSource } from './data-sources-controllers/list-data-source-types'; diff --git a/src/frontend/packages/core/src/shared/components/list/list.helper.ts b/src/frontend/packages/core/src/shared/components/list/list.helper.ts index 7fae33f3b3..1a3af909fe 100644 --- a/src/frontend/packages/core/src/shared/components/list/list.helper.ts +++ b/src/frontend/packages/core/src/shared/components/list/list.helper.ts @@ -1,9 +1,11 @@ +import { + EntityCatalogEntityConfig, + EntityMonitorFactory, + PaginationMonitor, + PaginationMonitorFactory, +} from '@stratosui/store'; import { Subscription } from 'rxjs'; -import { EntityCatalogEntityConfig } from '../../../../../store/src/entity-catalog/entity-catalog.types'; -import { EntityMonitorFactory } from '../../../../../store/src/monitors/entity-monitor.factory.service'; -import { PaginationMonitor } from '../../../../../store/src/monitors/pagination-monitor'; -import { PaginationMonitorFactory } from '../../../../../store/src/monitors/pagination-monitor.factory'; import { TableRowStateManager } from './list-table/table-row/table-row-state-manager'; export type ListRowStateSetUpManager = ( diff --git a/src/frontend/packages/core/src/shared/components/list/max-list-message/max-list-message.component.spec.ts b/src/frontend/packages/core/src/shared/components/list/max-list-message/max-list-message.component.spec.ts index 7a1fe8fb5e..592dd0a021 100644 --- a/src/frontend/packages/core/src/shared/components/list/max-list-message/max-list-message.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/list/max-list-message/max-list-message.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MatIconModule } from '@angular/material/icon'; import { RouterTestingModule } from '@angular/router/testing'; @@ -10,7 +10,7 @@ describe('MaxListMessageComponent', () => { let component: MaxListMessageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ MaxListMessageComponent, diff --git a/src/frontend/packages/core/src/shared/components/list/max-list-message/max-list-message.component.ts b/src/frontend/packages/core/src/shared/components/list/max-list-message/max-list-message.component.ts index 36294cb32f..ca15940976 100644 --- a/src/frontend/packages/core/src/shared/components/list/max-list-message/max-list-message.component.ts +++ b/src/frontend/packages/core/src/shared/components/list/max-list-message/max-list-message.component.ts @@ -1,19 +1,13 @@ import { Component, EventEmitter, Input, OnDestroy, Output } from '@angular/core'; import { Store } from '@ngrx/store'; +import { entityCatalog, EntityCatalogEntityConfig, PaginationPageIteratorConfig, AppState } from '@stratosui/store'; import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs'; import { filter, map } from 'rxjs/operators'; -import { AppState } from '../../../../../../store/src/app-state'; -import { entityCatalog } from '../../../../../../store/src/entity-catalog/entity-catalog'; -import { EntityCatalogEntityConfig } from '../../../../../../store/src/entity-catalog/entity-catalog.types'; -import { - PaginationPageIteratorConfig, -} from '../../../../../../store/src/entity-request-pipeline/pagination-request-base-handlers/pagination-iterator.pipe'; import { safeUnsubscribe } from '../../../../core/utils.service'; import { NoContentMessageLine } from '../../no-content-message/no-content-message.component'; import { ITableTextMaxed } from '../list-table/table.types'; - @Component({ selector: 'app-max-list-message', templateUrl: './max-list-message.component.html', diff --git a/src/frontend/packages/core/src/shared/components/list/simple-list/entity-catalog-datasource.ts b/src/frontend/packages/core/src/shared/components/list/simple-list/entity-catalog-datasource.ts index 0b75bc20e1..2593e9ab1d 100644 --- a/src/frontend/packages/core/src/shared/components/list/simple-list/entity-catalog-datasource.ts +++ b/src/frontend/packages/core/src/shared/components/list/simple-list/entity-catalog-datasource.ts @@ -1,10 +1,6 @@ import { Store } from '@ngrx/store'; +import { StratosBaseCatalogEntity, EntityPipelineEntity, UserFavorite } from '@stratosui/store'; -import { - StratosBaseCatalogEntity, -} from '../../../../../../store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity'; -import { EntityPipelineEntity } from '../../../../../../store/src/entity-request-pipeline/pipeline.types'; -import { UserFavorite } from '../../../../../../store/src/types/user-favorites.types'; import { ListDataSource } from '../data-sources-controllers/list-data-source'; import { createTableColumnFavorite } from '../list-table/table-cell-favorite/table-cell-favorite.component'; import { ListConfig, ListViewTypes } from '../list.component.types'; diff --git a/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.spec.ts b/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.spec.ts index 8a6c026a8a..f4fde17b99 100644 --- a/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed, tick, waitForAsync } from '@angular/core/testing'; import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations'; import { createBasicStoreModule } from '@stratosui/store/testing'; import { of } from 'rxjs'; @@ -27,7 +27,7 @@ describe('LoadingPageComponent', () => { let element: HTMLElement; let entityFactory: EntityMonitorFactoryMock; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ MDAppModule, diff --git a/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.theme.scss b/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.theme.scss index cfafcab20a..de72f201cc 100644 --- a/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin loading-page-theme($theme, $app-theme) { .loading-page { background-color: map-get($app-theme, app-background-color); diff --git a/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.ts b/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.ts index d6fe9bab15..bb90866ced 100644 --- a/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.ts +++ b/src/frontend/packages/core/src/shared/components/loading-page/loading-page.component.ts @@ -1,13 +1,9 @@ import { animate, style, transition, trigger } from '@angular/animations'; import { Component, Input, OnInit } from '@angular/core'; +import { EntitySchema, EntityMonitor, EntityMonitorFactory } from '@stratosui/store'; import { combineLatest, Observable, of as observableOf } from 'rxjs'; import { filter, first, map, startWith } from 'rxjs/operators'; -import { EntitySchema } from '../../../../../store/src/helpers/entity-schema'; -import { EntityMonitor } from '../../../../../store/src/monitors/entity-monitor'; -import { EntityMonitorFactory } from '../../../../../store/src/monitors/entity-monitor.factory.service'; - - @Component({ selector: 'app-loading-page', templateUrl: './loading-page.component.html', diff --git a/src/frontend/packages/core/src/shared/components/log-viewer/ansi-colorizer.ts b/src/frontend/packages/core/src/shared/components/log-viewer/ansi-colorizer.ts index 6982dfcf6c..f67d225c60 100644 --- a/src/frontend/packages/core/src/shared/components/log-viewer/ansi-colorizer.ts +++ b/src/frontend/packages/core/src/shared/components/log-viewer/ansi-colorizer.ts @@ -1,4 +1,3 @@ - // Ansi code to reset all colours const RESET = '\x1B[0m'; diff --git a/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.spec.ts b/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.spec.ts index f88696bdcd..b6aaab6f58 100644 --- a/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.spec.ts @@ -1,6 +1,6 @@ import { CommonModule } from '@angular/common'; import { Component, ViewChild } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { from as observableFrom, Subject } from 'rxjs'; import { filter, first } from 'rxjs/operators'; @@ -24,7 +24,7 @@ describe('LogViewerComponent', () => { let stream: Subject; let contentEl: HTMLDivElement; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TestHostComponent, @@ -63,7 +63,7 @@ describe('LogViewerComponent', () => { expect(contentEl.children.length).toEqual(1); expect(contentEl.children[0].children[0].innerHTML).toEqual(logText); done(); - }); + }, 50); }); it('should only allow max rows', (done) => { diff --git a/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.theme.scss b/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.theme.scss index 2834ef8c25..5c35cca0c5 100644 --- a/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @function ansi-colour($ansi-colours, $colour-name, $intense) { @if map-has-key($ansi-colours, $colour-name) { diff --git a/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.ts b/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.ts index 89627ef174..71dcab9efa 100644 --- a/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.ts +++ b/src/frontend/packages/core/src/shared/components/log-viewer/log-viewer.component.ts @@ -25,7 +25,6 @@ import { import { AnsiColors } from './ansi-colors'; - interface LogStreamMessage { message: string; isError?: boolean; diff --git a/src/frontend/packages/core/src/shared/components/markdown-preview/markdown-preview.component.spec.ts b/src/frontend/packages/core/src/shared/components/markdown-preview/markdown-preview.component.spec.ts index 9c7a44a49e..8e7fd699b7 100644 --- a/src/frontend/packages/core/src/shared/components/markdown-preview/markdown-preview.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/markdown-preview/markdown-preview.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpClientModule, HttpHandler } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -14,7 +14,7 @@ describe('MarkdownPreviewComponent', () => { let component: MarkdownPreviewComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [MarkdownPreviewComponent, SidepanelPreviewComponent], providers: [HttpClient, HttpHandler, SidePanelService], diff --git a/src/frontend/packages/core/src/shared/components/markdown-preview/markdown-preview.component.ts b/src/frontend/packages/core/src/shared/components/markdown-preview/markdown-preview.component.ts index dcc36d291d..6487cfce0f 100644 --- a/src/frontend/packages/core/src/shared/components/markdown-preview/markdown-preview.component.ts +++ b/src/frontend/packages/core/src/shared/components/markdown-preview/markdown-preview.component.ts @@ -1,10 +1,11 @@ import { HttpClient } from '@angular/common/http'; import { Component, ElementRef, Input, SecurityContext, ViewChild } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; -import markdown from 'marked'; import { PreviewableComponent } from '../../previewable-component'; +import { marked } from 'marked'; + @Component({ selector: 'app-markdown-preview', templateUrl: './markdown-preview.component.html', @@ -41,17 +42,17 @@ export class MarkdownPreviewComponent implements PreviewableComponent { (markText) => { if (markText && markText.length > 0) { // Basic sanitization - markdown.setOptions({ + marked.setOptions({ sanitize: true, sanitizer: dirty => this.domSanitizer.sanitize(SecurityContext.HTML, dirty), }); - const renderer = new markdown.Renderer(); + const renderer = new marked.Renderer(); // Ensure links in the readme open in a new tab renderer.link = (href, title, text) => { - const link = markdown.Renderer.prototype.link.call(renderer, href, title, text); + const link = marked.Renderer.prototype.link.call(renderer, href, title, text); return link.replace(' console.warn(`Failed to fetch markdown with url ${this.documentUrl}: `, error)); diff --git a/src/frontend/packages/core/src/shared/components/metadata-item/metadata-item.component.spec.ts b/src/frontend/packages/core/src/shared/components/metadata-item/metadata-item.component.spec.ts index b690ffed37..5572a931b2 100644 --- a/src/frontend/packages/core/src/shared/components/metadata-item/metadata-item.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/metadata-item/metadata-item.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MetadataItemComponent } from './metadata-item.component'; import { CoreModule } from '../../../core/core.module'; @@ -8,7 +8,7 @@ describe('MetadataItemComponent', () => { let component: MetadataItemComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ MetadataItemComponent, diff --git a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.spec.ts b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.spec.ts index 6c913ac361..e9b48b1784 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -14,7 +14,7 @@ xdescribe('MetricsChartComponent', () => { let component: MetricsChartComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ MDAppModule, diff --git a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.theme.scss b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.theme.scss index 93f12229cb..f0f5a397e7 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin metrics-chart-theme($theme, $app-theme) { $primary: map-get($theme, primary); diff --git a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.ts b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.ts index 87c950e6ae..79a021c37d 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.ts +++ b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.component.ts @@ -1,18 +1,18 @@ import { AfterContentInit, Component, ContentChild, Input, OnDestroy, OnInit } from '@angular/core'; import { Store } from '@ngrx/store'; -import { combineLatest, Observable, Subscription, timer } from 'rxjs'; -import { debounce, distinctUntilChanged, map, startWith } from 'rxjs/operators'; - -import { MetricsAction } from '../../../../../store/src/actions/metrics.actions'; -import { AppState } from '../../../../../store/src/app-state'; -import { EntityMonitor } from '../../../../../store/src/monitors/entity-monitor'; -import { EntityMonitorFactory } from '../../../../../store/src/monitors/entity-monitor.factory.service'; import { + MetricsAction, + EntityMonitor, ChartSeries, IMetrics, MetricResultTypes, MetricsFilterSeries, -} from '../../../../../store/src/types/base-metric.types'; + AppState, + EntityMonitorFactory, +} from '@stratosui/store'; +import { combineLatest, Observable, Subscription, timer } from 'rxjs'; +import { debounce, distinctUntilChanged, map, startWith } from 'rxjs/operators'; + import { MetricsRangeSelectorComponent } from '../metrics-range-selector/metrics-range-selector.component'; import { MetricsChartTypes, MetricsLineChartConfig, YAxisTickFormattingFunc } from './metrics-chart.types'; import { MetricsChartManager } from './metrics.component.manager'; diff --git a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.types.ts b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.types.ts index 1f25aecc2b..b9c901cdb6 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.types.ts +++ b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics-chart.types.ts @@ -1,4 +1,4 @@ -import { MetricsAction } from '../../../../../store/src/actions/metrics.actions'; +import { MetricsAction } from '@stratosui/store'; export interface IMetricsConfig { metricsAction: MetricsAction; diff --git a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics.component.helpers.ts b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics.component.helpers.ts index 6976345c7c..163040c1d1 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics.component.helpers.ts +++ b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics.component.helpers.ts @@ -1,7 +1,7 @@ -import { ChartSeries, MetricsFilterSeries, IMetricMatrixResult } from '../../../../../store/src/types/base-metric.types'; -import { YAxisTickFormattingFunc, MetricsLineChartConfig } from './metrics-chart.types'; -import { MetricsAction } from '../../../../../store/src/actions/metrics.actions'; +import { ChartSeries, MetricsFilterSeries, IMetricMatrixResult, MetricsAction } from '@stratosui/store'; + import { MetricsConfig } from './metrics-chart.component'; +import { YAxisTickFormattingFunc, MetricsLineChartConfig } from './metrics-chart.types'; export class MetricsChartHelpers { static getDateSeriesName(value: number) { diff --git a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics.component.manager.ts b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics.component.manager.ts index 82bff9c4dc..6937de1e4e 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-chart/metrics.component.manager.ts +++ b/src/frontend/packages/core/src/shared/components/metrics-chart/metrics.component.manager.ts @@ -1,5 +1,6 @@ +import { IMetricsData, ChartSeries } from '@stratosui/store'; + import { MetricsConfig } from './metrics-chart.component'; -import { IMetricsData, ChartSeries } from '../../../../../store/src/types/base-metric.types'; function dateLessThanUnix(date: Date, unix: number) { const unixDate = date.getTime() / 1000; diff --git a/src/frontend/packages/core/src/shared/components/metrics-parent-range-selector/metrics-parent-range-selector.component.spec.ts b/src/frontend/packages/core/src/shared/components/metrics-parent-range-selector/metrics-parent-range-selector.component.spec.ts index e14b522546..5f851dec97 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-parent-range-selector/metrics-parent-range-selector.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/metrics-parent-range-selector/metrics-parent-range-selector.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -14,7 +14,7 @@ describe('MetricsParentRangeSelectorComponent', () => { let component: MetricsParentRangeSelectorComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [MetricsParentRangeSelectorComponent, StartEndDateComponent, DateTimeComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/metrics-parent-range-selector/metrics-parent-range-selector.component.ts b/src/frontend/packages/core/src/shared/components/metrics-parent-range-selector/metrics-parent-range-selector.component.ts index 016031c362..7f8712ac72 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-parent-range-selector/metrics-parent-range-selector.component.ts +++ b/src/frontend/packages/core/src/shared/components/metrics-parent-range-selector/metrics-parent-range-selector.component.ts @@ -1,9 +1,7 @@ import { AfterContentInit, Component, ContentChildren, OnDestroy, QueryList } from '@angular/core'; +import { EntityMonitorFactory, IMetrics, MetricQueryType } from '@stratosui/store'; import { Subscription } from 'rxjs'; -import { EntityMonitorFactory } from '../../../../../store/src/monitors/entity-monitor.factory.service'; -import { IMetrics } from '../../../../../store/src/types/base-metric.types'; -import { MetricQueryType } from '../../../../../store/src/types/metric.types'; import { MetricsRangeSelectorManagerService } from '../../services/metrics-range-selector-manager.service'; import { MetricsChartComponent } from '../metrics-chart/metrics-chart.component'; diff --git a/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.spec.ts b/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.spec.ts index 64d5bd8610..0bf9a87271 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -14,7 +14,7 @@ describe('MetricsRangeSelectorComponent', () => { let component: MetricsRangeSelectorComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [MetricsRangeSelectorComponent, StartEndDateComponent, DateTimeComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.theme.scss b/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.theme.scss index 47911410fe..7bcc7372a9 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin metrics-range-selector-theme($theme, $app-theme) { $primary: map-get($theme, primary); $background-color: map-get($app-theme, app-background-color); diff --git a/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.ts b/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.ts index facb1bfe9a..d6c1367b06 100644 --- a/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.ts +++ b/src/frontend/packages/core/src/shared/components/metrics-range-selector/metrics-range-selector.component.ts @@ -1,15 +1,12 @@ import { Component, EventEmitter, Input, OnDestroy, Output } from '@angular/core'; -import moment from 'moment'; +import { EntityMonitorFactory, MetricQueryType, IMetrics, MetricsAction, EntityMonitor } from '@stratosui/store'; import { Subscription } from 'rxjs'; -import { MetricsAction } from '../../../../../store/src/actions/metrics.actions'; -import { EntityMonitor } from '../../../../../store/src/monitors/entity-monitor'; -import { EntityMonitorFactory } from '../../../../../store/src/monitors/entity-monitor.factory.service'; -import { IMetrics } from '../../../../../store/src/types/base-metric.types'; -import { MetricQueryType } from '../../../../../store/src/types/metric.types'; import { MetricsRangeSelectorManagerService } from '../../services/metrics-range-selector-manager.service'; import { ITimeRange } from '../../services/metrics-range-selector.types'; +import moment from 'moment'; + @Component({ selector: 'app-metrics-range-selector', templateUrl: './metrics-range-selector.component.html', @@ -44,7 +41,6 @@ export class MetricsRangeSelectorComponent implements OnDestroy { public rangeTypes = MetricQueryType; - @Output() public metricsAction = new EventEmitter(); diff --git a/src/frontend/packages/core/src/shared/components/multiline-title/multiline-title.component.spec.ts b/src/frontend/packages/core/src/shared/components/multiline-title/multiline-title.component.spec.ts index 08b0f695f6..0062d6fd7f 100644 --- a/src/frontend/packages/core/src/shared/components/multiline-title/multiline-title.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/multiline-title/multiline-title.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MultilineTitleComponent } from './multiline-title.component'; @@ -6,7 +6,7 @@ describe('MultilineTitleComponent', () => { let component: MultilineTitleComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ MultilineTitleComponent ] }) diff --git a/src/frontend/packages/core/src/shared/components/multiline-title/multiline-title.component.theme.scss b/src/frontend/packages/core/src/shared/components/multiline-title/multiline-title.component.theme.scss index a4b9a0af4f..93e7cb55fb 100644 --- a/src/frontend/packages/core/src/shared/components/multiline-title/multiline-title.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/multiline-title/multiline-title.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin app-multiline-title-theme($theme, $app-theme) { // Firefox only diff --git a/src/frontend/packages/core/src/shared/components/nested-tabs/nested-tabs.component.spec.ts b/src/frontend/packages/core/src/shared/components/nested-tabs/nested-tabs.component.spec.ts index 3c33e953a9..11f49ca0aa 100644 --- a/src/frontend/packages/core/src/shared/components/nested-tabs/nested-tabs.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/nested-tabs/nested-tabs.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../test-framework/core-test.helper'; import { NestedTabsComponent } from './nested-tabs.component'; @@ -7,7 +7,7 @@ describe('NestedTabsComponent', () => { let component: NestedTabsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [NestedTabsComponent], imports: [...BaseTestModulesNoShared] diff --git a/src/frontend/packages/core/src/shared/components/nested-tabs/nested-tabs.component.ts b/src/frontend/packages/core/src/shared/components/nested-tabs/nested-tabs.component.ts index 98f10111f7..70b588cdda 100644 --- a/src/frontend/packages/core/src/shared/components/nested-tabs/nested-tabs.component.ts +++ b/src/frontend/packages/core/src/shared/components/nested-tabs/nested-tabs.component.ts @@ -2,7 +2,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { TabNavItem } from '../../../tab-nav.types'; - @Component({ selector: 'app-nested-tabs', templateUrl: './nested-tabs.component.html', diff --git a/src/frontend/packages/core/src/shared/components/no-content-message/no-content-message.component.spec.ts b/src/frontend/packages/core/src/shared/components/no-content-message/no-content-message.component.spec.ts index 0ea5208b12..4edec0f034 100644 --- a/src/frontend/packages/core/src/shared/components/no-content-message/no-content-message.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/no-content-message/no-content-message.component.spec.ts @@ -1,5 +1,5 @@ import { CoreModule } from '../../../core/core.module'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoContentMessageComponent } from './no-content-message.component'; @@ -7,7 +7,7 @@ describe('NoContentMessageComponent', () => { let component: NoContentMessageComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/page-header/page-header-events/page-header-events.component.spec.ts b/src/frontend/packages/core/src/shared/components/page-header/page-header-events/page-header-events.component.spec.ts index 4fac88a1a2..44bc3c4221 100644 --- a/src/frontend/packages/core/src/shared/components/page-header/page-header-events/page-header-events.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/page-header/page-header-events/page-header-events.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { PageHeaderEventsComponent } from './page-header-events.component'; import { SharedModule } from '../../../shared.module'; @@ -10,7 +10,7 @@ describe('PageHeaderEventsComponent', () => { let component: PageHeaderEventsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ providers: [InternalEventMonitorFactory], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/page-header/page-header-events/page-header-events.component.ts b/src/frontend/packages/core/src/shared/components/page-header/page-header-events/page-header-events.component.ts index eb328ff6f1..2569f16f3c 100644 --- a/src/frontend/packages/core/src/shared/components/page-header/page-header-events/page-header-events.component.ts +++ b/src/frontend/packages/core/src/shared/components/page-header/page-header-events/page-header-events.component.ts @@ -2,13 +2,12 @@ import { animate, style, transition, trigger } from '@angular/animations'; import { Component, Input, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; +import { AppState } from '@stratosui/store'; import { combineLatest, Observable, of as observableOf } from 'rxjs'; import { first, map, publishReplay, refCount, share } from 'rxjs/operators'; -import { AppState } from '../../../../../../store/src/app-state'; import { endpointEventKey, GlobalEventService, IGlobalEvent } from '../../../global-events.service'; - @Component({ selector: 'app-page-header-events', templateUrl: './page-header-events.component.html', diff --git a/src/frontend/packages/core/src/shared/components/page-header/page-header.component.spec.ts b/src/frontend/packages/core/src/shared/components/page-header/page-header.component.spec.ts index a31607b99d..28296b62fc 100644 --- a/src/frontend/packages/core/src/shared/components/page-header/page-header.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/page-header/page-header.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { RouterTestingModule } from '@angular/router/testing'; import { StoreModule } from '@ngrx/store'; @@ -18,7 +18,7 @@ describe('PageHeaderComponent', () => { let component: PageHeaderComponent; let fixture: ComponentFixture; const URL_KEY = 'key'; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ providers: [ InternalEventMonitorFactory, diff --git a/src/frontend/packages/core/src/shared/components/page-header/page-header.component.ts b/src/frontend/packages/core/src/shared/components/page-header/page-header.component.ts index a98b34b4ce..e1da835576 100644 --- a/src/frontend/packages/core/src/shared/components/page-header/page-header.component.ts +++ b/src/frontend/packages/core/src/shared/components/page-header/page-header.component.ts @@ -2,25 +2,28 @@ import { TemplatePortal } from '@angular/cdk/portal'; import { AfterViewInit, Component, Input, OnDestroy, TemplateRef, ViewChild } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { Store } from '@ngrx/store'; +import { + InternalEventSeverity, + IFavoriteMetadata, + UserFavorite, + AddRecentlyVisitedEntityAction, + StratosStatus, + selectDashboardState, + ToggleSideNav, + AppState, + selectIsMobile, + UserProfileInfo, +} from '@stratosui/store'; import moment from 'moment'; import { combineLatest, Observable } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; -import { ToggleSideNav } from '../../../../../store/src/actions/dashboard-actions'; -import { AddRecentlyVisitedEntityAction } from '../../../../../store/src/actions/recently-visited.actions'; -import { AppState } from '../../../../../store/src/app-state'; -import { selectIsMobile } from '../../../../../store/src/selectors/dashboard.selectors'; -import { InternalEventSeverity } from '../../../../../store/src/types/internal-events.types'; -import { StratosStatus } from '../../../../../store/src/types/shared.types'; -import { IFavoriteMetadata, UserFavorite } from '../../../../../store/src/types/user-favorites.types'; import { CurrentUserPermissionsService } from '../../../core/permissions/current-user-permissions.service'; import { StratosCurrentUserPermissions } from '../../../core/permissions/stratos-user-permissions.checker'; import { UserProfileService } from '../../../core/user-profile.service'; import { IPageSideNavTab } from '../../../features/dashboard/page-side-nav/page-side-nav.component'; import { TabNavService } from '../../../tab-nav.service'; import { GlobalEventService, IGlobalEvent } from '../../global-events.service'; -import { selectDashboardState } from './../../../../../store/src/selectors/dashboard.selectors'; -import { UserProfileInfo } from './../../../../../store/src/types/user-profile.types'; import { EndpointsService } from './../../../core/endpoints.service'; import { environment } from './../../../environments/environment'; import { BREADCRUMB_URL_PARAM, IHeaderBreadcrumb, IHeaderBreadcrumbLink } from './page-header.types'; diff --git a/src/frontend/packages/core/src/shared/components/page-header/page-header.types.ts b/src/frontend/packages/core/src/shared/components/page-header/page-header.types.ts index 6de9051912..784fe1f2d4 100644 --- a/src/frontend/packages/core/src/shared/components/page-header/page-header.types.ts +++ b/src/frontend/packages/core/src/shared/components/page-header/page-header.types.ts @@ -1,4 +1,4 @@ -import { InternalEventSeverity } from '../../../../../store/src/types/internal-events.types'; +import { InternalEventSeverity } from '@stratosui/store'; export interface IHeaderBreadcrumbLink { value: string; diff --git a/src/frontend/packages/core/src/shared/components/page-header/show-page-header/show-page-header.component.spec.ts b/src/frontend/packages/core/src/shared/components/page-header/show-page-header/show-page-header.component.spec.ts index 3214487c5e..6b1c1a8942 100644 --- a/src/frontend/packages/core/src/shared/components/page-header/show-page-header/show-page-header.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/page-header/show-page-header/show-page-header.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { CoreModule } from '../../../../core/core.module'; @@ -9,7 +9,7 @@ describe('ShowPageHeaderComponent', () => { let component: ShowPageHeaderComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ShowPageHeaderComponent], providers: [ diff --git a/src/frontend/packages/core/src/shared/components/page-sub-nav-section/page-sub-nav-section.component.spec.ts b/src/frontend/packages/core/src/shared/components/page-sub-nav-section/page-sub-nav-section.component.spec.ts index 7fa3efed73..b369e564af 100644 --- a/src/frontend/packages/core/src/shared/components/page-sub-nav-section/page-sub-nav-section.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/page-sub-nav-section/page-sub-nav-section.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { PageSubNavSectionComponent } from './page-sub-nav-section.component'; @@ -6,7 +6,7 @@ describe('PageSubNavSectionComponent', () => { let component: PageSubNavSectionComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ PageSubNavSectionComponent ] }) diff --git a/src/frontend/packages/core/src/shared/components/page-sub-nav/page-sub-nav.component.spec.ts b/src/frontend/packages/core/src/shared/components/page-sub-nav/page-sub-nav.component.spec.ts index a2b538f67d..9e5ff1ecdc 100644 --- a/src/frontend/packages/core/src/shared/components/page-sub-nav/page-sub-nav.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/page-sub-nav/page-sub-nav.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { TabNavService } from '../../../tab-nav.service'; @@ -8,7 +8,7 @@ describe('PageSubNavComponent', () => { let component: PageSubNavComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [RouterTestingModule], declarations: [PageSubNavComponent], diff --git a/src/frontend/packages/core/src/shared/components/polling-indicator/polling-indicator.component.spec.ts b/src/frontend/packages/core/src/shared/components/polling-indicator/polling-indicator.component.spec.ts index 3c0add38dd..090ce6f3a2 100644 --- a/src/frontend/packages/core/src/shared/components/polling-indicator/polling-indicator.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/polling-indicator/polling-indicator.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../core/core.module'; import { PollingIndicatorComponent } from './polling-indicator.component'; @@ -8,7 +8,7 @@ describe('PollingIndicatorComponent', () => { let component: PollingIndicatorComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [PollingIndicatorComponent], imports: [CoreModule] diff --git a/src/frontend/packages/core/src/shared/components/profile-settings/profile-settings.component.spec.ts b/src/frontend/packages/core/src/shared/components/profile-settings/profile-settings.component.spec.ts index b730d85bc4..45a607024e 100644 --- a/src/frontend/packages/core/src/shared/components/profile-settings/profile-settings.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/profile-settings/profile-settings.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../test-framework/core-test.helper'; import { ProfileSettingsComponent } from './profile-settings.component'; @@ -7,7 +7,7 @@ describe('ProfileSettingsComponent', () => { let component: ProfileSettingsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: BaseTestModules, declarations: [ ProfileSettingsComponent ] diff --git a/src/frontend/packages/core/src/shared/components/recent-entities/recent-entities.component.spec.ts b/src/frontend/packages/core/src/shared/components/recent-entities/recent-entities.component.spec.ts index 4db2802dc4..089eb4b2d5 100644 --- a/src/frontend/packages/core/src/shared/components/recent-entities/recent-entities.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/recent-entities/recent-entities.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -11,7 +11,7 @@ describe('RecentEntitiesComponent', () => { let component: RecentEntitiesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ RouterTestingModule, diff --git a/src/frontend/packages/core/src/shared/components/recent-entities/recent-entities.component.ts b/src/frontend/packages/core/src/shared/components/recent-entities/recent-entities.component.ts index 3d250cab68..54d220dade 100644 --- a/src/frontend/packages/core/src/shared/components/recent-entities/recent-entities.component.ts +++ b/src/frontend/packages/core/src/shared/components/recent-entities/recent-entities.component.ts @@ -1,18 +1,18 @@ import { Component, Input } from '@angular/core'; import { Store } from '@ngrx/store'; -import moment from 'moment'; +import { + AppState, + endpointEntityType, + recentlyVisitedSelector, + IRecentlyVisitedEntity, + entityCatalog, + MAX_RECENT_COUNT, + endpointEntitiesSelector, +} from '@stratosui/store'; import { Observable, of as observableOf } from 'rxjs'; import { map } from 'rxjs/operators'; -import { AppState } from '../../../../../store/src/app-state'; -import { entityCatalog } from '../../../../../store/src/entity-catalog/entity-catalog'; -import { endpointEntityType } from '../../../../../store/src/helpers/stratos-entity-factory'; -import { - MAX_RECENT_COUNT, -} from '../../../../../store/src/reducers/current-user-roles-reducer/recently-visited.reducer.helpers'; -import { endpointEntitiesSelector } from '../../../../../store/src/selectors/endpoint.selectors'; -import { recentlyVisitedSelector } from '../../../../../store/src/selectors/recently-visitied.selectors'; -import { IRecentlyVisitedEntity } from '../../../../../store/src/types/recently-visited.types'; +import moment from 'moment'; class RenderableRecent { public mostRecentHit: moment.Moment; diff --git a/src/frontend/packages/core/src/shared/components/ring-chart/ring-chart.component.spec.ts b/src/frontend/packages/core/src/shared/components/ring-chart/ring-chart.component.spec.ts index 2726a319de..bab383fe0c 100644 --- a/src/frontend/packages/core/src/shared/components/ring-chart/ring-chart.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/ring-chart/ring-chart.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RingChartComponent } from './ring-chart.component'; import { NgxChartsModule } from '@swimlane/ngx-charts'; @@ -8,7 +8,7 @@ describe('RingChartComponent', () => { let component: RingChartComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [RingChartComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/ring-chart/ring-chart.component.ts b/src/frontend/packages/core/src/shared/components/ring-chart/ring-chart.component.ts index be9557639d..f2cacfe855 100644 --- a/src/frontend/packages/core/src/shared/components/ring-chart/ring-chart.component.ts +++ b/src/frontend/packages/core/src/shared/components/ring-chart/ring-chart.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnChanges, OnInit, ViewEncapsulation } from '@angular/core'; -import { ColorHelper } from '@swimlane/ngx-charts'; +import { ColorHelper, ScaleType } from '@swimlane/ngx-charts'; @Component({ selector: 'app-ring-chart', @@ -44,7 +44,7 @@ export class RingChartComponent implements OnInit, OnChanges { // Not set yet, can't set colour without it return; } - this.colors = new ColorHelper(this.scheme, 'ordinal', this.domain, this.customColors || []); + this.colors = new ColorHelper(this.scheme, ScaleType.Ordinal, this.domain, this.customColors || []); } getDomain(): any[] { diff --git a/src/frontend/packages/core/src/shared/components/routing-indicator/routing-indicator.component.spec.ts b/src/frontend/packages/core/src/shared/components/routing-indicator/routing-indicator.component.spec.ts index 47d840a45c..b6d3b46107 100644 --- a/src/frontend/packages/core/src/shared/components/routing-indicator/routing-indicator.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/routing-indicator/routing-indicator.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RoutingIndicatorComponent } from './routing-indicator.component'; import { CoreModule } from '../../../core/core.module'; @@ -9,7 +9,7 @@ describe('RoutingIndicatorComponent', () => { let component: RoutingIndicatorComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ RoutingIndicatorComponent diff --git a/src/frontend/packages/core/src/shared/components/sidepanel-preview/sidepanel-preview.component.spec.ts b/src/frontend/packages/core/src/shared/components/sidepanel-preview/sidepanel-preview.component.spec.ts index 3af77fa9bf..196f55b02a 100644 --- a/src/frontend/packages/core/src/shared/components/sidepanel-preview/sidepanel-preview.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/sidepanel-preview/sidepanel-preview.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpClientModule, HttpHandler } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -13,7 +13,7 @@ describe('SidepanelPreviewComponent', () => { let component: SidepanelPreviewComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [SidepanelPreviewComponent], providers: [HttpClient, HttpHandler, SidePanelService], diff --git a/src/frontend/packages/core/src/shared/components/simple-usage-chart/simple-usage-chart.component.spec.ts b/src/frontend/packages/core/src/shared/components/simple-usage-chart/simple-usage-chart.component.spec.ts index a49d20215c..754e96dc79 100644 --- a/src/frontend/packages/core/src/shared/components/simple-usage-chart/simple-usage-chart.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/simple-usage-chart/simple-usage-chart.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { NgxChartsModule } from '@swimlane/ngx-charts'; @@ -9,7 +9,7 @@ describe('SimpleUsageChartComponent', () => { let component: SimpleUsageChartComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [CoreModule, NgxChartsModule, NoopAnimationsModule], declarations: [SimpleUsageChartComponent] diff --git a/src/frontend/packages/core/src/shared/components/simple-usage-chart/simple-usage-chart.component.ts b/src/frontend/packages/core/src/shared/components/simple-usage-chart/simple-usage-chart.component.ts index 1a84b6bd43..30c7960a02 100644 --- a/src/frontend/packages/core/src/shared/components/simple-usage-chart/simple-usage-chart.component.ts +++ b/src/frontend/packages/core/src/shared/components/simple-usage-chart/simple-usage-chart.component.ts @@ -2,7 +2,6 @@ import { Component, ElementRef, Input, ViewChild } from '@angular/core'; import { IChartData, IChartThresholds, ISimpleUsageChartData, IUsageColor } from './simple-usage-chart.types'; - @Component({ selector: 'app-simple-usage-chart', templateUrl: './simple-usage-chart.component.html', diff --git a/src/frontend/packages/core/src/shared/components/snackbar-return/snackbar-return.component.spec.ts b/src/frontend/packages/core/src/shared/components/snackbar-return/snackbar-return.component.spec.ts index 1843090906..0778fa1cae 100644 --- a/src/frontend/packages/core/src/shared/components/snackbar-return/snackbar-return.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/snackbar-return/snackbar-return.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar'; import { BaseTestModulesNoShared } from '../../../../test-framework/core-test.helper'; @@ -8,7 +8,7 @@ describe('SnackBarReturnComponent', () => { let component: SnackBarReturnComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [SnackBarReturnComponent], imports: [...BaseTestModulesNoShared], diff --git a/src/frontend/packages/core/src/shared/components/snackbar-return/snackbar-return.component.ts b/src/frontend/packages/core/src/shared/components/snackbar-return/snackbar-return.component.ts index 71bdaa830e..184d477900 100644 --- a/src/frontend/packages/core/src/shared/components/snackbar-return/snackbar-return.component.ts +++ b/src/frontend/packages/core/src/shared/components/snackbar-return/snackbar-return.component.ts @@ -1,9 +1,7 @@ import { Component, Inject } from '@angular/core'; import { MAT_SNACK_BAR_DATA, MatSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar'; import { Store } from '@ngrx/store'; - -import { RouterNav } from '../../../../../store/src/actions/router.actions'; -import { AppState } from '../../../../../store/src/app-state'; +import { RouterNav, AppState } from '@stratosui/store'; @Component({ selector: 'app-snackbar-return', diff --git a/src/frontend/packages/core/src/shared/components/ssh-viewer/ssh-viewer.component.spec.ts b/src/frontend/packages/core/src/shared/components/ssh-viewer/ssh-viewer.component.spec.ts index 034980809e..377c9ba9a3 100644 --- a/src/frontend/packages/core/src/shared/components/ssh-viewer/ssh-viewer.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/ssh-viewer/ssh-viewer.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../core/core.module'; import { SshViewerComponent } from './ssh-viewer.component'; @@ -7,7 +7,7 @@ describe('SshViewerComponent', () => { let component: SshViewerComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ SshViewerComponent ], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-action/stacked-input-action.component.spec.ts b/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-action/stacked-input-action.component.spec.ts index f86dfef2d2..a9b469d4d6 100644 --- a/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-action/stacked-input-action.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-action/stacked-input-action.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { of as observableOf } from 'rxjs'; import { BaseTestModulesNoShared } from '../../../../../test-framework/core-test.helper'; @@ -9,7 +9,7 @@ describe('StackedInputActionComponent', () => { let component: StackedInputActionComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [StackedInputActionComponent, BooleanIndicatorComponent], imports: [...BaseTestModulesNoShared], @@ -17,7 +17,7 @@ describe('StackedInputActionComponent', () => { .compileComponents(); })); - beforeEach(async(() => { + beforeEach(waitForAsync(() => { fixture = TestBed.createComponent(StackedInputActionComponent); component = fixture.componentInstance; component.stateIn$ = observableOf({ @@ -27,7 +27,7 @@ describe('StackedInputActionComponent', () => { fixture.detectChanges(); })); - it('should create', async(() => { + it('should create', waitForAsync(() => { expect(component).toBeTruthy(); })); }); diff --git a/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-action/stacked-input-action.component.ts b/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-action/stacked-input-action.component.ts index 42a36c5e71..5e8f45588b 100644 --- a/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-action/stacked-input-action.component.ts +++ b/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-action/stacked-input-action.component.ts @@ -9,7 +9,7 @@ import { Output, ViewChild, } from '@angular/core'; -import { FormControl, Validators } from '@angular/forms'; +import { UntypedFormControl, Validators } from '@angular/forms'; import { Observable, Subscription } from 'rxjs'; import { safeUnsubscribe } from '../../../../core/utils.service'; @@ -74,7 +74,7 @@ export class StackedInputActionComponent implements OnInit, OnDestroy, AfterCont @ViewChild('inputElement', { static: true }) inputElement: ElementRef; public result = StackedInputActionResult; - public textFormControl = new FormControl('', [Validators.required, this.uniqueValidator.bind(this)]); + public textFormControl = new UntypedFormControl('', [Validators.required, this.uniqueValidator.bind(this)]); public state: StackedInputActionsState; private subs: Subscription[] = []; private otherValues: string[]; @@ -84,8 +84,7 @@ export class StackedInputActionComponent implements OnInit, OnDestroy, AfterCont if (this.config.isEmailInput) { validators.push(Validators.email); } - this.textFormControl = new FormControl('', validators); - + this.textFormControl = new UntypedFormControl('', validators); // Emit any changes of form state outwards. this.subs.push(this.textFormControl.valueChanges.subscribe((value) => { @@ -109,7 +108,7 @@ export class StackedInputActionComponent implements OnInit, OnDestroy, AfterCont this.inputElement.nativeElement.focus(); } - uniqueValidator(control: FormControl) { + uniqueValidator(control: UntypedFormControl) { // custom unique validator that has quick access to the recently changed otherValues array if (!this.otherValues || !this.otherValues.find(otherValue => otherValue === control.value)) { diff --git a/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-actions.component.spec.ts b/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-actions.component.spec.ts index 203ac1e349..2a56e7e4de 100644 --- a/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-actions.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-actions.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { of as observableOf } from 'rxjs'; import { BaseTestModulesNoShared } from '../../../../test-framework/core-test.helper'; @@ -10,7 +10,7 @@ describe('StackedInputActionsComponent', () => { let component: StackedInputActionsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [StackedInputActionsComponent, BooleanIndicatorComponent, StackedInputActionComponent], imports: [...BaseTestModulesNoShared], diff --git a/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-actions.component.ts b/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-actions.component.ts index 01fc74934c..87a9d85757 100644 --- a/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-actions.component.ts +++ b/src/frontend/packages/core/src/shared/components/stacked-input-actions/stacked-input-actions.component.ts @@ -34,10 +34,9 @@ export interface StackedInputActionsUpdate { values: { [key: string]: string }; * Host for a collection of StackedInputActionComponent components */ @Component({ - selector: 'app-stacked-input-actions', - templateUrl: './stacked-input-actions.component.html', - styleUrls: ['./stacked-input-actions.component.scss'], - entryComponents: [StackedInputActionComponent] + selector: 'app-stacked-input-actions', + templateUrl: './stacked-input-actions.component.html', + styleUrls: ['./stacked-input-actions.component.scss'] }) export class StackedInputActionsComponent implements OnInit, OnDestroy { @@ -47,7 +46,6 @@ export class StackedInputActionsComponent implements OnInit, OnDestroy { @Output() stateOut = new EventEmitter(); - @ViewChild('inputs', { read: ViewContainerRef, static: true }) inputs: ViewContainerRef; diff --git a/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.spec.ts b/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.spec.ts index 44339bcddf..a7ff180fb8 100644 --- a/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import moment from 'moment'; @@ -10,7 +10,7 @@ describe('StartEndDateComponent', () => { let fixture: ComponentFixture; let element: HTMLElement; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ SharedModule, diff --git a/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.theme.scss b/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.theme.scss index c0e2e8d34e..7ae3b03fcd 100644 --- a/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin start-end-theme($theme, $app-theme) { $status: map-get($app-theme, status); .invalid-message { diff --git a/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.ts b/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.ts index a8b3640c81..333cf8ded5 100644 --- a/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.ts +++ b/src/frontend/packages/core/src/shared/components/start-end-date/start-end-date.component.ts @@ -1,4 +1,5 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; + import moment from 'moment'; @Component({ @@ -93,7 +94,6 @@ export class StartEndDateComponent { return !this.validMessage; } - private isDifferentDate(oldDate: moment.Moment, newDate: moment.Moment) { return !oldDate || !newDate || !oldDate.isSame(newDate); } diff --git a/src/frontend/packages/core/src/shared/components/stepper/step/step.component.spec.ts b/src/frontend/packages/core/src/shared/components/stepper/step/step.component.spec.ts index 8b142cffe8..6ecd01ee02 100644 --- a/src/frontend/packages/core/src/shared/components/stepper/step/step.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/stepper/step/step.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StepComponent } from './step.component'; @@ -6,7 +6,7 @@ describe('StepComponent', () => { let component: StepComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [StepComponent] }) diff --git a/src/frontend/packages/core/src/shared/components/stepper/step/step.component.ts b/src/frontend/packages/core/src/shared/components/stepper/step/step.component.ts index 9ab65bcd51..f5a1177284 100644 --- a/src/frontend/packages/core/src/shared/components/stepper/step/step.component.ts +++ b/src/frontend/packages/core/src/shared/components/stepper/step/step.component.ts @@ -1,8 +1,7 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core'; +import { IRouterNavPayload } from '@stratosui/store'; import { Observable, of as observableOf } from 'rxjs'; -import { IRouterNavPayload } from '../../../../../../store/src/actions/router.actions'; - export interface IStepperStep { validate: Observable; valid?: boolean; diff --git a/src/frontend/packages/core/src/shared/components/stepper/stepper-form/stepper-form.component.spec.ts b/src/frontend/packages/core/src/shared/components/stepper/stepper-form/stepper-form.component.spec.ts index eb4eba3b61..ec5d93a487 100644 --- a/src/frontend/packages/core/src/shared/components/stepper/stepper-form/stepper-form.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/stepper/stepper-form/stepper-form.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StepperFormComponent } from './stepper-form.component'; @@ -6,7 +6,7 @@ describe('StepperFormComponent', () => { let component: StepperFormComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [StepperFormComponent] }) diff --git a/src/frontend/packages/core/src/shared/components/stepper/steppers.module.ts b/src/frontend/packages/core/src/shared/components/stepper/steppers.module.ts index 27bc211f57..05329e62d6 100644 --- a/src/frontend/packages/core/src/shared/components/stepper/steppers.module.ts +++ b/src/frontend/packages/core/src/shared/components/stepper/steppers.module.ts @@ -6,7 +6,6 @@ import { StepComponent } from './step/step.component'; import { StepperFormComponent } from './stepper-form/stepper-form.component'; import { SteppersComponent } from './steppers/steppers.component'; - @NgModule({ imports: [ CommonModule, diff --git a/src/frontend/packages/core/src/shared/components/stepper/steppers/steppers.component.spec.ts b/src/frontend/packages/core/src/shared/components/stepper/steppers/steppers.component.spec.ts index 91ab8b04a2..5da679e801 100644 --- a/src/frontend/packages/core/src/shared/components/stepper/steppers/steppers.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/stepper/steppers/steppers.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -12,7 +12,7 @@ describe('SteppersComponent', () => { let component: SteppersComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [SteppersComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/stepper/steppers/steppers.component.ts b/src/frontend/packages/core/src/shared/components/stepper/steppers/steppers.component.ts index 6c5b2b99e1..8f322e4400 100644 --- a/src/frontend/packages/core/src/shared/components/stepper/steppers/steppers.component.ts +++ b/src/frontend/packages/core/src/shared/components/stepper/steppers/steppers.component.ts @@ -11,18 +11,14 @@ import { import { MatSnackBar, MatSnackBarRef, SimpleSnackBar } from '@angular/material/snack-bar'; import { ActivatedRoute } from '@angular/router'; import { Store } from '@ngrx/store'; +import { getPreviousRoutingState, IRouterNavPayload, RouterNav, AppState } from '@stratosui/store'; import { combineLatest, Observable, of as observableOf, Subscription } from 'rxjs'; import { catchError, first, map, switchMap } from 'rxjs/operators'; -import { IRouterNavPayload, RouterNav } from '../../../../../../store/src/actions/router.actions'; -import { AppState } from '../../../../../../store/src/app-state'; -import { getPreviousRoutingState } from '../../../../../../store/src/types/routing.type'; import { BASE_REDIRECT_QUERY } from '../stepper.types'; import { SteppersService } from '../steppers.service'; import { StepComponent, StepOnNextResult } from './../step/step.component'; - - @Component({ selector: 'app-steppers', templateUrl: './steppers.component.html', diff --git a/src/frontend/packages/core/src/shared/components/stratos-title/stratos-title.component.spec.ts b/src/frontend/packages/core/src/shared/components/stratos-title/stratos-title.component.spec.ts index 4bc7ca3078..81bb11a3c3 100644 --- a/src/frontend/packages/core/src/shared/components/stratos-title/stratos-title.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/stratos-title/stratos-title.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StratosTitleComponent } from './stratos-title.component'; @@ -6,7 +6,7 @@ describe('StratosTitleComponent', () => { let component: StratosTitleComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ StratosTitleComponent ] }) diff --git a/src/frontend/packages/core/src/shared/components/tile-selector-tile/tile-selector-tile.component.spec.ts b/src/frontend/packages/core/src/shared/components/tile-selector-tile/tile-selector-tile.component.spec.ts index 4032667bb6..7cb94b4aae 100644 --- a/src/frontend/packages/core/src/shared/components/tile-selector-tile/tile-selector-tile.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/tile-selector-tile/tile-selector-tile.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TileSelectorTileComponent } from './tile-selector-tile.component'; import { ITileImgConfig } from '../tile/tile-selector.types'; @@ -8,7 +8,7 @@ describe('TileSelectorTileComponent', () => { let component: TileSelectorTileComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ MDAppModule diff --git a/src/frontend/packages/core/src/shared/components/tile-selector-tile/tile-selector-tile.component.theme.scss b/src/frontend/packages/core/src/shared/components/tile-selector-tile/tile-selector-tile.component.theme.scss index ac886f0b66..d07c3dd011 100644 --- a/src/frontend/packages/core/src/shared/components/tile-selector-tile/tile-selector-tile.component.theme.scss +++ b/src/frontend/packages/core/src/shared/components/tile-selector-tile/tile-selector-tile.component.theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin tile-selector-theme($theme, $app-theme) { $background-color: map-get($app-theme, app-background-color); $background: map-get($theme, background); diff --git a/src/frontend/packages/core/src/shared/components/tile-selector/tile-selector.component.spec.ts b/src/frontend/packages/core/src/shared/components/tile-selector/tile-selector.component.spec.ts index 08d6648f88..908d205ac1 100644 --- a/src/frontend/packages/core/src/shared/components/tile-selector/tile-selector.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/tile-selector/tile-selector.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../core/md.module'; import { TileSelectorComponent } from './tile-selector.component'; @@ -8,7 +8,7 @@ describe('TileSelectorComponent', () => { let component: TileSelectorComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ MDAppModule diff --git a/src/frontend/packages/core/src/shared/components/tile-selector/tile-selector.component.ts b/src/frontend/packages/core/src/shared/components/tile-selector/tile-selector.component.ts index 6a55092a17..ab2030ba7a 100644 --- a/src/frontend/packages/core/src/shared/components/tile-selector/tile-selector.component.ts +++ b/src/frontend/packages/core/src/shared/components/tile-selector/tile-selector.component.ts @@ -2,7 +2,6 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ITileConfig } from '../tile/tile-selector.types'; - @Component({ selector: 'app-tile-selector', templateUrl: './tile-selector.component.html', diff --git a/src/frontend/packages/core/src/shared/components/tile/tile-grid/tile-grid.component.spec.ts b/src/frontend/packages/core/src/shared/components/tile/tile-grid/tile-grid.component.spec.ts index 79537c5549..43955f919b 100644 --- a/src/frontend/packages/core/src/shared/components/tile/tile-grid/tile-grid.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/tile/tile-grid/tile-grid.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TileGridComponent } from './tile-grid.component'; @@ -6,7 +6,7 @@ describe('TileGridComponent', () => { let component: TileGridComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TileGridComponent ] }) diff --git a/src/frontend/packages/core/src/shared/components/tile/tile-group/tile-group.component.spec.ts b/src/frontend/packages/core/src/shared/components/tile/tile-group/tile-group.component.spec.ts index 9a296a6a4b..f0155bc1e8 100644 --- a/src/frontend/packages/core/src/shared/components/tile/tile-group/tile-group.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/tile/tile-group/tile-group.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TileGroupComponent } from './tile-group.component'; @@ -6,7 +6,7 @@ describe('TileGroupComponent', () => { let component: TileGroupComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TileGroupComponent ] }) diff --git a/src/frontend/packages/core/src/shared/components/tile/tile-selector.helpers.ts b/src/frontend/packages/core/src/shared/components/tile/tile-selector.helpers.ts index b364f968a3..7d96bb25e7 100644 --- a/src/frontend/packages/core/src/shared/components/tile/tile-selector.helpers.ts +++ b/src/frontend/packages/core/src/shared/components/tile/tile-selector.helpers.ts @@ -1,4 +1,5 @@ import { ITileConfig, ITileData, ITileGraphic } from './tile-selector.types'; + /** * deprecated */ diff --git a/src/frontend/packages/core/src/shared/components/tile/tile/tile.component.spec.ts b/src/frontend/packages/core/src/shared/components/tile/tile/tile.component.spec.ts index 14f942688a..a7e3dd3814 100644 --- a/src/frontend/packages/core/src/shared/components/tile/tile/tile.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/tile/tile/tile.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TileComponent } from './tile.component'; @@ -6,7 +6,7 @@ describe('TileComponent', () => { let component: TileComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ TileComponent ] }) diff --git a/src/frontend/packages/core/src/shared/components/unlimited-input/unlimited-input.component.spec.ts b/src/frontend/packages/core/src/shared/components/unlimited-input/unlimited-input.component.spec.ts index 994d1195a4..c9953b7c9b 100644 --- a/src/frontend/packages/core/src/shared/components/unlimited-input/unlimited-input.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/unlimited-input/unlimited-input.component.spec.ts @@ -1,6 +1,6 @@ import { Component, ViewChild } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormControl, FormGroup } from '@angular/forms'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from '../../../core/core.module'; @@ -17,11 +17,11 @@ import { UnlimitedInputComponent } from './unlimited-input.component'; class WrapperComponent { @ViewChild(UnlimitedInputComponent, { static: true }) unlimitedInput: UnlimitedInputComponent; - formGroup: FormGroup; + formGroup: UntypedFormGroup; constructor() { - this.formGroup = new FormGroup({ - inputName: new FormControl() + this.formGroup = new UntypedFormGroup({ + inputName: new UntypedFormControl() }); } @@ -32,7 +32,7 @@ describe('UnlimitedInputComponent', () => { let fixture: ComponentFixture; let element: HTMLElement; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [WrapperComponent, UnlimitedInputComponent], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/upload-progress-indicator/upload-progress-indicator.component.spec.ts b/src/frontend/packages/core/src/shared/components/upload-progress-indicator/upload-progress-indicator.component.spec.ts index fb9b0d6507..329f284425 100644 --- a/src/frontend/packages/core/src/shared/components/upload-progress-indicator/upload-progress-indicator.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/upload-progress-indicator/upload-progress-indicator.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { UploadProgressIndicatorComponent } from './upload-progress-indicator.component'; import { MDAppModule } from '../../../core/md.module'; @@ -9,7 +9,7 @@ describe('UploadProgressIndicatorComponent', () => { let component: UploadProgressIndicatorComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ UploadProgressIndicatorComponent ], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/usage-gauge/usage-gauge.component.spec.ts b/src/frontend/packages/core/src/shared/components/usage-gauge/usage-gauge.component.spec.ts index 6861615dec..c505d69d95 100644 --- a/src/frontend/packages/core/src/shared/components/usage-gauge/usage-gauge.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/usage-gauge/usage-gauge.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { UsageGaugeComponent } from './usage-gauge.component'; import { PercentagePipe } from '../../pipes/percentage.pipe'; @@ -9,7 +9,7 @@ describe('UsageGaugeComponent', () => { let component: UsageGaugeComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ UsageGaugeComponent, diff --git a/src/frontend/packages/core/src/shared/components/user-avatar/md5.ts b/src/frontend/packages/core/src/shared/components/user-avatar/md5.ts index 06abf96e4d..6b340155d5 100644 --- a/src/frontend/packages/core/src/shared/components/user-avatar/md5.ts +++ b/src/frontend/packages/core/src/shared/components/user-avatar/md5.ts @@ -1,7 +1,6 @@ /*eslint-disable*/ /*tslint:disable*/ - export class MD5 { private static _string: string; diff --git a/src/frontend/packages/core/src/shared/components/user-avatar/user-avatar.component.spec.ts b/src/frontend/packages/core/src/shared/components/user-avatar/user-avatar.component.spec.ts index 096818b8c8..5e5c2c3551 100644 --- a/src/frontend/packages/core/src/shared/components/user-avatar/user-avatar.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/user-avatar/user-avatar.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { UserAvatarComponent } from './user-avatar.component'; import { MDAppModule } from '../../../core/md.module'; @@ -7,7 +7,7 @@ describe('UserAvatarComponent', () => { let component: UserAvatarComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ UserAvatarComponent ], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/user-avatar/user-avatar.component.ts b/src/frontend/packages/core/src/shared/components/user-avatar/user-avatar.component.ts index adbca46ed5..8cfdb9e34d 100644 --- a/src/frontend/packages/core/src/shared/components/user-avatar/user-avatar.component.ts +++ b/src/frontend/packages/core/src/shared/components/user-avatar/user-avatar.component.ts @@ -1,6 +1,6 @@ import { Component, Input } from '@angular/core'; +import { UserProfileInfo } from '@stratosui/store'; -import { UserProfileInfo } from '../../../../../store/src/types/user-profile.types'; import { MD5 } from './md5'; @Component({ diff --git a/src/frontend/packages/core/src/shared/components/user-profile-banner/user-profile-banner.component.spec.ts b/src/frontend/packages/core/src/shared/components/user-profile-banner/user-profile-banner.component.spec.ts index f4d24e536f..31d6931f90 100644 --- a/src/frontend/packages/core/src/shared/components/user-profile-banner/user-profile-banner.component.spec.ts +++ b/src/frontend/packages/core/src/shared/components/user-profile-banner/user-profile-banner.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { UserProfileBannerComponent } from './user-profile-banner.component'; import { MDAppModule } from '../../../core/md.module'; @@ -8,7 +8,7 @@ describe('UserProfileBannerComponent', () => { let component: UserProfileBannerComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ UserProfileBannerComponent ], imports: [ diff --git a/src/frontend/packages/core/src/shared/components/user-profile-banner/user-profile-banner.component.ts b/src/frontend/packages/core/src/shared/components/user-profile-banner/user-profile-banner.component.ts index a7efc4cf89..9db8216a17 100644 --- a/src/frontend/packages/core/src/shared/components/user-profile-banner/user-profile-banner.component.ts +++ b/src/frontend/packages/core/src/shared/components/user-profile-banner/user-profile-banner.component.ts @@ -1,6 +1,5 @@ import { Component, Input } from '@angular/core'; - -import { UserProfileInfo } from '../../../../../store/src/types/user-profile.types'; +import { UserProfileInfo } from '@stratosui/store'; @Component({ selector: 'app-user-profile-banner', diff --git a/src/frontend/packages/core/src/shared/global-events.service.ts b/src/frontend/packages/core/src/shared/global-events.service.ts index ff9675a57e..cc941c5987 100644 --- a/src/frontend/packages/core/src/shared/global-events.service.ts +++ b/src/frontend/packages/core/src/shared/global-events.service.ts @@ -1,11 +1,9 @@ import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; +import { StratosStatus, GeneralEntityAppState } from '@stratosui/store'; import { BehaviorSubject, combineLatest, Observable, ReplaySubject } from 'rxjs'; import { debounceTime, distinctUntilChanged, map, publishReplay, refCount, startWith } from 'rxjs/operators'; -import { StratosStatus } from '../../../store/src/types/shared.types'; -import { GeneralEntityAppState } from './../../../store/src/app-state'; - export type GlobalEventTypes = 'warning' | 'error' | 'process' | 'complete'; export const endpointEventKey = 'endpointError'; diff --git a/src/frontend/packages/core/src/shared/services/long-running-op.service.ts b/src/frontend/packages/core/src/shared/services/long-running-op.service.ts index faf28966f3..5da8af2db8 100644 --- a/src/frontend/packages/core/src/shared/services/long-running-op.service.ts +++ b/src/frontend/packages/core/src/shared/services/long-running-op.service.ts @@ -1,7 +1,6 @@ import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; - -import { AppState } from '../../../../store/src/app-state'; +import { AppState } from '@stratosui/store'; @Injectable() export class LongRunningOperationsService { diff --git a/src/frontend/packages/core/src/shared/services/metrics-range-selector-manager.service.ts b/src/frontend/packages/core/src/shared/services/metrics-range-selector-manager.service.ts index 994a287b2f..8f372bc2b6 100644 --- a/src/frontend/packages/core/src/shared/services/metrics-range-selector-manager.service.ts +++ b/src/frontend/packages/core/src/shared/services/metrics-range-selector-manager.service.ts @@ -1,15 +1,13 @@ import { Injectable, NgZone } from '@angular/core'; -import moment from 'moment'; +import { MetricsAction, MetricQueryType, EntityMonitor, IMetrics } from '@stratosui/store'; import { Subject, Subscription } from 'rxjs'; import { debounceTime, takeWhile, tap } from 'rxjs/operators'; -import { MetricsAction } from '../../../../store/src/actions/metrics.actions'; -import { EntityMonitor } from '../../../../store/src/monitors/entity-monitor'; -import { IMetrics } from '../../../../store/src/types/base-metric.types'; -import { MetricQueryType } from '../../../../store/src/types/metric.types'; import { MetricsRangeSelectorService } from './metrics-range-selector.service'; import { ITimeRange } from './metrics-range-selector.types'; +import moment from 'moment'; + @Injectable() export class MetricsRangeSelectorManagerService { diff --git a/src/frontend/packages/core/src/shared/services/metrics-range-selector.service.ts b/src/frontend/packages/core/src/shared/services/metrics-range-selector.service.ts index a90943d7ac..3972dfb721 100644 --- a/src/frontend/packages/core/src/shared/services/metrics-range-selector.service.ts +++ b/src/frontend/packages/core/src/shared/services/metrics-range-selector.service.ts @@ -1,11 +1,10 @@ import { Injectable } from '@angular/core'; -import moment from 'moment'; +import { MetricQueryType, MetricQueryConfig, MetricsAction, IMetrics } from '@stratosui/store'; -import { MetricQueryConfig, MetricsAction } from '../../../../store/src/actions/metrics.actions'; -import { IMetrics } from '../../../../store/src/types/base-metric.types'; -import { MetricQueryType } from '../../../../store/src/types/metric.types'; import { ITimeRange, StoreMetricTimeRange } from './metrics-range-selector.types'; +import moment from 'moment'; + @Injectable() export class MetricsRangeSelectorService { diff --git a/src/frontend/packages/core/src/shared/services/metrics-range-selector.types.ts b/src/frontend/packages/core/src/shared/services/metrics-range-selector.types.ts index 2c2e47fe32..5eb83e55a3 100644 --- a/src/frontend/packages/core/src/shared/services/metrics-range-selector.types.ts +++ b/src/frontend/packages/core/src/shared/services/metrics-range-selector.types.ts @@ -1,6 +1,6 @@ -import moment from 'moment'; +import { MetricQueryType } from '@stratosui/store'; -import { MetricQueryType } from '../../../../store/src/types/metric.types'; +import moment from 'moment'; export type momentTuple = [moment.DurationInputArg1, moment.unitOfTime.DurationConstructor]; export interface ITimeRange { @@ -16,4 +16,3 @@ export interface StoreMetricTimeRange { step?: number; } - diff --git a/src/frontend/packages/core/src/shared/services/session.service.ts b/src/frontend/packages/core/src/shared/services/session.service.ts index d218b96bd4..9f5db9b004 100644 --- a/src/frontend/packages/core/src/shared/services/session.service.ts +++ b/src/frontend/packages/core/src/shared/services/session.service.ts @@ -1,12 +1,10 @@ import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; +import { selectSessionData, GeneralEntityAppState } from '@stratosui/store'; import { UserEndpointsEnabled } from 'frontend/packages/store/src/types/auth.types'; import { Observable } from 'rxjs'; import { first, map } from 'rxjs/operators'; -import { GeneralEntityAppState } from '../../../../store/src/app-state'; -import { selectSessionData } from '../../../../store/src/reducers/auth.reducer'; - @Injectable() export class SessionService { diff --git a/src/frontend/packages/core/src/shared/shared.module.ts b/src/frontend/packages/core/src/shared/shared.module.ts index 38a45ca14b..27ac00ce02 100644 --- a/src/frontend/packages/core/src/shared/shared.module.ts +++ b/src/frontend/packages/core/src/shared/shared.module.ts @@ -3,9 +3,9 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RouterModule } from '@angular/router'; +import { InternalEventMonitorFactory } from '@stratosui/store'; import { NgxChartsModule } from '@swimlane/ngx-charts'; -import { InternalEventMonitorFactory } from '../../../store/src/monitors/internal-event-monitor.factory'; import { CoreModule } from '../core/core.module'; import { AppActionMonitorIconComponent } from './components/app-action-monitor-icon/app-action-monitor-icon.component'; import { AppActionMonitorComponent } from './components/app-action-monitor/app-action-monitor.component'; @@ -120,7 +120,6 @@ import { MetricsRangeSelectorService } from './services/metrics-range-selector.s import { SessionService } from './services/session.service'; import { UserPermissionDirective } from './user-permission.directive'; - @NgModule({ imports: [ CommonModule, diff --git a/src/frontend/packages/core/src/styles.scss b/src/frontend/packages/core/src/styles.scss index 4761d57fe0..cd57ad949d 100644 --- a/src/frontend/packages/core/src/styles.scss +++ b/src/frontend/packages/core/src/styles.scss @@ -1,4 +1,4 @@ -// @import "~@angular/material/prebuilt-themes/indigo-pink.css"; +// @import "@angular/material/prebuilt-themes/indigo-pink.css"; @import '../sass/fonts'; @import '../sass/icons'; @import '../sass/theme'; diff --git a/src/frontend/packages/core/src/tab-nav.service.ts b/src/frontend/packages/core/src/tab-nav.service.ts index 99af87716c..8ff457c187 100644 --- a/src/frontend/packages/core/src/tab-nav.service.ts +++ b/src/frontend/packages/core/src/tab-nav.service.ts @@ -7,7 +7,6 @@ import { filter, map, observeOn, publishReplay, refCount, startWith } from 'rxjs import { IPageSideNavTab } from './features/dashboard/page-side-nav/page-side-nav.component'; import { IHeaderBreadcrumbLink } from './shared/components/page-header/page-header.types'; - @Injectable() export class TabNavService { @@ -94,7 +93,6 @@ export class TabNavService { ); } - constructor(private router: Router) { this.tabNavsSubject = new BehaviorSubject(undefined); this.tabNavs$ = this.observeSubject(this.tabNavsSubject); diff --git a/src/frontend/packages/core/src/test.ts b/src/frontend/packages/core/src/test.ts index d0b441ad3d..5fa78ccbbf 100644 --- a/src/frontend/packages/core/src/test.ts +++ b/src/frontend/packages/core/src/test.ts @@ -1,10 +1,6 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files -import 'zone.js/dist/long-stack-trace-zone'; -import 'zone.js/dist/proxy'; -import 'zone.js/dist/sync-test'; -import 'zone.js/dist/jasmine-patch'; -import 'zone.js/dist/async-test'; -import 'zone.js/dist/fake-async-test'; +import 'zone.js'; +import 'zone.js/testing'; import { APP_BASE_HREF } from '@angular/common'; import { getTestBed } from '@angular/core/testing'; @@ -17,7 +13,9 @@ declare const require: any; const testBed = getTestBed(); testBed.initTestEnvironment( BrowserDynamicTestingModule, - platformBrowserDynamicTesting() + platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false } +} ); beforeEach(() => { diff --git a/src/frontend/packages/core/test-framework/core-test.helper.ts b/src/frontend/packages/core/test-framework/core-test.helper.ts index bad6c14d0f..d534b0d3d1 100644 --- a/src/frontend/packages/core/test-framework/core-test.helper.ts +++ b/src/frontend/packages/core/test-framework/core-test.helper.ts @@ -3,11 +3,9 @@ import { NgModule } from '@angular/core'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { StoreModule } from '@ngrx/store'; +import { EntityCatalogHelper, EntityCatalogHelpers, appReducers } from '@stratosui/store'; import { createBasicStoreModule } from '@stratosui/store/testing'; -import { EntityCatalogHelper } from '../../store/src/entity-catalog/entity-catalog-entity/entity-catalog.service'; -import { EntityCatalogHelpers } from '../../store/src/entity-catalog/entity-catalog.helper'; -import { appReducers } from '../../store/src/reducers.module'; import { CoreModule } from '../src/core/core.module'; import { CurrentUserPermissionsService } from '../src/core/permissions/current-user-permissions.service'; import { @@ -34,7 +32,6 @@ import { MultilineTitleComponent } from '../src/shared/components/multiline-titl import { SharedModule } from '../src/shared/shared.module'; import { CoreTestingModule } from './core-test.modules'; - @NgModule({ imports: [CoreModule], providers: [ diff --git a/src/frontend/packages/core/test-framework/core-test.modules.ts b/src/frontend/packages/core/test-framework/core-test.modules.ts index 0110b5e1d5..11af498427 100644 --- a/src/frontend/packages/core/test-framework/core-test.modules.ts +++ b/src/frontend/packages/core/test-framework/core-test.modules.ts @@ -1,8 +1,11 @@ import { NgModule } from '@angular/core'; - -import { CATALOGUE_ENTITIES, EntityCatalogFeatureModule } from '../../store/src/entity-catalog.module'; -import { entityCatalog, TestEntityCatalog } from '../../store/src/entity-catalog/entity-catalog'; -import { generateStratosEntities } from '../../store/src/stratos-entity-generator'; +import { + CATALOGUE_ENTITIES, + EntityCatalogFeatureModule, + entityCatalog, + TestEntityCatalog, + generateStratosEntities, +} from '@stratosui/store'; @NgModule({ imports: [ diff --git a/src/frontend/packages/core/test-framework/entity-catalog-test-helpers.ts b/src/frontend/packages/core/test-framework/entity-catalog-test-helpers.ts index 010004b460..5496f779e8 100644 --- a/src/frontend/packages/core/test-framework/entity-catalog-test-helpers.ts +++ b/src/frontend/packages/core/test-framework/entity-catalog-test-helpers.ts @@ -1,6 +1,4 @@ -import { entityCatalog } from '../../store/src/entity-catalog/entity-catalog'; -import { StratosBaseCatalogEntity } from '../../store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity'; -import { EntityCatalogEntityConfig } from '../../store/src/entity-catalog/entity-catalog.types'; +import { StratosBaseCatalogEntity, entityCatalog, EntityCatalogEntityConfig} from '@stratosui/store'; export interface EntityCatalogHelperConfig { catalogEntities?: [EntityCatalogEntityConfig, StratosBaseCatalogEntity][]; diff --git a/src/frontend/packages/core/tsconfig.app.json b/src/frontend/packages/core/tsconfig.app.json index e35700247d..4a061876ec 100644 --- a/src/frontend/packages/core/tsconfig.app.json +++ b/src/frontend/packages/core/tsconfig.app.json @@ -1,6 +1,8 @@ { "extends": "../../../tsconfig.app.json", "compilerOptions": { + "declaration": true, + "declarationMap": true, "outDir": "../../../../out-tsc" }, "files": [ diff --git a/src/frontend/packages/desktop-extensions/src/desktop-login/desktop-login.component.spec.ts b/src/frontend/packages/desktop-extensions/src/desktop-login/desktop-login.component.spec.ts index c7a688b7b7..7a536e40f0 100644 --- a/src/frontend/packages/desktop-extensions/src/desktop-login/desktop-login.component.spec.ts +++ b/src/frontend/packages/desktop-extensions/src/desktop-login/desktop-login.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { DesktopLoginComponent } from './desktop-login.component'; @@ -6,7 +6,7 @@ describe('DesktopLoginComponent', () => { let component: DesktopLoginComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ DesktopLoginComponent ] }) diff --git a/src/frontend/packages/desktop-extensions/src/desktop-routing.module.ts b/src/frontend/packages/desktop-extensions/src/desktop-routing.module.ts index 3f630c6502..240fd62e79 100644 --- a/src/frontend/packages/desktop-extensions/src/desktop-routing.module.ts +++ b/src/frontend/packages/desktop-extensions/src/desktop-routing.module.ts @@ -27,7 +27,7 @@ const customRoutes: Routes = [ @NgModule({ imports: [ - RouterModule.forRoot(customRoutes), + RouterModule.forRoot(customRoutes, { relativeLinkResolution: 'legacy' }), ], declarations: [] }) diff --git a/src/frontend/packages/desktop-extensions/src/installer/choose-type/choose-type.component.spec.ts b/src/frontend/packages/desktop-extensions/src/installer/choose-type/choose-type.component.spec.ts index 41921a4b29..3ec683deef 100644 --- a/src/frontend/packages/desktop-extensions/src/installer/choose-type/choose-type.component.spec.ts +++ b/src/frontend/packages/desktop-extensions/src/installer/choose-type/choose-type.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ChooseTypeComponent } from './choose-type.component'; @@ -6,7 +6,7 @@ describe('ChooseTypeComponent', () => { let component: ChooseTypeComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ChooseTypeComponent ] }) diff --git a/src/frontend/packages/desktop-extensions/src/settings/desktop-settings/desktop-settings.component.spec.ts b/src/frontend/packages/desktop-extensions/src/settings/desktop-settings/desktop-settings.component.spec.ts index f757994ea8..e9a3e7fbd2 100644 --- a/src/frontend/packages/desktop-extensions/src/settings/desktop-settings/desktop-settings.component.spec.ts +++ b/src/frontend/packages/desktop-extensions/src/settings/desktop-settings/desktop-settings.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { DesktopSettingsComponent } from './desktop-settings.component'; @@ -6,7 +6,7 @@ describe('DesktopSettingsComponent', () => { let component: DesktopSettingsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ DesktopSettingsComponent ] }) diff --git a/src/frontend/packages/devkit/package.json b/src/frontend/packages/devkit/package.json index e27689fbd3..e7c78a2f8a 100644 --- a/src/frontend/packages/devkit/package.json +++ b/src/frontend/packages/devkit/package.json @@ -1,6 +1,9 @@ { "name": "@stratosui/devkit", "version": "0.0.1", + "description": "Stratos Development Kit for apps and extensions", + "license": "Apache-2.0", + "repository": "https://github.com/cloudfoundry/stratos", "scripts": { "build": "tsc && node build.js", "tsc": "tsc" @@ -11,7 +14,7 @@ "typescript": "~3.8.2" }, "devDependencies": { - "@angular-devkit/architect": "^1.0.0" + "@angular-devkit/architect": "^0.901.7" }, "builders": "builders/builders.json", "schematics": "./schematics/collection.json" diff --git a/src/frontend/packages/devkit/src/build/extensions.ts b/src/frontend/packages/devkit/src/build/extensions.ts index bb13aae220..701cf001b1 100644 --- a/src/frontend/packages/devkit/src/build/extensions.ts +++ b/src/frontend/packages/devkit/src/build/extensions.ts @@ -68,7 +68,7 @@ export class ExtensionsHandler { // Ignore changed in the overrides file - otherwise with ng serve we will build twice // The user needs to restart `ng serve` anyway if new extensions are added - webpackConfig.plugins.push(new WatchIgnorePlugin([overrideFile])); + webpackConfig.plugins.push(new WatchIgnorePlugin({ paths: [overrideFile] })); webpackConfig.plugins.push(new NormalModuleReplacementPlugin( regex, diff --git a/src/frontend/packages/devkit/src/build/main.ts b/src/frontend/packages/devkit/src/build/main.ts index d5954d0be2..d781b20de4 100644 --- a/src/frontend/packages/devkit/src/build/main.ts +++ b/src/frontend/packages/devkit/src/build/main.ts @@ -1,7 +1,7 @@ -import { StratosConfig } from '../lib/stratos.config'; -import { AssetsHandler } from './assets'; -import { ExtensionsHandler } from './extensions'; -import { SassHandler } from './sass'; +import { StratosConfig } from "../lib/stratos.config"; +import { AssetsHandler } from "./assets"; +import { ExtensionsHandler } from "./extensions"; +import { SassHandler } from "./sass"; /** * Webpack customizations for Stratos @@ -11,12 +11,13 @@ import { SassHandler } from './sass'; */ class StratosBuilder { - - constructor(public webpackConfig, public options) { } + constructor(public webpackConfig, public options) {} public run() { + const dir = this.webpackConfig.context || __dirname; + // Read in the Stratos config file if present (and do so config initialization) - const sConfig = new StratosConfig(__dirname, this.options); + const sConfig = new StratosConfig(dir, this.options); // Sass handler for themes and themable packages const sass = new SassHandler(); @@ -32,10 +33,20 @@ class StratosBuilder { } } +// TODO: tmp solution until webpack is updated to v5 +// This resolves the following error: +// Error: error:0308010C:digital envelope routines::unsupported +const crypto = require("crypto"); +const cryptoOrigCreateHash = crypto.createHash; +crypto.createHash = (algorithm) => + cryptoOrigCreateHash(algorithm == "md4" ? "sha256" : algorithm); + // Apply the Stratos customizations to the webpack configuration const runBuilder = (config, options) => { const builder = new StratosBuilder(config, options); builder.run(); + // TODO: also remove with update to webpack v5 + config.output.hashFunction = "sha256"; return config; }; diff --git a/src/frontend/packages/devkit/src/build/sass.ts b/src/frontend/packages/devkit/src/build/sass.ts index 5a1dcf8aa8..a6237f5f45 100644 --- a/src/frontend/packages/devkit/src/build/sass.ts +++ b/src/frontend/packages/devkit/src/build/sass.ts @@ -18,12 +18,16 @@ export class SassHandler { public apply(webpackConfig: any, config: StratosConfig) { // Find the node-saas plugin and add a custom import resolver webpackConfig.module.rules.forEach(rule => { - if (rule.include) { - rule.use.forEach(p => { - if (p.loader && p.loader.indexOf('sass-loader') > 0) { - p.options.sassOptions = { - importer: this.customSassImport(config) - }; + if (rule.rules !== undefined) { + rule.rules.forEach(innerRule => { + if (innerRule.use !== undefined) { + innerRule.use.forEach(p => { + if (p.loader && p.loader.indexOf('sass-loader') > 0) { + p.options.sassOptions = { + importer: this.customSassImport(config) + }; + } + }); } }); } diff --git a/src/frontend/packages/devkit/src/builders/theme.builder.ts b/src/frontend/packages/devkit/src/builders/theme.builder.ts index 5d133e9d0a..4d4c69c86a 100644 --- a/src/frontend/packages/devkit/src/builders/theme.builder.ts +++ b/src/frontend/packages/devkit/src/builders/theme.builder.ts @@ -27,7 +27,7 @@ async function commandBuilder( // Copy all files from root to the outPath - FS.copySync(prjMetadata.root, outPath); + FS.copySync(prjMetadata.root as string, outPath); // We can remove scripts from the package.json file const pkgFile = Packages.loadPackageFile(outPath); diff --git a/src/frontend/packages/devkit/src/lib/packages.ts b/src/frontend/packages/devkit/src/lib/packages.ts index c4944aaa35..9a8cedfd73 100644 --- a/src/frontend/packages/devkit/src/lib/packages.ts +++ b/src/frontend/packages/devkit/src/lib/packages.ts @@ -68,8 +68,14 @@ const isDirectory = source => { const stats = fs.lstatSync(realPath); return stats.isDirectory(); } -const getDirectories = source => - fs.readdirSync(source).map(name => path.join(source, name)).filter(isDirectory); + +const getDirectories = source => { + if (!fs.existsSync(source)) { + return []; + } + + return fs.readdirSync(source).map(name => path.join(source, name)).filter(isDirectory); +} // Default theme to use export const DEFAULT_THEME = '@stratosui/theme'; diff --git a/src/frontend/packages/example-extensions/src/acme-login/acme-login.component.spec.ts b/src/frontend/packages/example-extensions/src/acme-login/acme-login.component.spec.ts index 07e43bf547..a91303ac5c 100644 --- a/src/frontend/packages/example-extensions/src/acme-login/acme-login.component.spec.ts +++ b/src/frontend/packages/example-extensions/src/acme-login/acme-login.component.spec.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterTestingModule } from '@angular/router/testing'; import { StoreModule } from '@ngrx/store'; @@ -13,7 +13,7 @@ describe('AcmeLoginComponent', () => { let component: AcmeLoginComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AcmeLoginComponent], imports: [ diff --git a/src/frontend/packages/example-extensions/src/acme-support-info/acme-support-info.component.spec.ts b/src/frontend/packages/example-extensions/src/acme-support-info/acme-support-info.component.spec.ts index 49d1529359..bd47204b0f 100644 --- a/src/frontend/packages/example-extensions/src/acme-support-info/acme-support-info.component.spec.ts +++ b/src/frontend/packages/example-extensions/src/acme-support-info/acme-support-info.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AcmeSupportInfoComponent } from './acme-support-info.component'; import { CoreModule } from '../../core/core.module'; @@ -8,7 +8,7 @@ describe('AcmeSupportInfoComponent', () => { let component: AcmeSupportInfoComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AcmeSupportInfoComponent ], imports: [ diff --git a/src/frontend/packages/example-extensions/src/app-action-extension/app-action-extension.component.spec.ts b/src/frontend/packages/example-extensions/src/app-action-extension/app-action-extension.component.spec.ts index d63c3f0a38..78cc5e3092 100644 --- a/src/frontend/packages/example-extensions/src/app-action-extension/app-action-extension.component.spec.ts +++ b/src/frontend/packages/example-extensions/src/app-action-extension/app-action-extension.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -10,7 +10,7 @@ describe('AppActionExtensionComponent', () => { let component: AppActionExtensionComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AppActionExtensionComponent ], imports: [ diff --git a/src/frontend/packages/example-extensions/src/app-tab-extension/app-tab-extension.component.spec.ts b/src/frontend/packages/example-extensions/src/app-tab-extension/app-tab-extension.component.spec.ts index 9ababa08aa..55dc7159f8 100644 --- a/src/frontend/packages/example-extensions/src/app-tab-extension/app-tab-extension.component.spec.ts +++ b/src/frontend/packages/example-extensions/src/app-tab-extension/app-tab-extension.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AppTabExtensionComponent } from './app-tab-extension.component'; import { CoreModule } from '../../core/core.module'; @@ -10,7 +10,7 @@ describe('AppTabExtensionComponent', () => { let component: AppTabExtensionComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AppTabExtensionComponent ], imports: [ diff --git a/src/frontend/packages/example-extensions/src/example-routing.module.ts b/src/frontend/packages/example-extensions/src/example-routing.module.ts index 6559ca3ebb..25b26e3f44 100644 --- a/src/frontend/packages/example-extensions/src/example-routing.module.ts +++ b/src/frontend/packages/example-extensions/src/example-routing.module.ts @@ -14,7 +14,7 @@ const customRoutes: Routes = [{ @NgModule({ imports: [ - RouterModule.forRoot(customRoutes), + RouterModule.forRoot(customRoutes, { relativeLinkResolution: 'legacy' }), ], declarations: [] }) diff --git a/src/frontend/packages/extension/karma.conf.js b/src/frontend/packages/extension/karma.conf.js new file mode 100644 index 0000000000..b5e6358868 --- /dev/null +++ b/src/frontend/packages/extension/karma.conf.js @@ -0,0 +1,8 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + ...require('../../../../build/karma.conf.creator.js')('extension')(config) + }) + } \ No newline at end of file diff --git a/src/frontend/packages/extension/ng-package.json b/src/frontend/packages/extension/ng-package.json new file mode 100644 index 0000000000..fa3f700997 --- /dev/null +++ b/src/frontend/packages/extension/ng-package.json @@ -0,0 +1,8 @@ +{ + "$schema": "../../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../../dist/extension", + "lib": { + "entryFile": "src/public-api.ts", + "umdModuleIds": {} + } +} \ No newline at end of file diff --git a/src/frontend/packages/extension/package.json b/src/frontend/packages/extension/package.json new file mode 100644 index 0000000000..a1c36d8225 --- /dev/null +++ b/src/frontend/packages/extension/package.json @@ -0,0 +1,8 @@ +{ + "name": "@stratosui/extension", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^9.1.6", + "@angular/core": "^9.1.6" + } +} \ No newline at end of file diff --git a/src/frontend/packages/extension/src/extension.module.ts b/src/frontend/packages/extension/src/extension.module.ts new file mode 100644 index 0000000000..4f7c4f110b --- /dev/null +++ b/src/frontend/packages/extension/src/extension.module.ts @@ -0,0 +1,7 @@ +import { NgModule } from '@angular/core'; + +@NgModule({ + imports: [ + ] +}) +export class ExtensionModule { } \ No newline at end of file diff --git a/src/frontend/packages/extension/src/public-api.ts b/src/frontend/packages/extension/src/public-api.ts new file mode 100644 index 0000000000..e985bd6536 --- /dev/null +++ b/src/frontend/packages/extension/src/public-api.ts @@ -0,0 +1,5 @@ +/* + * Public API Surface of the extension package + */ + +export { ExtensionModule } from './extension.module'; \ No newline at end of file diff --git a/src/frontend/packages/extension/tsconfig.lib.json b/src/frontend/packages/extension/tsconfig.lib.json new file mode 100644 index 0000000000..dc686fd9df --- /dev/null +++ b/src/frontend/packages/extension/tsconfig.lib.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.lib.json", + "compilerOptions": { + "outDir": "../../../../out-tsc" + }, + "exclude": ["./src/test.ts", "**/*.spec.ts"] +} \ No newline at end of file diff --git a/src/frontend/packages/extension/tsconfig.lib.prod.json b/src/frontend/packages/extension/tsconfig.lib.prod.json new file mode 100644 index 0000000000..12f45466e3 --- /dev/null +++ b/src/frontend/packages/extension/tsconfig.lib.prod.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.lib.json", + "angularCompilerOptions": { + "enableIvy": false + } +} \ No newline at end of file diff --git a/src/frontend/packages/extension/tsconfig.spec.json b/src/frontend/packages/extension/tsconfig.spec.json new file mode 100644 index 0000000000..56b3e33bc1 --- /dev/null +++ b/src/frontend/packages/extension/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.spec.json", + "compilerOptions": { + "outDir": "../../../../out-tsc", + "types": ["jasmine", "node"] + }, + "files": ["src/test.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} \ No newline at end of file diff --git a/src/frontend/packages/extension/tslint.json b/src/frontend/packages/extension/tslint.json new file mode 100644 index 0000000000..f403b51490 --- /dev/null +++ b/src/frontend/packages/extension/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../../../../tslint.json", + "rules": { + "directive-selector": [ + false, + "attribute", + "lib", + "camelCase" + ], + "component-selector": [ + false, + "element", + "lib", + "kebab-case" + ] + } +} \ No newline at end of file diff --git a/src/frontend/packages/git/src/git-routing.module.ts b/src/frontend/packages/git/src/git-routing.module.ts index 7b9a4ec3eb..0635e42f59 100644 --- a/src/frontend/packages/git/src/git-routing.module.ts +++ b/src/frontend/packages/git/src/git-routing.module.ts @@ -15,7 +15,7 @@ const customRoutes: Routes = [ @NgModule({ imports: [ - RouterModule.forRoot(customRoutes), + RouterModule.forRoot(customRoutes, { relativeLinkResolution: 'legacy' }), ], }) export class GitRoutingModule { } diff --git a/src/frontend/packages/git/src/shared/components/git-endpoint-details/git-endpoint-details.component.spec.ts b/src/frontend/packages/git/src/shared/components/git-endpoint-details/git-endpoint-details.component.spec.ts index 9903f898e6..6143143071 100644 --- a/src/frontend/packages/git/src/shared/components/git-endpoint-details/git-endpoint-details.component.spec.ts +++ b/src/frontend/packages/git/src/shared/components/git-endpoint-details/git-endpoint-details.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '../../../../../core/src/core/core.module'; import { SharedModule } from '../../../../../core/src/shared/shared.module'; @@ -8,7 +8,7 @@ describe('GitEndpointDetailsComponent', () => { let component: GitEndpointDetailsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [GitEndpointDetailsComponent], imports: [ diff --git a/src/frontend/packages/git/src/shared/components/git-registration/git-registration.component.spec.ts b/src/frontend/packages/git/src/shared/components/git-registration/git-registration.component.spec.ts index d5ab6a319d..74e88393f7 100644 --- a/src/frontend/packages/git/src/shared/components/git-registration/git-registration.component.spec.ts +++ b/src/frontend/packages/git/src/shared/components/git-registration/git-registration.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { SharedModule } from '@stratosui/core'; import { getGitHubAPIURL, gitEntityCatalog, GITHUB_API_URL, GitSCMService } from '@stratosui/git'; @@ -12,7 +12,7 @@ describe('GitRegistrationComponent', () => { let component: GitRegistrationComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ GitRegistrationComponent ], imports: [ diff --git a/src/frontend/packages/git/src/shared/components/git-registration/git-registration.component.ts b/src/frontend/packages/git/src/shared/components/git-registration/git-registration.component.ts index 2ab2d3bab8..256b6be9eb 100644 --- a/src/frontend/packages/git/src/shared/components/git-registration/git-registration.component.ts +++ b/src/frontend/packages/git/src/shared/components/git-registration/git-registration.component.ts @@ -1,5 +1,5 @@ import { Component, OnDestroy } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { CreateEndpointHelperComponent, @@ -61,7 +61,7 @@ export class GitRegistrationComponent extends CreateEndpointHelperComponent impl public epSubType: GIT_ENDPOINT_SUB_TYPES; - registerForm: FormGroup; + registerForm: UntypedFormGroup; private sub: Subscription; @@ -74,7 +74,7 @@ export class GitRegistrationComponent extends CreateEndpointHelperComponent impl constructor( gitSCMService: GitSCMService, activatedRoute: ActivatedRoute, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private snackBarService: SnackBarService, private endpointsService: EndpointsService, public sessionService: SessionService, diff --git a/src/frontend/packages/git/src/shared/components/github-commit-author/github-commit-author.component.spec.ts b/src/frontend/packages/git/src/shared/components/github-commit-author/github-commit-author.component.spec.ts index 2c2475cd03..355b5155f7 100644 --- a/src/frontend/packages/git/src/shared/components/github-commit-author/github-commit-author.component.spec.ts +++ b/src/frontend/packages/git/src/shared/components/github-commit-author/github-commit-author.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { GithubCommitAuthorComponent } from './github-commit-author.component'; @@ -7,7 +7,7 @@ describe('GithubCommitAuthorComponent', () => { let fixture: ComponentFixture; let element: HTMLElement; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [GithubCommitAuthorComponent] }) diff --git a/src/frontend/packages/git/src/shared/components/list/list-types/github-commits/table-cell-commit-author/table-cell-commit-author.component.spec.ts b/src/frontend/packages/git/src/shared/components/list/list-types/github-commits/table-cell-commit-author/table-cell-commit-author.component.spec.ts index 92e0e8de98..6c0ef56af2 100644 --- a/src/frontend/packages/git/src/shared/components/list/list-types/github-commits/table-cell-commit-author/table-cell-commit-author.component.spec.ts +++ b/src/frontend/packages/git/src/shared/components/list/list-types/github-commits/table-cell-commit-author/table-cell-commit-author.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../../../../../core/test-framework/core-test.helper'; import { GithubCommitAuthorComponent } from '../../../../github-commit-author/github-commit-author.component'; @@ -8,7 +8,7 @@ describe('TableCellCommitAuthorComponent', () => { let component: TableCellCommitAuthorComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [TableCellCommitAuthorComponent, GithubCommitAuthorComponent], imports: [...BaseTestModulesNoShared] diff --git a/src/frontend/packages/git/src/shared/git-shared.module.ts b/src/frontend/packages/git/src/shared/git-shared.module.ts index 02ee0e99af..9b26f87cec 100644 --- a/src/frontend/packages/git/src/shared/git-shared.module.ts +++ b/src/frontend/packages/git/src/shared/git-shared.module.ts @@ -12,32 +12,28 @@ import { import { GitSCMService } from './scm/scm.service'; @NgModule({ - imports: [ - CoreModule, - CommonModule, - SharedModule, - MDAppModule, - // Need to import this so that the git register endpoints process can use the generic register and connect steps - // HOWEVER as this module is not lazy loaded it will be brought in on app load - CreateEndpointModule - ], - declarations: [ - TableCellCommitAuthorComponent, - GithubCommitAuthorComponent, - GitRegistrationComponent, - GitEndpointDetailsComponent, - ], - exports: [ - GithubCommitAuthorComponent, - GitRegistrationComponent, - GitEndpointDetailsComponent, - ], - entryComponents: [ - TableCellCommitAuthorComponent, - GitRegistrationComponent - ], - providers: [ - GitSCMService - ] + imports: [ + CoreModule, + CommonModule, + SharedModule, + MDAppModule, + // Need to import this so that the git register endpoints process can use the generic register and connect steps + // HOWEVER as this module is not lazy loaded it will be brought in on app load + CreateEndpointModule + ], + declarations: [ + TableCellCommitAuthorComponent, + GithubCommitAuthorComponent, + GitRegistrationComponent, + GitEndpointDetailsComponent, + ], + exports: [ + GithubCommitAuthorComponent, + GitRegistrationComponent, + GitEndpointDetailsComponent, + ], + providers: [ + GitSCMService + ] }) export class GitSharedModule { } diff --git a/src/frontend/packages/git/src/store/git.effects.ts b/src/frontend/packages/git/src/store/git.effects.ts index 4b0807cb5f..b0d51f3cf3 100644 --- a/src/frontend/packages/git/src/store/git.effects.ts +++ b/src/frontend/packages/git/src/store/git.effects.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, mergeMap } from 'rxjs/operators'; @@ -35,8 +35,8 @@ export class GitEffects { private httpClient: HttpClient ) { } - @Effect() - fetchRep$ = this.actions$.pipe( + + fetchRep$ = createEffect(() => this.actions$.pipe( ofType(FETCH_GITHUB_REPO), mergeMap(action => { const actionType = 'fetch'; @@ -62,10 +62,10 @@ export class GitEffects { new WrapperRequestActionFailed(action.meta.scm.parseErrorAsString(err), action, actionType) ] )); - })); + }))); - @Effect() - fetchBranches$ = this.actions$.pipe( + + fetchBranches$ = createEffect(() => this.actions$.pipe( ofType(FETCH_BRANCHES_FOR_PROJECT), mergeMap(action => { const actionType = 'fetch'; @@ -93,10 +93,10 @@ export class GitEffects { catchError(err => [ new WrapperRequestActionFailed(action.scm.parseErrorAsString(err), action, actionType) ])); - })); + }))); - @Effect() - fetchBranch$ = this.actions$.pipe( + + fetchBranch$ = createEffect(() => this.actions$.pipe( ofType(FETCH_BRANCH_FOR_PROJECT), mergeMap(action => { const actionType = 'fetch'; @@ -121,10 +121,10 @@ export class GitEffects { catchError(err => [ new WrapperRequestActionFailed(action.scm.parseErrorAsString(err), action, actionType) ])); - })); + }))); - @Effect() - fetchCommit$ = this.actions$.pipe( + + fetchCommit$ = createEffect(() => this.actions$.pipe( ofType(FETCH_COMMIT), mergeMap(action => { const actionType = 'fetch'; @@ -148,10 +148,10 @@ export class GitEffects { catchError(err => [ new WrapperRequestActionFailed(action.scm.parseErrorAsString(err), action, actionType) ])); - })); + }))); - @Effect() - fetchCommits$ = this.actions$.pipe( + + fetchCommits$ = createEffect(() => this.actions$.pipe( ofType(FETCH_COMMITS), mergeMap(action => { const actionType = 'fetch'; @@ -178,7 +178,7 @@ export class GitEffects { catchError(err => [ new WrapperRequestActionFailed(action.scm.parseErrorAsString(err), action, actionType) ])); - })); + }))); updateCommit(scmType: string, projectName: string, commit: GitCommit, endpointGuid: string, action: EntityRequestAction): GitCommit { const newCommit = { diff --git a/src/frontend/packages/git/src/test.ts b/src/frontend/packages/git/src/test.ts index f205020844..db08d2e9fd 100644 --- a/src/frontend/packages/git/src/test.ts +++ b/src/frontend/packages/git/src/test.ts @@ -1,7 +1,7 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files import 'core-js/es/reflect'; -import 'zone.js/dist/zone'; -import 'zone.js/dist/zone-testing'; +import 'zone.js'; +import 'zone.js/testing'; import { APP_BASE_HREF } from '@angular/common'; import { getTestBed } from '@angular/core/testing'; @@ -14,7 +14,9 @@ declare const require: any; const testBed = getTestBed(); testBed.initTestEnvironment( BrowserDynamicTestingModule, - platformBrowserDynamicTesting() + platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false } +} ); beforeEach(() => { diff --git a/src/frontend/packages/kubernetes/src/helm/helm-hub-registration/helm-hub-registration.component.spec.ts b/src/frontend/packages/kubernetes/src/helm/helm-hub-registration/helm-hub-registration.component.spec.ts index 69893fc648..3df54f3342 100644 --- a/src/frontend/packages/kubernetes/src/helm/helm-hub-registration/helm-hub-registration.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/helm/helm-hub-registration/helm-hub-registration.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EndpointsService } from '../../../../core/src/core/endpoints.service'; import { UserService } from '../../../../core/src/core/user.service'; @@ -9,7 +9,7 @@ describe('HelmHubRegistrationComponent', () => { let component: HelmHubRegistrationComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [...BaseTestModules], declarations: [HelmHubRegistrationComponent], diff --git a/src/frontend/packages/kubernetes/src/helm/helm.module.ts b/src/frontend/packages/kubernetes/src/helm/helm.module.ts index e2229215bf..fea80dec56 100644 --- a/src/frontend/packages/kubernetes/src/helm/helm.module.ts +++ b/src/frontend/packages/kubernetes/src/helm/helm.module.ts @@ -11,24 +11,20 @@ import { MonocularModule } from './monocular/monocular.module'; import { CatalogTabComponent } from './tabs/catalog-tab/catalog-tab.component'; @NgModule({ - imports: [ - CoreModule, - CommonModule, - SharedModule, - HelmRoutingModule, - MonocularModule - ], - declarations: [ - MonocularTabBaseComponent, - CatalogTabComponent, - MonocularChartCardComponent, - MonocularChartViewComponent, - ], - providers: [ - ], - entryComponents: [ - MonocularChartCardComponent, - ] + imports: [ + CoreModule, + CommonModule, + SharedModule, + HelmRoutingModule, + MonocularModule + ], + declarations: [ + MonocularTabBaseComponent, + CatalogTabComponent, + MonocularChartCardComponent, + MonocularChartViewComponent, + ], + providers: [] }) export class HelmModule { } diff --git a/src/frontend/packages/kubernetes/src/helm/list-types/monocular-chart-card/monocular-chart-card.component.spec.ts b/src/frontend/packages/kubernetes/src/helm/list-types/monocular-chart-card/monocular-chart-card.component.spec.ts index 7075b41929..fc29cec72d 100644 --- a/src/frontend/packages/kubernetes/src/helm/list-types/monocular-chart-card/monocular-chart-card.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/helm/list-types/monocular-chart-card/monocular-chart-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModulesNoShared } from '../../../../../core/test-framework/core-test.helper'; import { ChartItemComponent } from '../../monocular/chart-item/chart-item.component'; @@ -12,7 +12,7 @@ describe('MonocularChartCardComponent', () => { let component: MonocularChartCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ MonocularChartCardComponent, diff --git a/src/frontend/packages/kubernetes/src/helm/monocular-tab-base/monocular-tab-base.component.spec.ts b/src/frontend/packages/kubernetes/src/helm/monocular-tab-base/monocular-tab-base.component.spec.ts index 44d51292b1..6cda935af8 100644 --- a/src/frontend/packages/kubernetes/src/helm/monocular-tab-base/monocular-tab-base.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/helm/monocular-tab-base/monocular-tab-base.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../core/src/tab-nav.service'; import { BaseTestModulesNoShared } from '../../../../core/test-framework/core-test.helper'; @@ -9,7 +9,7 @@ describe('MonocularTabBaseComponent', () => { let component: MonocularTabBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [], imports: [ diff --git a/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-info/chart-details-info.component.spec.ts b/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-info/chart-details-info.component.spec.ts index 74d65fd3c7..637328119e 100644 --- a/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-info/chart-details-info.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-info/chart-details-info.component.spec.ts @@ -1,5 +1,5 @@ import { NO_ERRORS_SCHEMA } from '@angular/core'; -import { async, TestBed } from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { MockChartService } from '../../shared/services/chart.service.mock'; import { ChartsService } from '../../shared/services/charts.service'; @@ -8,7 +8,7 @@ import { ChartDetailsInfoComponent } from './chart-details-info.component'; describe('Component: ChartDetailsInfo', () => { beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ChartDetailsInfoComponent], imports: [], diff --git a/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-readme/chart-details-readme.component.ts b/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-readme/chart-details-readme.component.ts index 171a260696..e88776f5ed 100644 --- a/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-readme/chart-details-readme.component.ts +++ b/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-readme/chart-details-readme.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import markdown from 'marked'; +import { marked } from 'marked'; import { Observable, of as observableOf } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; @@ -21,7 +21,7 @@ export class ChartDetailsReadmeComponent { public loading = false; public readmeContent$: Observable; - private renderer = new markdown.Renderer(); + private renderer = new marked.Renderer(); private loadingDelay: any; constructor(private chartsService: ChartsService) { @@ -36,7 +36,7 @@ export class ChartDetailsReadmeComponent { map(resp => { clearTimeout(this.loadingDelay); this.loading = false; - return markdown(resp, { + return marked(resp, { renderer: this.renderer }); }), diff --git a/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-versions/chart-details-versions.component.spec.ts b/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-versions/chart-details-versions.component.spec.ts index 0158577a09..507362200f 100644 --- a/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-versions/chart-details-versions.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details-versions/chart-details-versions.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { PanelComponent } from '../../panel/panel.component'; @@ -10,7 +10,7 @@ describe('ChartDetailsVersionsComponent', () => { let component: ChartDetailsVersionsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ChartDetailsVersionsComponent, PanelComponent], imports: [RouterTestingModule], diff --git a/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details.component.spec.ts b/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details.component.spec.ts index 4e1be686cd..81da480b48 100644 --- a/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/helm/monocular/chart-details/chart-details.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpClientModule } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BrowserModule } from '@angular/platform-browser'; import { RouterTestingModule } from '@angular/router/testing'; @@ -27,7 +27,7 @@ describe('ChartDetailsComponent', () => { let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ imports: [ BrowserModule, diff --git a/src/frontend/packages/kubernetes/src/helm/monocular/loader/loader.component.spec.ts b/src/frontend/packages/kubernetes/src/helm/monocular/loader/loader.component.spec.ts index 61bd1aa4ce..370e3da901 100644 --- a/src/frontend/packages/kubernetes/src/helm/monocular/loader/loader.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/helm/monocular/loader/loader.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { CoreModule } from '@stratosui/core'; import { LoaderComponent } from './loader.component'; @@ -8,7 +8,7 @@ describe('LoaderComponent', () => { let fixture: ComponentFixture; beforeEach( - async(() => { + waitForAsync(() => { TestBed.configureTestingModule({ imports: [CoreModule], declarations: [LoaderComponent] diff --git a/src/frontend/packages/kubernetes/src/helm/store/helm.effects.ts b/src/frontend/packages/kubernetes/src/helm/store/helm.effects.ts index a8723b347f..5f4e47a61b 100644 --- a/src/frontend/packages/kubernetes/src/helm/store/helm.effects.ts +++ b/src/frontend/packages/kubernetes/src/helm/store/helm.effects.ts @@ -1,7 +1,7 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Action, Store } from '@ngrx/store'; import { combineLatest, Observable, of } from 'rxjs'; import { catchError, first, flatMap, map, mergeMap, withLatestFrom } from 'rxjs/operators'; @@ -116,8 +116,8 @@ export class HelmEffects { proxyAPIVersion = environment.proxyAPIVersion; // Ensure that we refresh the charts when a repository finishes synchronizing - @Effect() - updateOnSyncFinished$ = this.actions$.pipe( + + updateOnSyncFinished$ = createEffect(() => this.actions$.pipe( ofType(GET_ENDPOINTS_SUCCESS), flatMap(action => { // Look to see if we have any endpoints that are synchronizing @@ -140,10 +140,10 @@ export class HelmEffects { } return []; }) - ); + )); - @Effect() - fetchCharts$ = this.actions$.pipe( + + fetchCharts$ = createEffect(() => this.actions$.pipe( ofType(GET_MONOCULAR_CHARTS), withLatestFrom(this.store), flatMap(([action, appState]) => { @@ -180,10 +180,10 @@ export class HelmEffects { }) ); }) - ); + )); - @Effect() - fetchVersions$ = this.actions$.pipe( + + fetchVersions$ = createEffect(() => this.actions$.pipe( ofType(GET_HELM_VERSIONS), flatMap(action => { const entityKey = entityCatalog.getEntityKey(action); @@ -210,10 +210,10 @@ export class HelmEffects { return processedData; }, []); }) - ); + )); - @Effect() - fetchChartVersions$ = this.actions$.pipe( + + fetchChartVersions$ = createEffect(() => this.actions$.pipe( ofType(GET_MONOCULAR_CHART_VERSIONS), flatMap(action => { const entityKey = entityCatalog.getEntityKey(action); @@ -240,10 +240,10 @@ export class HelmEffects { '' }); }) - ); + )); - @Effect() - helmInstall$ = this.actions$.pipe( + + helmInstall$ = createEffect(() => this.actions$.pipe( ofType(HELM_INSTALL), flatMap(action => { const requestType: ApiRequestTypes = 'create'; @@ -271,10 +271,10 @@ export class HelmEffects { }) ); }) - ); + )); - @Effect() - helmSynchronise$ = this.actions$.pipe( + + helmSynchronise$ = createEffect(() => this.actions$.pipe( ofType(HELM_SYNCHRONISE), flatMap(action => { const requestArgs = { @@ -291,10 +291,10 @@ export class HelmEffects { }); return []; }) - ); + )); - @Effect() - endpointUnregister$ = this.actions$.pipe( + + endpointUnregister$ = createEffect(() => this.actions$.pipe( ofType(UNREGISTER_ENDPOINTS_SUCCESS), flatMap(action => stratosEntityCatalog.endpoint.store.getEntityMonitor(action.guid).entity$.pipe( first(), @@ -309,10 +309,10 @@ export class HelmEffects { ]; }) )) - ); + )); - @Effect() - registerEndpoint$ = this.actions$.pipe( + + registerEndpoint$ = createEffect(() => this.actions$.pipe( ofType(REGISTER_ENDPOINTS_SUCCESS), flatMap(action => { const endpoint: EndpointModel = action.endpoint as EndpointModel; @@ -323,7 +323,7 @@ export class HelmEffects { } return []; }) - ); + )); private static createHelmErrorMessage(err: any): string { if (err) { diff --git a/src/frontend/packages/kubernetes/src/helm/tabs/catalog-tab/catalog-tab.component.spec.ts b/src/frontend/packages/kubernetes/src/helm/tabs/catalog-tab/catalog-tab.component.spec.ts index 37cef3dee7..49b101cc78 100644 --- a/src/frontend/packages/kubernetes/src/helm/tabs/catalog-tab/catalog-tab.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/helm/tabs/catalog-tab/catalog-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { HelmBaseTestModules } from '../../helm-testing.module'; @@ -10,7 +10,7 @@ describe('CatalogTabComponent', () => { let component: CatalogTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...HelmBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/helm/theme.scss b/src/frontend/packages/kubernetes/src/helm/theme.scss index 68f87746aa..9fe1d256b2 100644 --- a/src/frontend/packages/kubernetes/src/helm/theme.scss +++ b/src/frontend/packages/kubernetes/src/helm/theme.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/_theming'; +@import '@angular/material/_theming'; // Plus imports for other components in your app. // Include the base styles for Angular Material core. We include this here so that you only diff --git a/src/frontend/packages/kubernetes/src/kube-package-routing.module.ts b/src/frontend/packages/kubernetes/src/kube-package-routing.module.ts index ed3d3e80e7..ae68631ae7 100644 --- a/src/frontend/packages/kubernetes/src/kube-package-routing.module.ts +++ b/src/frontend/packages/kubernetes/src/kube-package-routing.module.ts @@ -50,7 +50,7 @@ const customRoutes: Routes = [ @NgModule({ imports: [ - RouterModule.forRoot(customRoutes), + RouterModule.forRoot(customRoutes, { relativeLinkResolution: 'legacy' }), ], declarations: [] }) diff --git a/src/frontend/packages/kubernetes/src/kube-package.module.ts b/src/frontend/packages/kubernetes/src/kube-package.module.ts index 286802cf3a..3d5df3d508 100644 --- a/src/frontend/packages/kubernetes/src/kube-package.module.ts +++ b/src/frontend/packages/kubernetes/src/kube-package.module.ts @@ -6,17 +6,14 @@ import { KubernetesSetupModule } from './kubernetes/kubernetes.setup.module'; @NgModule({ - imports: [ - CoreModule, - SharedModule, - MDAppModule, - KubernetesSetupModule, - HelmSetupModule, - ], - // FIXME: Ensure that anything lazy loaded/in kube endpoint pages is not included here - #3675 - declarations: [ - ], - entryComponents: [ - ] + imports: [ + CoreModule, + SharedModule, + MDAppModule, + KubernetesSetupModule, + HelmSetupModule, + ], + // FIXME: Ensure that anything lazy loaded/in kube endpoint pages is not included here - #3675 + declarations: [] }) export class KubePackageModule { } diff --git a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-runner/analysis-report-runner.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-runner/analysis-report-runner.component.spec.ts index 60794e0912..4fbc08b9e6 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-runner/analysis-report-runner.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-runner/analysis-report-runner.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { SharedModule } from '../../../../../core/src/public-api'; import { SidePanelService } from '../../../../../core/src/shared/services/side-panel.service'; @@ -11,7 +11,7 @@ describe('AnalysisReportRunnerComponent', () => { let component: AnalysisReportRunnerComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AnalysisReportRunnerComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-selector/analysis-report-selector.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-selector/analysis-report-selector.component.spec.ts index 7740777a66..63b0beb261 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-selector/analysis-report-selector.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-selector/analysis-report-selector.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../../../core/src/public-api'; import { KubeBaseGuidMock, KubernetesBaseTestModules } from '../../kubernetes.testing.module'; @@ -10,7 +10,7 @@ describe('AnalysisReportSelectorComponent', () => { let component: AnalysisReportSelectorComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AnalysisReportSelectorComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-viewer.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-viewer.component.spec.ts index 6b49e51116..82d4c13ae4 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-viewer.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/analysis-report-viewer.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../kubernetes.testing.module'; import { KubernetesAnalysisService } from '../services/kubernetes.analysis.service'; @@ -8,7 +8,7 @@ describe('AnalysisReportViewerComponent', () => { let component: AnalysisReportViewerComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AnalysisReportViewerComponent ], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/kube-score-report-viewer/kube-score-report-viewer.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/kube-score-report-viewer/kube-score-report-viewer.component.spec.ts index 6ad49bf3aa..3bdca8689b 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/kube-score-report-viewer/kube-score-report-viewer.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/kube-score-report-viewer/kube-score-report-viewer.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../../../core/src/public-api'; import { KubeBaseGuidMock, KubernetesBaseTestModules } from '../../kubernetes.testing.module'; @@ -10,7 +10,7 @@ describe('KubeScoreReportViewerComponent', () => { let component: KubeScoreReportViewerComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubeScoreReportViewerComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/popeye-report-viewer/popeye-report-viewer.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/popeye-report-viewer/popeye-report-viewer.component.spec.ts index eb03a6aa2f..c2def617d4 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/popeye-report-viewer/popeye-report-viewer.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/popeye-report-viewer/popeye-report-viewer.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../../../core/src/public-api'; import { KubeBaseGuidMock, KubernetesBaseTestModules } from '../../kubernetes.testing.module'; @@ -10,7 +10,7 @@ describe('PopeyeReportViewerComponent', () => { let component: PopeyeReportViewerComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [PopeyeReportViewerComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/resource-alert-preview/resource-alert-preview.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/resource-alert-preview/resource-alert-preview.component.spec.ts index f78f26e839..afc19572f1 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/resource-alert-preview/resource-alert-preview.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/resource-alert-preview/resource-alert-preview.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ResourceAlertPreviewComponent } from './resource-alert-preview.component'; import { ResourceAlertViewComponent } from './resource-alert-view/resource-alert-view.component'; @@ -9,7 +9,7 @@ describe('ResourceAlertPreviewComponent', () => { let component: ResourceAlertPreviewComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ ResourceAlertPreviewComponent, ResourceAlertViewComponent ], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/resource-alert-preview/resource-alert-view/resource-alert-view.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/resource-alert-preview/resource-alert-view/resource-alert-view.component.spec.ts index b80151d9b3..6e2355d31d 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/resource-alert-preview/resource-alert-view/resource-alert-view.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/analysis-report-viewer/resource-alert-preview/resource-alert-view/resource-alert-view.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../../../../core/src/public-api'; import { KubeBaseGuidMock, KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; @@ -10,7 +10,7 @@ describe('ResourceAlertViewComponent', () => { let component: ResourceAlertViewComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ResourceAlertViewComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-aws-auth-form/kubernetes-aws-auth-form.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-aws-auth-form/kubernetes-aws-auth-form.component.spec.ts index 66400910ac..1bf5138539 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-aws-auth-form/kubernetes-aws-auth-form.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-aws-auth-form/kubernetes-aws-auth-form.component.spec.ts @@ -1,5 +1,5 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormBuilder } from '@angular/forms'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { UntypedFormBuilder } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { MDAppModule, SharedModule } from '../../../../../core/src/public-api'; @@ -9,7 +9,7 @@ describe('KubernetesAWSAuthFormComponent', () => { let component: KubernetesAWSAuthFormComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesAWSAuthFormComponent], imports: [ @@ -24,7 +24,7 @@ describe('KubernetesAWSAuthFormComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(KubernetesAWSAuthFormComponent); component = fixture.componentInstance; - const fb = new FormBuilder(); + const fb = new UntypedFormBuilder(); const form = fb.group({ authValues: fb.group({ cluster: '', diff --git a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-aws-auth-form/kubernetes-aws-auth-form.component.ts b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-aws-auth-form/kubernetes-aws-auth-form.component.ts index c6eb43cb85..8000369377 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-aws-auth-form/kubernetes-aws-auth-form.component.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-aws-auth-form/kubernetes-aws-auth-form.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { IAuthForm } from '../../../../../store/src/extension-types'; @@ -12,5 +12,5 @@ import { IAuthForm } from '../../../../../store/src/extension-types'; }) export class KubernetesAWSAuthFormComponent implements IAuthForm { showPassword = false; - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; } diff --git a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-certs-auth-form/kubernetes-certs-auth-form.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-certs-auth-form/kubernetes-certs-auth-form.component.spec.ts index 860cbec1e8..03cb237721 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-certs-auth-form/kubernetes-certs-auth-form.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-certs-auth-form/kubernetes-certs-auth-form.component.spec.ts @@ -1,5 +1,5 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormBuilder } from '@angular/forms'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { UntypedFormBuilder } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { CoreModule } from 'frontend/packages/core/src/core/core.module'; @@ -10,7 +10,7 @@ describe('KubernetesCertsAuthFormComponent', () => { let component: KubernetesCertsAuthFormComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesCertsAuthFormComponent], imports: [ @@ -25,7 +25,7 @@ describe('KubernetesCertsAuthFormComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(KubernetesCertsAuthFormComponent); component = fixture.componentInstance; - const fb = new FormBuilder(); + const fb = new UntypedFormBuilder(); const form = fb.group({ authValues: fb.group({ cert: '', diff --git a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-certs-auth-form/kubernetes-certs-auth-form.component.ts b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-certs-auth-form/kubernetes-certs-auth-form.component.ts index 7fae0d007d..a6402cde24 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-certs-auth-form/kubernetes-certs-auth-form.component.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-certs-auth-form/kubernetes-certs-auth-form.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { EndpointAuthValues, IEndpointAuthComponent } from '../../../../../store/src/extension-types'; @@ -10,7 +10,7 @@ import { EndpointAuthValues, IEndpointAuthComponent } from '../../../../../store styleUrls: ['./kubernetes-certs-auth-form.component.scss'] }) export class KubernetesCertsAuthFormComponent implements IEndpointAuthComponent { - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; public getValues(values: EndpointAuthValues): EndpointAuthValues { diff --git a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-config-auth-form/kubernetes-config-auth-form.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-config-auth-form/kubernetes-config-auth-form.component.spec.ts index dba933224c..f571d2ed3a 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-config-auth-form/kubernetes-config-auth-form.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-config-auth-form/kubernetes-config-auth-form.component.spec.ts @@ -1,5 +1,5 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormBuilder } from '@angular/forms'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { UntypedFormBuilder } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { SharedModule } from './../../../../../core/src/shared/shared.module'; @@ -9,7 +9,7 @@ describe('KubernetesConfigAuthFormComponent', () => { let component: KubernetesConfigAuthFormComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesConfigAuthFormComponent], imports: [ @@ -23,7 +23,7 @@ describe('KubernetesConfigAuthFormComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(KubernetesConfigAuthFormComponent); component = fixture.componentInstance; - const fb = new FormBuilder(); + const fb = new UntypedFormBuilder(); const form = fb.group({ authValues: fb.group({ kubeconfig: '' diff --git a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-config-auth-form/kubernetes-config-auth-form.component.ts b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-config-auth-form/kubernetes-config-auth-form.component.ts index dc7491f0e8..bb1b9adb47 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-config-auth-form/kubernetes-config-auth-form.component.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-config-auth-form/kubernetes-config-auth-form.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { EndpointAuthValues, IEndpointAuthComponent } from '../../../../../store/src/extension-types'; @@ -11,7 +11,7 @@ import { EndpointAuthValues, IEndpointAuthComponent } from '../../../../../store styleUrls: ['./kubernetes-config-auth-form.component.scss'] }) export class KubernetesConfigAuthFormComponent implements IEndpointAuthComponent { - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; public getValues(values: EndpointAuthValues): EndpointAuthValues { return {}; diff --git a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-gke-auth-form/kubernetes-gke-auth-form.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-gke-auth-form/kubernetes-gke-auth-form.component.spec.ts index 24fe572feb..b933b9ff99 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-gke-auth-form/kubernetes-gke-auth-form.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-gke-auth-form/kubernetes-gke-auth-form.component.spec.ts @@ -1,5 +1,5 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormBuilder } from '@angular/forms'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { UntypedFormBuilder } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { SharedModule } from './../../../../../core/src/shared/shared.module'; @@ -9,7 +9,7 @@ describe('KubernetesGKEAuthFormComponent', () => { let component: KubernetesGKEAuthFormComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesGKEAuthFormComponent], imports: [ @@ -23,7 +23,7 @@ describe('KubernetesGKEAuthFormComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(KubernetesGKEAuthFormComponent); component = fixture.componentInstance; - const fb = new FormBuilder(); + const fb = new UntypedFormBuilder(); const form = fb.group({ authValues: fb.group({ gkeconfig: '' diff --git a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-gke-auth-form/kubernetes-gke-auth-form.component.ts b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-gke-auth-form/kubernetes-gke-auth-form.component.ts index c810b406a1..9c6631d80e 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-gke-auth-form/kubernetes-gke-auth-form.component.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-gke-auth-form/kubernetes-gke-auth-form.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { EndpointAuthValues, IEndpointAuthComponent } from '../../../../../store/src/extension-types'; @@ -11,7 +11,7 @@ import { EndpointAuthValues, IEndpointAuthComponent } from '../../../../../store styleUrls: ['./kubernetes-gke-auth-form.component.scss'] }) export class KubernetesGKEAuthFormComponent implements IEndpointAuthComponent { - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; public getValues(values: EndpointAuthValues): EndpointAuthValues { return {}; diff --git a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-serviceaccount-auth-form/kubernetes-serviceaccount-auth-form.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-serviceaccount-auth-form/kubernetes-serviceaccount-auth-form.component.spec.ts index 61bacdec92..e08d04bcdb 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-serviceaccount-auth-form/kubernetes-serviceaccount-auth-form.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-serviceaccount-auth-form/kubernetes-serviceaccount-auth-form.component.spec.ts @@ -1,5 +1,5 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { FormBuilder } from '@angular/forms'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { UntypedFormBuilder } from '@angular/forms'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { MDAppModule, SharedModule } from '../../../../../core/src/public-api'; @@ -9,7 +9,7 @@ describe('KubernetesSATokenAuthFormComponent', () => { let component: KubernetesSATokenAuthFormComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesSATokenAuthFormComponent], imports: [ @@ -24,7 +24,7 @@ describe('KubernetesSATokenAuthFormComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(KubernetesSATokenAuthFormComponent); component = fixture.componentInstance; - const fb = new FormBuilder(); + const fb = new UntypedFormBuilder(); const form = fb.group({ authValues: fb.group({ token: '', diff --git a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-serviceaccount-auth-form/kubernetes-serviceaccount-auth-form.component.ts b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-serviceaccount-auth-form/kubernetes-serviceaccount-auth-form.component.ts index d48ceb1aff..6d1d11a3a8 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-serviceaccount-auth-form/kubernetes-serviceaccount-auth-form.component.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/auth-forms/kubernetes-serviceaccount-auth-form/kubernetes-serviceaccount-auth-form.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { IAuthForm } from '../../../../../store/src/extension-types'; @@ -9,5 +9,5 @@ import { IAuthForm } from '../../../../../store/src/extension-types'; styleUrls: ['./kubernetes-serviceaccount-auth-form.component.scss'] }) export class KubernetesSATokenAuthFormComponent implements IAuthForm { - @Input() formGroup: FormGroup; + @Input() formGroup: UntypedFormGroup; } diff --git a/src/frontend/packages/kubernetes/src/kubernetes/home/kubernetes-home-card.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/home/kubernetes-home-card.component.spec.ts index 392a169015..74cfc5daa7 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/home/kubernetes-home-card.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/home/kubernetes-home-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { EndpointModel } from '../../../../store/src/types/endpoint.types'; import { BaseKubeGuid } from '../kubernetes-page.types'; @@ -10,7 +10,7 @@ describe('KubernetesHomeCardComponent', () => { let component: KubernetesHomeCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ KubernetesHomeCardComponent ], imports: [...KubernetesBaseTestModules], diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-auth.helper.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-auth.helper.ts index e6caba2fd0..046407a332 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-auth.helper.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-auth.helper.ts @@ -1,5 +1,5 @@ import { ComponentFactoryResolver, Injector } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { ConnectEndpointData } from '../../../../core/src/features/endpoints/connect.service'; import { RowState } from '../../../../core/src/shared/components/list/data-sources-controllers/list-data-source-types'; @@ -132,7 +132,7 @@ export class KubeConfigAuthHelper { } // Use the auto component to get the data in the correct format for connecting to the endpoint - public getAuthDataForConnect(resolver: ComponentFactoryResolver, injector: Injector, fb: FormBuilder, user: KubeConfigFileUser) + public getAuthDataForConnect(resolver: ComponentFactoryResolver, injector: Injector, fb: UntypedFormBuilder, user: KubeConfigFileUser) : ConnectEndpointData | null { let data = null; diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-import.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-import.component.spec.ts index a006e2debc..7d4a53232b 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-import.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-import.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../kubernetes.testing.module'; import { KubeConfigImportComponent } from './kube-config-import.component'; @@ -7,7 +7,7 @@ describe('KubeConfigImportComponent', () => { let component: KubeConfigImportComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-import.component.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-import.component.ts index a8d27482c5..6da1cdb37d 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-import.component.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-import.component.ts @@ -1,5 +1,5 @@ import { Component, ComponentFactoryResolver, Injector, OnDestroy } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { UntypedFormBuilder } from '@angular/forms'; import { Store } from '@ngrx/store'; import { BehaviorSubject, Observable, of as observableOf, Subscription } from 'rxjs'; import { distinctUntilChanged, filter, first, map, pairwise, startWith, withLatestFrom } from 'rxjs/operators'; @@ -91,7 +91,7 @@ export class KubeConfigImportComponent implements OnDestroy { public store: Store, public resolver: ComponentFactoryResolver, private injector: Injector, - private fb: FormBuilder, + private fb: UntypedFormBuilder, private endpointsService: EndpointsService, ) { } diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-table-import-status/kube-config-table-import-status.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-table-import-status/kube-config-table-import-status.component.spec.ts index 6d2263d935..e7f282d5ba 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-table-import-status/kube-config-table-import-status.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-import/kube-config-table-import-status/kube-config-table-import-status.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { KubeConfigTableImportStatusComponent } from './kube-config-table-import-status.component'; @@ -7,7 +7,7 @@ describe('KubeConfigTableImportStatusComponent', () => { let component: KubeConfigTableImportStatusComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-registration.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-registration.component.spec.ts index bfcf2b0024..2766ace014 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-registration.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-registration.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../kubernetes.testing.module'; import { KubeConfigImportComponent } from './kube-config-import/kube-config-import.component'; @@ -9,7 +9,7 @@ describe('KubeConfigRegistrationComponent', () => { let component: KubeConfigRegistrationComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-selection.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-selection.component.spec.ts index cc646004a4..a106396751 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-selection.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-selection.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../kubernetes.testing.module'; import { KubeConfigSelectionComponent } from './kube-config-selection.component'; @@ -7,7 +7,7 @@ describe('KubeConfigSelectionComponent', () => { let component: KubeConfigSelectionComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-cert/kube-config-table-cert.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-cert/kube-config-table-cert.component.spec.ts index 0b1bdaf8b8..16bfdd263e 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-cert/kube-config-table-cert.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-cert/kube-config-table-cert.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { KubeConfigHelper } from '../../kube-config.helper'; @@ -8,7 +8,7 @@ describe('KubeConfigTableCertComponent', () => { let component: KubeConfigTableCertComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-name/kube-config-table-name.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-name/kube-config-table-name.component.spec.ts index 4f08f762fd..17ae386308 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-name/kube-config-table-name.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-name/kube-config-table-name.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { IListDataSource, @@ -11,7 +11,7 @@ describe('KubeConfigTableName', () => { let component: KubeConfigTableNameComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-select/kube-config-table-select.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-select/kube-config-table-select.component.spec.ts index 3bf72f8139..b569a4b2b1 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-select/kube-config-table-select.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-select/kube-config-table-select.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { KubeConfigHelper } from '../../kube-config.helper'; @@ -9,7 +9,7 @@ describe('KubeConfigTableSelectComponent', () => { let component: KubeConfigTableSelectComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-sub-type-select/kube-config-table-sub-type-select.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-sub-type-select/kube-config-table-sub-type-select.component.spec.ts index c2ce574749..0d3af0d54d 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-sub-type-select/kube-config-table-sub-type-select.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-sub-type-select/kube-config-table-sub-type-select.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { KubeConfigHelper } from '../../kube-config.helper'; @@ -9,7 +9,7 @@ describe('KubeConfigTableSubTypeSelectComponent', () => { let component: KubeConfigTableSubTypeSelectComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-user-select/kube-config-table-user-select.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-user-select/kube-config-table-user-select.component.spec.ts index 3ada12009f..a817a8c9bd 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-user-select/kube-config-table-user-select.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-config-registration/kube-config-selection/kube-config-table-user-select/kube-config-table-user-select.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { KubeConfigHelper } from '../../kube-config.helper'; @@ -9,7 +9,7 @@ describe('KubeConfigTableUserSelectComponent', () => { let component: KubeConfigTableUserSelectComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kube-terminal/kube-console.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kube-terminal/kube-console.component.spec.ts index a4dd9b2411..7ef8419388 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kube-terminal/kube-console.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kube-terminal/kube-console.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; @@ -13,7 +13,7 @@ describe('KubeConsoleComponent', () => { let component: KubeConsoleComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubeConsoleComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-dashboard/kubedash-configuration/kubedash-configuration.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-dashboard/kubedash-configuration/kubedash-configuration.component.spec.ts index caff198d41..04fa5c97b2 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-dashboard/kubedash-configuration/kubedash-configuration.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-dashboard/kubedash-configuration/kubedash-configuration.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpHandler } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -10,7 +10,7 @@ describe('KubedashConfigurationComponent', () => { let component: KubedashConfigurationComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [...KubernetesBaseTestModules], declarations: [KubedashConfigurationComponent], diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-dashboard/kubernetes-dashboard.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-dashboard/kubernetes-dashboard.component.spec.ts index 25fc305d97..be633093df 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-dashboard/kubernetes-dashboard.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-dashboard/kubernetes-dashboard.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { TabNavService } from '../../../../core/src/tab-nav.service'; @@ -9,7 +9,7 @@ describe('KubernetesDashboardTabComponent', () => { let component: KubernetesDashboardTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesDashboardTabComponent], imports: [...KubernetesBaseTestModules], diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-namespace/kubernetes-namespace-analysis-report/kubernetes-namespace-analysis-report.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-namespace/kubernetes-namespace-analysis-report/kubernetes-namespace-analysis-report.component.spec.ts index 2e150486ae..af689f2e89 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-namespace/kubernetes-namespace-analysis-report/kubernetes-namespace-analysis-report.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-namespace/kubernetes-namespace-analysis-report/kubernetes-namespace-analysis-report.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../../../core/src/public-api'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -16,7 +16,7 @@ describe('KubernetesNamespaceAnalysisReportComponent', () => { let component: KubernetesNamespaceAnalysisReportComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNamespaceAnalysisReportComponent, AnalysisReportSelectorComponent, AnalysisReportViewerComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metric-stats-card/kubernetes-node-metric-stats-card.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metric-stats-card/kubernetes-node-metric-stats-card.component.spec.ts index f9ab58d0a9..a1ce561abf 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metric-stats-card/kubernetes-node-metric-stats-card.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metric-stats-card/kubernetes-node-metric-stats-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesNodeMetricStatsCardComponent } from './kubernetes-node-metric-stats-card.component'; import { KubernetesNodeSimpleMetricComponent } from '../kubernetes-node-simple-metric/kubernetes-node-simple-metric.component'; @@ -11,7 +11,7 @@ describe('KubernetesNodeMetricStatsCardComponent', () => { let component: KubernetesNodeMetricStatsCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeMetricStatsCardComponent, KubernetesNodeSimpleMetricComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metrics-chart/kubernetes-node-metrics-chart.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metrics-chart/kubernetes-node-metrics-chart.component.spec.ts index ab800afd4d..746d123525 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metrics-chart/kubernetes-node-metrics-chart.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metrics-chart/kubernetes-node-metrics-chart.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesNodeMetricsChartComponent } from './kubernetes-node-metrics-chart.component'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; @@ -7,7 +7,7 @@ describe('KubernetesNodeMetricsChartComponent', () => { let component: KubernetesNodeMetricsChartComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeMetricsChartComponent], imports: KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metrics.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metrics.component.spec.ts index 8cf61f7366..50a731b9dc 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metrics.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-metrics.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseKubeGuid } from '../../kubernetes-page.types'; import { KubernetesBaseTestModules } from '../../kubernetes.testing.module'; @@ -16,7 +16,7 @@ describe('KubernetesNodeMetricsComponent', () => { let component: KubernetesNodeMetricsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ KubernetesNodeMetricsComponent, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-simple-metric/kubernetes-node-simple-metric.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-simple-metric/kubernetes-node-simple-metric.component.spec.ts index 86c56f3d38..cb865a1ecd 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-simple-metric/kubernetes-node-simple-metric.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-metrics/kubernetes-node-simple-metric/kubernetes-node-simple-metric.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesNodeSimpleMetricComponent } from './kubernetes-node-simple-metric.component'; @@ -6,7 +6,7 @@ describe('KubernetesNodeSimpleMetricComponent', () => { let component: KubernetesNodeSimpleMetricComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ KubernetesNodeSimpleMetricComponent ] }) diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-pods/kubernetes-node-pods.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-pods/kubernetes-node-pods.component.spec.ts index 15b1a83cb8..0701b39cdb 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-pods/kubernetes-node-pods.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node-pods/kubernetes-node-pods.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesNodePodsComponent } from './kubernetes-node-pods.component'; import { BaseKubeGuid } from '../../kubernetes-page.types'; @@ -10,7 +10,7 @@ describe('KubernetesNodePodsComponent', () => { let component: KubernetesNodePodsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodePodsComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node.component.spec.ts index b0530a0935..ee69b51b1c 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-node/kubernetes-node.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { TabNavService } from '../../../../core/src/tab-nav.service'; @@ -9,7 +9,7 @@ describe('KubernetesNodeComponent', () => { let component: KubernetesNodeComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-resource-viewer/kubernetes-resource-viewer.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-resource-viewer/kubernetes-resource-viewer.component.spec.ts index c7d6ae77a4..77dc0f92e6 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-resource-viewer/kubernetes-resource-viewer.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-resource-viewer/kubernetes-resource-viewer.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { SidePanelService } from '../../../../core/src/shared/services/side-panel.service'; @@ -13,7 +13,7 @@ describe('KubernetesResourceViewerComponent', () => { let component: KubernetesResourceViewerComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesResourceViewerComponent, KubernetesResourceViewerComponent, ResourceAlertViewComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-resource/kubernetes-resource-list/kubernetes-resource-list.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-resource/kubernetes-resource-list/kubernetes-resource-list.component.spec.ts index e1538f6d1f..9439b6bf49 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-resource/kubernetes-resource-list/kubernetes-resource-list.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-resource/kubernetes-resource-list/kubernetes-resource-list.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -9,7 +9,7 @@ describe('KubernetesResourceListComponent', () => { let component: KubernetesResourceListComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ KubernetesResourceListComponent ], imports: [ KubernetesBaseTestModules ], diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-tab-base/kubernetes-tab-base.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-tab-base/kubernetes-tab-base.component.spec.ts index 27e21b1be5..cbd6cf8483 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-tab-base/kubernetes-tab-base.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes-tab-base/kubernetes-tab-base.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { TabNavService } from '../../../../core/src/tab-nav.service'; @@ -9,7 +9,7 @@ describe('KubernetesTabBaseComponent', () => { let component: KubernetesTabBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesTabBaseComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes.module.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes.module.ts index f56326ae4c..d6eaf05a4f 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes.module.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes.module.ts @@ -127,109 +127,86 @@ import { KubernetesSummaryTabComponent } from './tabs/kubernetes-summary-tab/kub /* tslint:enable */ @NgModule({ - imports: [ - CoreModule, - CommonModule, - SharedModule, - NgxChartsModule, - KubernetesRoutingModule, - ], - declarations: [ - KubernetesComponent, - KubernetesNodesTabComponent, - KubernetesTabBaseComponent, - KubernetesNodeCapacityComponent, - KubernetesPodTagsComponent, - KubernetesNamespacesTabComponent, - KubernetesDashboardTabComponent, - KubernetesSummaryTabComponent, - KubernetesAnalysisTabComponent, - PodMetricsComponent, - KubernetesNodeLinkComponent, - KubernetesNodeIpsComponent, - KubernetesNodeLabelsComponent, - KubernetesNodePressureComponent, - KubernetesLabelsCellComponent, - KubernetesNodeComponent, - KubernetesNodeSummaryComponent, - KubernetesNodePodsComponent, - KubernetesNodeSummaryCardComponent, - KubernetesNodeConditionCardComponent, - KubernetesNodeTagsCardComponent, - KubernetesNodePodsComponent, - KubernetesNodeInfoCardComponent, - KubernetesNodeMetricsComponent, - KubernetesNodeConditionComponent, - KubernetesNodeMetricsChartComponent, - KubernetesNodeMetricStatsCardComponent, - KubernetesNodeSimpleMetricComponent, - ConditionCellComponent, - KubernetesNamespaceLinkComponent, - KubeNamespacePodCountComponent, - NodePodCountComponent, - KubernetesServicePortsComponent, - KubernetesPodStatusComponent, - KubeConsoleComponent, - KubeServiceCardComponent, - KubernetesResourceViewerComponent, - KubeServiceCardComponent, - KubedashConfigurationComponent, - KubernetesPodContainersComponent, - KubernetesAnalysisReportComponent, - KubernetesAnalysisInfoComponent, - AnalysisInfoCardComponent, - AnalysisReportViewerComponent, - PopeyeReportViewerComponent, - AnalysisReportSelectorComponent, - AnalysisReportRunnerComponent, - ResourceAlertPreviewComponent, - ResourceAlertViewComponent, - KubeScoreReportViewerComponent, - AnalysisStatusCellComponent, - KubernetesNamespaceAnalysisReportComponent, - KubernetesNamespacePreviewComponent, - ], - providers: [ - KubernetesService, - BaseKubeGuid, - KubernetesEndpointService, - KubernetesNodeService - ], - entryComponents: [ - KubernetesNodeCapacityComponent, - KubernetesPodTagsComponent, - KubernetesNodeLinkComponent, - KubernetesNodeIpsComponent, - KubernetesNodeLabelsComponent, - KubernetesNodePressureComponent, - KubernetesLabelsCellComponent, - ConditionCellComponent, - KubernetesNamespaceLinkComponent, - KubeNamespacePodCountComponent, - NodePodCountComponent, - KubernetesServicePortsComponent, - KubernetesPodStatusComponent, - KubeServiceCardComponent, - KubernetesResourceViewerComponent, - KubernetesPodContainersComponent, - PopeyeReportViewerComponent, - KubeScoreReportViewerComponent, - AnalysisReportSelectorComponent, - ResourceAlertPreviewComponent, - AnalysisStatusCellComponent, - ], - exports: [ - KubernetesResourceViewerComponent, - AnalysisReportViewerComponent, - PopeyeReportViewerComponent, - KubeScoreReportViewerComponent, - AnalysisReportSelectorComponent, - AnalysisReportRunnerComponent, - ResourceAlertPreviewComponent, - ResourceAlertViewComponent, - AnalysisStatusCellComponent, - KubernetesNamespacePreviewComponent, - ] + imports: [ + CoreModule, + CommonModule, + SharedModule, + NgxChartsModule, + KubernetesRoutingModule, + ], + declarations: [ + KubernetesComponent, + KubernetesNodesTabComponent, + KubernetesTabBaseComponent, + KubernetesNodeCapacityComponent, + KubernetesPodTagsComponent, + KubernetesNamespacesTabComponent, + KubernetesDashboardTabComponent, + KubernetesSummaryTabComponent, + KubernetesAnalysisTabComponent, + PodMetricsComponent, + KubernetesNodeLinkComponent, + KubernetesNodeIpsComponent, + KubernetesNodeLabelsComponent, + KubernetesNodePressureComponent, + KubernetesLabelsCellComponent, + KubernetesNodeComponent, + KubernetesNodeSummaryComponent, + KubernetesNodePodsComponent, + KubernetesNodeSummaryCardComponent, + KubernetesNodeConditionCardComponent, + KubernetesNodeTagsCardComponent, + KubernetesNodePodsComponent, + KubernetesNodeInfoCardComponent, + KubernetesNodeMetricsComponent, + KubernetesNodeConditionComponent, + KubernetesNodeMetricsChartComponent, + KubernetesNodeMetricStatsCardComponent, + KubernetesNodeSimpleMetricComponent, + ConditionCellComponent, + KubernetesNamespaceLinkComponent, + KubeNamespacePodCountComponent, + NodePodCountComponent, + KubernetesServicePortsComponent, + KubernetesPodStatusComponent, + KubeConsoleComponent, + KubeServiceCardComponent, + KubernetesResourceViewerComponent, + KubeServiceCardComponent, + KubedashConfigurationComponent, + KubernetesPodContainersComponent, + KubernetesAnalysisReportComponent, + KubernetesAnalysisInfoComponent, + AnalysisInfoCardComponent, + AnalysisReportViewerComponent, + PopeyeReportViewerComponent, + AnalysisReportSelectorComponent, + AnalysisReportRunnerComponent, + ResourceAlertPreviewComponent, + ResourceAlertViewComponent, + KubeScoreReportViewerComponent, + AnalysisStatusCellComponent, + KubernetesNamespaceAnalysisReportComponent, + KubernetesNamespacePreviewComponent, + ], + providers: [ + KubernetesService, + BaseKubeGuid, + KubernetesEndpointService, + KubernetesNodeService + ], + exports: [ + KubernetesResourceViewerComponent, + AnalysisReportViewerComponent, + PopeyeReportViewerComponent, + KubeScoreReportViewerComponent, + AnalysisReportSelectorComponent, + AnalysisReportRunnerComponent, + ResourceAlertPreviewComponent, + ResourceAlertViewComponent, + AnalysisStatusCellComponent, + KubernetesNamespacePreviewComponent, + ] }) export class KubernetesModule { diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes.setup.module.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes.setup.module.ts index d1b145edd2..3faba8c424 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes.setup.module.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes.setup.module.ts @@ -49,48 +49,34 @@ import { KubernetesStoreModule } from './kubernetes.store.module'; import { KubernetesEndpointService } from './services/kubernetes-endpoint.service'; @NgModule({ - imports: [ - EntityCatalogModule.forFeature(() => kubeEntityCatalog.allKubeEntities()), - CoreModule, - CommonModule, - SharedModule, - KubernetesStoreModule - ], - declarations: [ - KubernetesCertsAuthFormComponent, - KubernetesAWSAuthFormComponent, - KubernetesConfigAuthFormComponent, - KubernetesGKEAuthFormComponent, - KubernetesSATokenAuthFormComponent, - KubeConfigRegistrationComponent, - KubeConfigSelectionComponent, - KubeConfigImportComponent, - KubeConfigTableSelectComponent, - KubeConfigTableUserSelectComponent, - KubeConfigTableImportStatusComponent, - KubeConfigTableSubTypeSelectComponent, - KubeConfigTableNameComponent, - KubeConfigTableCertComponent - ], - providers: [ - BaseKubeGuid, - KubernetesEndpointService, - KubernetesUIConfigService, - ], - entryComponents: [ - KubernetesCertsAuthFormComponent, - KubernetesAWSAuthFormComponent, - KubernetesConfigAuthFormComponent, - KubernetesGKEAuthFormComponent, - KubernetesSATokenAuthFormComponent, - KubeConfigRegistrationComponent, - KubeConfigTableSelectComponent, - KubeConfigTableUserSelectComponent, - KubeConfigTableImportStatusComponent, - KubeConfigTableSubTypeSelectComponent, - KubeConfigTableNameComponent, - KubeConfigTableCertComponent - ] + imports: [ + EntityCatalogModule.forFeature(() => kubeEntityCatalog.allKubeEntities()), + CoreModule, + CommonModule, + SharedModule, + KubernetesStoreModule + ], + declarations: [ + KubernetesCertsAuthFormComponent, + KubernetesAWSAuthFormComponent, + KubernetesConfigAuthFormComponent, + KubernetesGKEAuthFormComponent, + KubernetesSATokenAuthFormComponent, + KubeConfigRegistrationComponent, + KubeConfigSelectionComponent, + KubeConfigImportComponent, + KubeConfigTableSelectComponent, + KubeConfigTableUserSelectComponent, + KubeConfigTableImportStatusComponent, + KubeConfigTableSubTypeSelectComponent, + KubeConfigTableNameComponent, + KubeConfigTableCertComponent + ], + providers: [ + BaseKubeGuid, + KubernetesEndpointService, + KubernetesUIConfigService, + ] }) export class KubernetesSetupModule { constructor( diff --git a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes/kubernetes.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes/kubernetes.component.spec.ts index 89e6bc2ced..140e84a034 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/kubernetes/kubernetes.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/kubernetes/kubernetes.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../core/src/tab-nav.service'; import { KubernetesBaseTestModules } from '../kubernetes.testing.module'; @@ -8,7 +8,7 @@ describe('KubernetesComponent', () => { let component: KubernetesComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/analysis-status-cell/analysis-status-cell.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/analysis-status-cell/analysis-status-cell.component.spec.ts index d7c7f58503..452d1f97f0 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/analysis-status-cell/analysis-status-cell.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/analysis-status-cell/analysis-status-cell.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../../../core/src/public-api'; import { @@ -10,7 +10,7 @@ describe('AnalysisStatusCellComponent', () => { let component: AnalysisStatusCellComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [AnalysisStatusCellComponent, AnalysisReportSelectorComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-labels-cell/kubernetes-labels-cell.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-labels-cell/kubernetes-labels-cell.component.spec.ts index 208f7e2be3..04ba7fd163 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-labels-cell/kubernetes-labels-cell.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-labels-cell/kubernetes-labels-cell.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../../core/test-framework/core-test.helper'; import { KubernetesStatus } from '../../store/kube.types'; @@ -8,7 +8,7 @@ describe('KubernetesLabelsCellComponent', () => { let component: KubernetesLabelsCellComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesLabelsCellComponent], imports: BaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-namespaces/kube-namespace-pod-count/kube-namespace-pod-count.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-namespaces/kube-namespace-pod-count/kube-namespace-pod-count.component.spec.ts index d5f28ba20e..a10d6709ba 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-namespaces/kube-namespace-pod-count/kube-namespace-pod-count.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-namespaces/kube-namespace-pod-count/kube-namespace-pod-count.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubeBaseGuidMock, KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { KubernetesEndpointService } from '../../../services/kubernetes-endpoint.service'; @@ -8,7 +8,7 @@ describe('KubeNamespacePodCountComponent', () => { let component: KubeNamespacePodCountComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubeNamespacePodCountComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-namespaces/kubernetes-namespace-link/kubernetes-namespace-link.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-namespaces/kubernetes-namespace-link/kubernetes-namespace-link.component.spec.ts index 83363482ad..c99d2e368a 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-namespaces/kubernetes-namespace-link/kubernetes-namespace-link.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-namespaces/kubernetes-namespace-link/kubernetes-namespace-link.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseKubeGuid } from '../../../kubernetes-page.types'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; @@ -10,7 +10,7 @@ describe('KubernetesNamespaceLinkComponent', () => { let component: KubernetesNamespaceLinkComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNamespaceLinkComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/condition-cell/condition-cell.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/condition-cell/condition-cell.component.spec.ts index dedb8f791a..933984b64d 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/condition-cell/condition-cell.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/condition-cell/condition-cell.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../../../core/test-framework/core-test.helper'; import { ConditionCellComponent } from './condition-cell.component'; @@ -7,7 +7,7 @@ describe('ConditionCellComponent', () => { let component: ConditionCellComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ConditionCellComponent], imports: BaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-capacity/kubernetes-node-capacity.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-capacity/kubernetes-node-capacity.component.spec.ts index bc04b8d360..b1435ad4d2 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-capacity/kubernetes-node-capacity.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-capacity/kubernetes-node-capacity.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../../../core/test-framework/core-test.helper'; import { KubernetesNodeCapacityComponent } from './kubernetes-node-capacity.component'; @@ -7,7 +7,7 @@ describe('KubernetesNodeCapacityComponent', () => { let component: KubernetesNodeCapacityComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeCapacityComponent], imports: BaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-ips/kubernetes-node-ips.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-ips/kubernetes-node-ips.component.spec.ts index 942059a5b5..1c66e32443 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-ips/kubernetes-node-ips.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-ips/kubernetes-node-ips.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../../../core/test-framework/core-test.helper'; import { KubernetesNodeIpsComponent } from './kubernetes-node-ips.component'; @@ -7,7 +7,7 @@ describe('KubernetesNodeIpsComponent', () => { let component: KubernetesNodeIpsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeIpsComponent], imports: BaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-labels/kubernetes-node-labels.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-labels/kubernetes-node-labels.component.spec.ts index 050be6121c..03e9000e76 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-labels/kubernetes-node-labels.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-labels/kubernetes-node-labels.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../../../core/test-framework/core-test.helper'; import { KubernetesNodeLabelsComponent } from './kubernetes-node-labels.component'; @@ -7,7 +7,7 @@ describe('KubernetesNodeLabelsComponent', () => { let component: KubernetesNodeLabelsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeLabelsComponent], imports: BaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-link/kubernetes-node-link.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-link/kubernetes-node-link.component.spec.ts index 1672ebc38b..40b893596a 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-link/kubernetes-node-link.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-link/kubernetes-node-link.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseKubeGuid } from '../../../kubernetes-page.types'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; @@ -9,7 +9,7 @@ describe('KubernetesNodeLinkComponent', () => { let component: KubernetesNodeLinkComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeLinkComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-pressure/kubernetes-node-pressure.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-pressure/kubernetes-node-pressure.component.spec.ts index cb7eb3fa12..a1ab14d56d 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-pressure/kubernetes-node-pressure.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-pressure/kubernetes-node-pressure.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseTestModules } from '../../../../../../core/test-framework/core-test.helper'; import { KubernetesNodePressureComponent } from './kubernetes-node-pressure.component'; @@ -7,7 +7,7 @@ describe('KubernetesNodePressureComponent', () => { let component: KubernetesNodePressureComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodePressureComponent], imports: BaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-pressure/kubernetes-node-pressure.component.theme.scss b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-pressure/kubernetes-node-pressure.component.theme.scss index 5508403ef1..08c2095629 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-pressure/kubernetes-node-pressure.component.theme.scss +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-pressure/kubernetes-node-pressure.component.theme.scss @@ -1,7 +1,7 @@ // Not currently used but should be - NJ -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @mixin app-kubernetes-node-pressure($theme, $app-theme) { $status: map-get($app-theme, status); .pressure { diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-condition-card/kubernetes-node-condition-card.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-condition-card/kubernetes-node-condition-card.component.spec.ts index d8dfafea22..370332072f 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-condition-card/kubernetes-node-condition-card.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-condition-card/kubernetes-node-condition-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseKubeGuid } from '../../../../kubernetes-page.types'; import { KubernetesBaseTestModules } from '../../../../kubernetes.testing.module'; @@ -11,7 +11,7 @@ describe('KubernetesNodeConditionCardComponent', () => { let component: KubernetesNodeConditionCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeConditionCardComponent, KubernetesNodeConditionComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-info-card/kubernetes-node-info-card.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-info-card/kubernetes-node-info-card.component.spec.ts index 4b45cd03f2..5ca0f2f8b8 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-info-card/kubernetes-node-info-card.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-info-card/kubernetes-node-info-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseKubeGuid } from '../../../../kubernetes-page.types'; import { KubernetesBaseTestModules } from '../../../../kubernetes.testing.module'; @@ -10,7 +10,7 @@ describe('KubernetesNodeInfoCardComponent', () => { let component: KubernetesNodeInfoCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeInfoCardComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-summary-card/kubernetes-node-summary-card.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-summary-card/kubernetes-node-summary-card.component.spec.ts index b0b76ccb65..6625c514c0 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-summary-card/kubernetes-node-summary-card.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-summary-card/kubernetes-node-summary-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseKubeGuid } from '../../../../kubernetes-page.types'; import { KubernetesBaseTestModules } from '../../../../kubernetes.testing.module'; @@ -10,7 +10,7 @@ describe('KubernetesNodeSummaryCardComponent', () => { let component: KubernetesNodeSummaryCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeSummaryCardComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-summary.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-summary.component.spec.ts index 629d1c742b..5094a7df29 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-summary.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-summary.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseKubeGuid } from '../../../kubernetes-page.types'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; @@ -19,7 +19,7 @@ describe('KubernetesNodeSummaryComponent', () => { let component: KubernetesNodeSummaryComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeSummaryComponent, KubernetesNodeConditionComponent, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-tags-card/kubernetes-node-tags-card.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-tags-card/kubernetes-node-tags-card.component.spec.ts index 95a2a45250..3a33621b91 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-tags-card/kubernetes-node-tags-card.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/kubernetes-node-summary/kubernetes-node-tags-card/kubernetes-node-tags-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseKubeGuid } from '../../../../kubernetes-page.types'; import { KubernetesBaseTestModules } from '../../../../kubernetes.testing.module'; @@ -10,7 +10,7 @@ describe('KubernetesNodeTagsCardComponent', () => { let component: KubernetesNodeTagsCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodeTagsCardComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/node-pod-count/node-pod-count.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/node-pod-count/node-pod-count.component.spec.ts index 238a27d291..0ce331d461 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/node-pod-count/node-pod-count.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-nodes/node-pod-count/node-pod-count.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubeBaseGuidMock, KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { KubernetesEndpointService } from '../../../services/kubernetes-endpoint.service'; @@ -8,7 +8,7 @@ describe('NodePodCountComponent', () => { let component: NodePodCountComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [NodePodCountComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-containers/kubernetes-pod-containers.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-containers/kubernetes-pod-containers.component.spec.ts index ff465a15c8..0113d3c2e0 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-containers/kubernetes-pod-containers.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-containers/kubernetes-pod-containers.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { KubernetesPod } from '../../../store/kube.types'; @@ -8,7 +8,7 @@ describe('KubernetesPodContainersComponent', () => { let component: KubernetesPodContainersComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesPodContainersComponent], imports: KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-status/kubernetes-pod-status.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-status/kubernetes-pod-status.component.spec.ts index 3b4aa18faa..8d35386e6b 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-status/kubernetes-pod-status.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-status/kubernetes-pod-status.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesPod, KubernetesStatus } from '../../../store/kube.types'; import { KubernetesPodStatusComponent } from './kubernetes-pod-status.component'; @@ -7,7 +7,7 @@ describe('KubernetesPodStatusComponent', () => { let component: KubernetesPodStatusComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ KubernetesPodStatusComponent diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-tags/kubernetes-pod-tags.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-tags/kubernetes-pod-tags.component.spec.ts index 01d73f4751..7b2b492179 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-tags/kubernetes-pod-tags.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-pods/kubernetes-pod-tags/kubernetes-pod-tags.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { KubernetesStatus } from '../../../store/kube.types'; @@ -8,7 +8,7 @@ describe('KubernetesPodTagsComponent', () => { let component: KubernetesPodTagsComponent; let fixture: ComponentFixture>; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesPodTagsComponent], imports: KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-service-ports/kubernetes-service-ports.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-service-ports/kubernetes-service-ports.component.spec.ts index 3beaf03a86..616b5bbbb2 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-service-ports/kubernetes-service-ports.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-service-ports/kubernetes-service-ports.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesServicePortsComponent } from './kubernetes-service-ports.component'; @@ -6,7 +6,7 @@ describe('KubernetesServicePortsComponent', () => { let component: KubernetesServicePortsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesServicePortsComponent] }) diff --git a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-services/kubernetes-service-card/kubernetes-service-card.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-services/kubernetes-service-card/kubernetes-service-card.component.spec.ts index d689c5baf0..e1e4e86e36 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-services/kubernetes-service-card/kubernetes-service-card.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/list-types/kubernetes-services/kubernetes-service-card/kubernetes-service-card.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { KubernetesServicePortsComponent } from '../../kubernetes-service-ports/kubernetes-service-ports.component'; @@ -10,7 +10,7 @@ describe('KubeServiceCardComponent', () => { let component: KubeServiceCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ KubeServiceCardComponent, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/pod-metrics/pod-metrics.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/pod-metrics/pod-metrics.component.spec.ts index cbf4e5677f..0f759fc01a 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/pod-metrics/pod-metrics.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/pod-metrics/pod-metrics.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { TabNavService } from '../../../../core/src/tab-nav.service'; @@ -10,7 +10,7 @@ describe('PodMetricsComponent', () => { let component: PodMetricsComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [PodMetricsComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/store/analysis.effects.ts b/src/frontend/packages/kubernetes/src/kubernetes/store/analysis.effects.ts index c6322acb6d..43fc7a99d0 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/store/analysis.effects.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/store/analysis.effects.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, flatMap, mergeMap } from 'rxjs/operators'; @@ -34,8 +34,8 @@ export class AnalysisEffects { private store: Store, ) { } - @Effect() - fetchAnalysisReports$ = this.actions$.pipe( + + fetchAnalysisReports$ = createEffect(() => this.actions$.pipe( ofType(GET_ANALYSIS_REPORTS_TYPES[0]), flatMap(action => { this.store.dispatch(new StartRequestAction(action)); @@ -70,10 +70,10 @@ export class AnalysisEffects { ]) ); }) - ); + )); - @Effect() - fetchAnalysisReportById$ = this.actions$.pipe( + + fetchAnalysisReportById$ = createEffect(() => this.actions$.pipe( ofType(GET_ANALYSIS_REPORT_BY_ID_TYPES[0]), flatMap(action => { this.store.dispatch(new StartRequestAction(action)); @@ -110,10 +110,10 @@ export class AnalysisEffects { ]) ); }) - ); + )); - @Effect() - fetchAnalysisReportByPath$ = this.actions$.pipe( + + fetchAnalysisReportByPath$ = createEffect(() => this.actions$.pipe( ofType(GET_ANALYSIS_REPORTS_BY_PATH_TYPES[0]), flatMap(action => { this.store.dispatch(new StartRequestAction(action)); @@ -151,10 +151,10 @@ export class AnalysisEffects { ]) ); }) - ); + )); - @Effect() - deleteAnalysisReport$ = this.actions$.pipe( + + deleteAnalysisReport$ = createEffect(() => this.actions$.pipe( ofType(DELETE_ANALYSIS_REPORT_TYPES[0]), flatMap(action => { const type: ApiRequestTypes = 'delete'; @@ -187,10 +187,10 @@ export class AnalysisEffects { ]) ); }) - ); + )); - @Effect() - runAnalysisReport$ = this.actions$.pipe( + + runAnalysisReport$ = createEffect(() => this.actions$.pipe( ofType(RUN_ANALYSIS_REPORT_TYPES[0]), flatMap(action => { const type: ApiRequestTypes = 'create'; @@ -230,7 +230,7 @@ export class AnalysisEffects { ); }) - ); + )); private processReport(report: any) { diff --git a/src/frontend/packages/kubernetes/src/kubernetes/store/kubernetes.effects.ts b/src/frontend/packages/kubernetes/src/kubernetes/store/kubernetes.effects.ts index ee88fc90fa..85264434c2 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/store/kubernetes.effects.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/store/kubernetes.effects.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Action, Store } from '@ngrx/store'; import { ClearPaginationOfEntity, ClearPaginationOfType } from 'frontend/packages/store/src/actions/pagination.actions'; import { ApiRequestTypes } from 'frontend/packages/store/src/reducers/api-request-reducer/request-helpers'; @@ -104,8 +104,8 @@ export class KubernetesEffects { constructor(private http: HttpClient, private actions$: Actions, private store: Store) { } - @Effect() - fetchDashboardInfo$ = this.actions$.pipe( + + fetchDashboardInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_KUBE_DASHBOARD), flatMap(action => { this.store.dispatch(new StartRequestAction(action)); @@ -142,43 +142,43 @@ export class KubernetesEffects { }) ])); }) - ); + )); - @Effect() - fetchNodesInfo$ = this.actions$.pipe( + + fetchNodesInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_NODES_INFO), flatMap(action => this.processNodeAction(action)) - ); + )); - @Effect() - fetchNodeInfo$ = this.actions$.pipe( + + fetchNodeInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_NODE_INFO), flatMap(action => this.processSingleItemAction( action, `/pp/${this.proxyAPIVersion}/proxy/api/v1/nodes/${action.nodeName}` )) - ); + )); - @Effect() - fetchNamespaceInfo$ = this.actions$.pipe( + + fetchNamespaceInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_NAMESPACE_INFO), flatMap(action => this.processSingleItemAction( action, `/pp/${this.proxyAPIVersion}/proxy/api/v1/namespaces/${action.namespaceName}`) ) - ); + )); - @Effect() - fetchPodsInfo$ = this.actions$.pipe( + + fetchPodsInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_POD_INFO), flatMap(action => this.processListAction( action, `/pp/${this.proxyAPIVersion}/proxy/api/v1/pods` )) - ); + )); - @Effect() - fetchPodsOnNodeInfo$ = this.actions$.pipe( + + fetchPodsOnNodeInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_PODS_ON_NODE_INFO), flatMap(action => this.processListAction( @@ -187,56 +187,56 @@ export class KubernetesEffects { // Note - filtering done via param in action ) ) - ); + )); - @Effect() - fetchPodsInNamespaceInfo$ = this.actions$.pipe( + + fetchPodsInNamespaceInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_PODS_IN_NAMESPACE_INFO), flatMap(action => this.processListAction( action, `/pp/${this.proxyAPIVersion}/proxy/api/v1/namespaces/${action.namespaceName}/pods`, )) - ); + )); - @Effect() - fetchServicesInNamespaceInfo$ = this.actions$.pipe( + + fetchServicesInNamespaceInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_SERVICES_IN_NAMESPACE_INFO), flatMap(action => this.processListAction( action, `/pp/${this.proxyAPIVersion}/proxy/api/v1/namespaces/${action.namespaceName}/services`, )) - ); + )); - @Effect() - fetchPodInfo$ = this.actions$.pipe( + + fetchPodInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_KUBE_POD), flatMap(action => this.processSingleItemAction( action, `/pp/${this.proxyAPIVersion}/proxy/api/v1/namespaces/${action.namespaceName}/pods/${action.podName}`, )) - ); + )); - @Effect() - fetchServicesInfo$ = this.actions$.pipe( + + fetchServicesInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_SERVICE_INFO), flatMap(action => this.processListAction( action, `/pp/${this.proxyAPIVersion}/proxy/api/v1/services`, )) - ); + )); - @Effect() - fetchNamespacesInfo$ = this.actions$.pipe( + + fetchNamespacesInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_NAMESPACES_INFO), flatMap(action => this.processListAction( action, `/pp/${this.proxyAPIVersion}/proxy/api/v1/namespaces`, )) - ); + )); - @Effect() - createNamespace$ = this.actions$.pipe( + + createNamespace$ = createEffect(() => this.actions$.pipe( ofType(CREATE_NAMESPACE), flatMap(action => this.processSingleItemAction( action, @@ -250,32 +250,32 @@ export class KubernetesEffects { } ) ) - ); + )); - @Effect() - fetchStatefulSets$ = this.actions$.pipe( + + fetchStatefulSets$ = createEffect(() => this.actions$.pipe( ofType(GET_KUBE_STATEFULSETS), flatMap(action => this.processListAction( action, `/pp/${this.proxyAPIVersion}/proxy/apis/apps/v1/statefulsets`, )) - ); + )); - @Effect() - fetchDeployments$ = this.actions$.pipe( + + fetchDeployments$ = createEffect(() => this.actions$.pipe( ofType(GET_KUBE_DEPLOYMENT), flatMap(action => this.processListAction( action, `/pp/${this.proxyAPIVersion}/proxy/apis/apps/v1/deployments`, )) - ); + )); // ======================================================================================= // Generic resource effects // ======================================================================================= - @Effect() - fetchKubeResources$ = this.actions$.pipe( + + fetchKubeResources$ = createEffect(() => this.actions$.pipe( ofType(GET_KUBE_RESOURCES), flatMap((action: GetKubernetesResources) => { const catalog = entityCatalog.getEntity(action.endpointType, action.entityType); @@ -291,10 +291,10 @@ export class KubernetesEffects { throw new Error('Kubernetes Resource request - but no API information is available'); }) - ); + )); - @Effect() - fetchKubeResourcesInNamespace$ = this.actions$.pipe( + + fetchKubeResourcesInNamespace$ = createEffect(() => this.actions$.pipe( ofType(GET_KUBE_RESOURCES_IN_NAMESPACE), flatMap((action: GetKubernetesResourcesInNamespace) => { const catalog = entityCatalog.getEntity(action.endpointType, action.entityType); @@ -310,12 +310,12 @@ export class KubernetesEffects { throw new Error('Kubernetes Resource request - but no API information is available'); }) - ); + )); // ======================================================================================= - @Effect() - deleteKubeResource$ = this.actions$.pipe( + + deleteKubeResource$ = createEffect(() => this.actions$.pipe( ofType(DELETE_KUBE_RESOURCE), flatMap(action => { const catalog = entityCatalog.getEntity(action.endpointType, action.entityType); @@ -332,7 +332,7 @@ export class KubernetesEffects { } } }) - ); + )); // ======================================================================================= diff --git a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/analysis-info-card/analysis-info-card.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/analysis-info-card/analysis-info-card.component.spec.ts index 88894b763d..8181e0cbce 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/analysis-info-card/analysis-info-card.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/analysis-info-card/analysis-info-card.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { AnalysisInfoCardComponent } from './analysis-info-card.component'; @@ -7,7 +7,7 @@ describe('AnalysisInfoCardComponent', () => { let component: AnalysisInfoCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ AnalysisInfoCardComponent ], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/analysis-info-card/analysis-info-card.component.ts b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/analysis-info-card/analysis-info-card.component.ts index 4fb75c972c..d470c4a03c 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/analysis-info-card/analysis-info-card.component.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/analysis-info-card/analysis-info-card.component.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Component, Input } from '@angular/core'; -import markdown from 'marked'; +import { marked } from 'marked'; import { Observable, of } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; @@ -13,7 +13,7 @@ export class AnalysisInfoCardComponent { public loading = true; public content$: Observable; - private renderer = new markdown.Renderer(); + private renderer = new marked.Renderer(); public mAanalyzer = {}; @@ -37,7 +37,7 @@ export class AnalysisInfoCardComponent { return this.http.get(url, { responseType: 'text' }).pipe( map(resp => { this.loading = false; - return markdown(resp, { + return marked(resp, { renderer: this.renderer }); }), diff --git a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/kubernetes-analysis-info.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/kubernetes-analysis-info.component.spec.ts index 12fc0e9c0b..148ee43869 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/kubernetes-analysis-info.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-info/kubernetes-analysis-info.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { SharedModule } from '../../../../../../core/src/public-api'; import { SidePanelService } from '../../../../../../core/src/shared/services/side-panel.service'; @@ -13,7 +13,7 @@ describe('KubernetesAnalysisInfoComponent', () => { let component: KubernetesAnalysisInfoComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesAnalysisInfoComponent, AnalysisInfoCardComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-report/kubernetes-analysis-report.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-report/kubernetes-analysis-report.component.spec.ts index 5e94f069a2..0751d38a65 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-report/kubernetes-analysis-report.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-report/kubernetes-analysis-report.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../core/src/tab-nav.service'; import { KubeBaseGuidMock, KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; @@ -13,7 +13,7 @@ describe('KubernetesAnalysisReportComponent', () => { let component: KubernetesAnalysisReportComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesAnalysisReportComponent, AnalysisReportViewerComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-tab.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-tab.component.spec.ts index ea14935d32..ff03cd5e80 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-tab.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-analysis-tab/kubernetes-analysis-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MDAppModule } from '../../../../../core/src/public-api'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -13,7 +13,7 @@ describe('KubernetesAnalysisTabComponent', () => { let component: KubernetesAnalysisTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesAnalysisTabComponent, AnalysisReportViewerComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-nodes-tab/kubernetes-nodes-tab.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-nodes-tab/kubernetes-nodes-tab.component.spec.ts index 139bdd8e5a..241178b994 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-nodes-tab/kubernetes-nodes-tab.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-nodes-tab/kubernetes-nodes-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { BaseKubeGuid } from '../../kubernetes-page.types'; import { KubernetesBaseTestModules } from '../../kubernetes.testing.module'; @@ -8,7 +8,7 @@ describe('KubernetesNodesTabComponent', () => { let component: KubernetesNodesTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesNodesTabComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-summary-tab/kubernetes-summary.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-summary-tab/kubernetes-summary.component.spec.ts index 05b38cdc1a..9306b2c3a0 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-summary-tab/kubernetes-summary.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/tabs/kubernetes-summary-tab/kubernetes-summary.component.spec.ts @@ -1,5 +1,5 @@ import { HttpClient, HttpHandler } from '@angular/common/http'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { KubeBaseGuidMock, KubernetesBaseTestModules } from '../../kubernetes.testing.module'; @@ -10,7 +10,7 @@ describe('KubernetesSummaryTabComponent', () => { let component: KubernetesSummaryTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [KubernetesSummaryTabComponent], imports: [...KubernetesBaseTestModules], diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/chart-values-editor/chart-values-editor.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/chart-values-editor/chart-values-editor.component.spec.ts index 0c222d2b2d..8e9998c6e4 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/chart-values-editor/chart-values-editor.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/chart-values-editor/chart-values-editor.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpClientModule, HttpHandler } from '@angular/common/http'; import { HttpClientTestingModule } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { createBasicStoreModule } from '@stratosui/store/testing'; import { MDAppModule } from '../../../../../core/src/public-api'; @@ -11,7 +11,7 @@ describe('ChartValuesEditorComponent', () => { let component: ChartValuesEditorComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ChartValuesEditorComponent], providers: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/chart-values-editor/chart-values-editor.component.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/chart-values-editor/chart-values-editor.component.ts index a4313a4e2e..6cfbf89b15 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/chart-values-editor/chart-values-editor.component.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/chart-values-editor/chart-values-editor.component.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { AfterViewInit, Component, ElementRef, Input, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core'; -import { JsonSchemaFormComponent } from '@cfstratos/ajsf-core'; +import { JsonSchemaFormComponent } from '@ajsf/core'; import * as yaml from 'js-yaml'; import { BehaviorSubject, combineLatest, fromEvent, Observable, of, Subscription } from 'rxjs'; import { catchError, debounceTime, filter, map, startWith, tap } from 'rxjs/operators'; diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/create-release/create-release.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/create-release/create-release.component.spec.ts index f4194499a6..f1856fc426 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/create-release/create-release.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/create-release/create-release.component.spec.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ConfirmationDialogService } from '../../../../../core/src/shared/components/confirmation-dialog.service'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; @@ -18,7 +18,7 @@ describe('CreateReleaseComponent', () => { let fixture: ComponentFixture; let httpMock: HttpTestingController; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ CreateReleaseComponent, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/create-release/create-release.component.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/create-release/create-release.component.ts index a5c7ebdb45..f51d70c7ca 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/create-release/create-release.component.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/create-release/create-release.component.ts @@ -1,5 +1,5 @@ import { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core'; -import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { BehaviorSubject, combineLatest, Observable, of, Subscription } from 'rxjs'; import { distinctUntilChanged, filter, first, map, pairwise, startWith, switchMap } from 'rxjs/operators'; @@ -35,7 +35,7 @@ export class CreateReleaseComponent implements OnInit, OnDestroy { kubeEndpoints$: Observable; validate$: Observable; - details: FormGroup; + details: UntypedFormGroup; namespaces$: Observable; private endpointChanged = new BehaviorSubject(null); @@ -70,11 +70,11 @@ export class CreateReleaseComponent implements OnInit, OnDestroy { } private setupDetailsStep() { - this.details = new FormGroup({ - endpoint: new FormControl('', Validators.required), - releaseName: new FormControl('', Validators.required), - releaseNamespace: new FormControl('', Validators.required), - createNamespace: new FormControl(false), + this.details = new UntypedFormGroup({ + endpoint: new UntypedFormControl('', Validators.required), + releaseName: new UntypedFormControl('', Validators.required), + releaseNamespace: new UntypedFormControl('', Validators.required), + createNamespace: new UntypedFormControl(false), }); this.details.controls.createNamespace.disable(); diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/list-types/helm-release-card/helm-release-card.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/list-types/helm-release-card/helm-release-card.component.spec.ts index 97d0be3395..9072e594c7 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/list-types/helm-release-card/helm-release-card.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/list-types/helm-release-card/helm-release-card.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; import { HelmRelease } from '../../workload.types'; @@ -9,7 +9,7 @@ describe('HelmReleaseCardComponent', () => { let component: HelmReleaseCardComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [HelmReleaseCardComponent], imports: KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/helm-release-tab-base/helm-release-tab-base.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/helm-release-tab-base/helm-release-tab-base.component.spec.ts index 7dd6fde844..445f528baf 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/helm-release-tab-base/helm-release-tab-base.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/helm-release-tab-base/helm-release-tab-base.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../core/src/tab-nav.service'; import { HelmReleaseProviders, KubeBaseGuidMock, KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; @@ -11,7 +11,7 @@ describe('HelmReleaseTabBaseComponent', () => { let component: HelmReleaseTabBaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [...KubernetesBaseTestModules], declarations: [HelmReleaseTabBaseComponent], diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-analysis-tab/helm-release-analysis-tab.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-analysis-tab/helm-release-analysis-tab.component.spec.ts index 3ae0b29782..f5cb4acb13 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-analysis-tab/helm-release-analysis-tab.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-analysis-tab/helm-release-analysis-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../../core/src/tab-nav.service'; import { AnalysisReportViewerComponent } from '../../../../analysis-report-viewer/analysis-report-viewer.component'; @@ -14,7 +14,7 @@ describe('HelmReleaseAnalysisTabComponent', () => { let component: HelmReleaseAnalysisTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [HelmReleaseAnalysisTabComponent, AnalysisReportSelectorComponent, AnalysisReportViewerComponent], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-history-tab/helm-release-history-tab.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-history-tab/helm-release-history-tab.component.spec.ts index f2b19dceeb..5eb238fe20 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-history-tab/helm-release-history-tab.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-history-tab/helm-release-history-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { HelmReleaseGuidMock } from '../../../../../helm/helm-testing.module'; import { HelmReleaseHelperService } from '../helm-release-helper.service'; @@ -8,7 +8,7 @@ describe('HelmReleaseHistoryTabComponent', () => { let component: HelmReleaseHistoryTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ HelmReleaseHistoryTabComponent ], providers: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-notes-tab/helm-release-notes-tab.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-notes-tab/helm-release-notes-tab.component.spec.ts index 1d3a3c6811..09cb686ef6 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-notes-tab/helm-release-notes-tab.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-notes-tab/helm-release-notes-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { HelmReleaseProviders, KubernetesBaseTestModules } from '../../../../kubernetes.testing.module'; import { HelmReleaseNotesTabComponent } from './helm-release-notes-tab.component'; @@ -7,7 +7,7 @@ describe('HelmReleaseNotesTabComponent', () => { let component: HelmReleaseNotesTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-resource-graph/helm-release-resource-graph.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-resource-graph/helm-release-resource-graph.component.spec.ts index 6395c37110..8e0e51e116 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-resource-graph/helm-release-resource-graph.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-resource-graph/helm-release-resource-graph.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { NgxGraphModule } from '@swimlane/ngx-graph'; import { SidePanelService } from 'frontend/packages/core/src/shared/services/side-panel.service'; @@ -16,7 +16,7 @@ describe('HelmReleaseResourceGraphComponent', () => { let component: HelmReleaseResourceGraphComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules, diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-summary-tab/helm-release-summary-tab.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-summary-tab/helm-release-summary-tab.component.spec.ts index d1779d79e7..603c8b752c 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-summary-tab/helm-release-summary-tab.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-summary-tab/helm-release-summary-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { SidePanelService } from '../../../../../../../core/src/shared/services/side-panel.service'; import { TabNavService } from '../../../../../../../core/src/tab-nav.service'; @@ -15,7 +15,7 @@ describe('HelmReleaseSummaryTabComponent', () => { let component: HelmReleaseSummaryTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...WorkloadsBaseTestingModule diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-values-tab/helm-release-values-tab.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-values-tab/helm-release-values-tab.component.spec.ts index f7dc5b580b..b980c3836d 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-values-tab/helm-release-values-tab.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/tabs/helm-release-values-tab/helm-release-values-tab.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../../../core/src/tab-nav.service'; import { HelmReleaseProviders, KubernetesBaseTestModules } from '../../../../kubernetes.testing.module'; @@ -8,7 +8,7 @@ describe('HelmReleaseValuesTabComponent', () => { let component: HelmReleaseValuesTabComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/workload-live-reload/workload-live-reload.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/workload-live-reload/workload-live-reload.component.spec.ts index df86d31d29..31e73619ef 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/workload-live-reload/workload-live-reload.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/release/workload-live-reload/workload-live-reload.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { HelmReleaseGuidMock } from '../../../../helm/helm-testing.module'; import { KubernetesBaseTestModules } from '../../../kubernetes.testing.module'; @@ -10,7 +10,7 @@ describe('WorkloadLiveReloadComponent', () => { let component: WorkloadLiveReloadComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/releases-tab/releases-tab.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/releases-tab/releases-tab.component.spec.ts index ad908e0608..01f06c8265 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/releases-tab/releases-tab.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/releases-tab/releases-tab.component.spec.ts @@ -1,5 +1,5 @@ import { DatePipe } from '@angular/common'; -import { async, TestBed } from '@angular/core/testing'; +import { TestBed, waitForAsync } from '@angular/core/testing'; import { TabNavService } from '../../../../../core/src/tab-nav.service'; import { KubernetesBaseTestModules } from '../../kubernetes.testing.module'; @@ -9,7 +9,7 @@ import { HelmReleasesTabComponent } from './releases-tab.component'; describe('ReleasesTabComponent', () => { let component: HelmReleasesTabComponent; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ imports: [ ...KubernetesBaseTestModules diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/store/workloads.effects.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/store/workloads.effects.ts index 58d77f01f7..00ec8f368d 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/store/workloads.effects.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/store/workloads.effects.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Action, Store } from '@ngrx/store'; import { environment } from 'frontend/packages/core/src/environments/environment'; import { Observable } from 'rxjs'; @@ -45,8 +45,8 @@ export class WorkloadsEffects { proxyAPIVersion = environment.proxyAPIVersion; - @Effect() - fetchReleases$ = this.actions$.pipe( + + fetchReleases$ = createEffect(() => this.actions$.pipe( ofType(GET_HELM_RELEASES), flatMap(action => { const entityKey = entityCatalog.getEntityKey(action); @@ -71,10 +71,10 @@ export class WorkloadsEffects { return processedData; }, []); }) - ); + )); - @Effect() - fetchHelmRelease$ = this.actions$.pipe( + + fetchHelmRelease$ = createEffect(() => this.actions$.pipe( ofType(GET_HELM_RELEASE), flatMap(action => { const entityKey = entityCatalog.getEntityKey(action); @@ -93,10 +93,10 @@ export class WorkloadsEffects { return processedData; }, [action.endpointGuid]); }) - ); + )); - @Effect() - fetchHelmReleaseHistory$ = this.actions$.pipe( + + fetchHelmReleaseHistory$ = createEffect(() => this.actions$.pipe( ofType(GET_HELM_RELEASE_HISTORY), flatMap(action => { const entityKey = entityCatalog.getEntityKey(action); @@ -129,10 +129,10 @@ export class WorkloadsEffects { return processedData; }, [action.endpointGuid]); }) - ); + )); - @Effect() - helmUpgrade$ = this.actions$.pipe( + + helmUpgrade$ = createEffect(() => this.actions$.pipe( ofType(UPGRADE_HELM_RELEASE), flatMap(action => { const requestType: ApiRequestTypes = 'update'; @@ -163,7 +163,7 @@ export class WorkloadsEffects { }) ); }) - ); + )); private mapHelmRelease(data, endpointId, guid: string) { const helmRelease: HelmRelease = { diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/upgrade-release/upgrade-release.component.spec.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/upgrade-release/upgrade-release.component.spec.ts index c3151ef19b..fc9d20a5a6 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/upgrade-release/upgrade-release.component.spec.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/upgrade-release/upgrade-release.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { MockChartService } from '../../../helm/monocular/shared/services/chart.service.mock'; import { ChartsService } from '../../../helm/monocular/shared/services/charts.service'; @@ -13,7 +13,7 @@ describe('UpgradeReleaseComponent', () => { let component: UpgradeReleaseComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ UpgradeReleaseComponent ], imports: [ diff --git a/src/frontend/packages/kubernetes/src/kubernetes/workloads/workloads.module.ts b/src/frontend/packages/kubernetes/src/kubernetes/workloads/workloads.module.ts index c341d81ce2..1b40a359a4 100644 --- a/src/frontend/packages/kubernetes/src/kubernetes/workloads/workloads.module.ts +++ b/src/frontend/packages/kubernetes/src/kubernetes/workloads/workloads.module.ts @@ -1,6 +1,6 @@ import { CommonModule, DatePipe } from '@angular/common'; import { NgModule } from '@angular/core'; -import { MaterialDesignFrameworkModule } from '@cfstratos/ajsf-material'; +import { MaterialDesignFrameworkModule } from '@ajsf/material'; import { NgxGraphModule } from '@swimlane/ngx-graph'; import { MonacoEditorModule, NgxMonacoEditorConfig } from 'ngx-monaco-editor'; @@ -34,37 +34,34 @@ const monacoConfig: NgxMonacoEditorConfig = { }; @NgModule({ - imports: [ - CoreModule, - CommonModule, - SharedModule, - WorkloadsStoreModule, - WorkloadsRouting, - NgxGraphModule, - KubernetesModule, - MaterialDesignFrameworkModule, - MonacoEditorModule.forRoot(monacoConfig), - ], - declarations: [ - HelmReleasesTabComponent, - HelmReleaseTabBaseComponent, - HelmReleaseSummaryTabComponent, - HelmReleaseNotesTabComponent, - HelmReleaseValuesTabComponent, - HelmReleaseResourceGraphComponent, - HelmReleaseCardComponent, - HelmReleaseAnalysisTabComponent, - ChartValuesEditorComponent, - CreateReleaseComponent, - WorkloadLiveReloadComponent, - UpgradeReleaseComponent, - HelmReleaseHistoryTabComponent, - ], - entryComponents: [ - HelmReleaseCardComponent - ], - providers: [ - DatePipe, - ] + imports: [ + CoreModule, + CommonModule, + SharedModule, + WorkloadsStoreModule, + WorkloadsRouting, + NgxGraphModule, + KubernetesModule, + MaterialDesignFrameworkModule, + MonacoEditorModule.forRoot(monacoConfig), + ], + declarations: [ + HelmReleasesTabComponent, + HelmReleaseTabBaseComponent, + HelmReleaseSummaryTabComponent, + HelmReleaseNotesTabComponent, + HelmReleaseValuesTabComponent, + HelmReleaseResourceGraphComponent, + HelmReleaseCardComponent, + HelmReleaseAnalysisTabComponent, + ChartValuesEditorComponent, + CreateReleaseComponent, + WorkloadLiveReloadComponent, + UpgradeReleaseComponent, + HelmReleaseHistoryTabComponent, + ], + providers: [ + DatePipe, + ] }) export class WorkloadsModule { } diff --git a/src/frontend/packages/kubernetes/src/test.ts b/src/frontend/packages/kubernetes/src/test.ts index f205020844..db08d2e9fd 100644 --- a/src/frontend/packages/kubernetes/src/test.ts +++ b/src/frontend/packages/kubernetes/src/test.ts @@ -1,7 +1,7 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files import 'core-js/es/reflect'; -import 'zone.js/dist/zone'; -import 'zone.js/dist/zone-testing'; +import 'zone.js'; +import 'zone.js/testing'; import { APP_BASE_HREF } from '@angular/common'; import { getTestBed } from '@angular/core/testing'; @@ -14,7 +14,9 @@ declare const require: any; const testBed = getTestBed(); testBed.initTestEnvironment( BrowserDynamicTestingModule, - platformBrowserDynamicTesting() + platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false } +} ); beforeEach(() => { diff --git a/src/frontend/packages/shared/package.json b/src/frontend/packages/shared/package.json index fd22444357..bd430d2f51 100644 --- a/src/frontend/packages/shared/package.json +++ b/src/frontend/packages/shared/package.json @@ -1,6 +1,9 @@ { "name": "@stratosui/shared", "version": "0.0.1", + "description": "Stratos Shared Components", + "license": "Apache-2.0", + "repository": "https://github.com/cloudfoundry/stratos", "peerDependencies": { "@angular/common": "^8.2.9", "@angular/core": "^8.2.9" diff --git a/src/frontend/packages/shared/src/components/stratos-title/stratos-title.component.spec.ts b/src/frontend/packages/shared/src/components/stratos-title/stratos-title.component.spec.ts index 4bc7ca3078..b8d32117df 100644 --- a/src/frontend/packages/shared/src/components/stratos-title/stratos-title.component.spec.ts +++ b/src/frontend/packages/shared/src/components/stratos-title/stratos-title.component.spec.ts @@ -1,4 +1,4 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { StratosTitleComponent } from './stratos-title.component'; @@ -6,10 +6,11 @@ describe('StratosTitleComponent', () => { let component: StratosTitleComponent; let fixture: ComponentFixture; - beforeEach(async(() => { + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ - declarations: [ StratosTitleComponent ] - }) + declarations: [StratosTitleComponent], + teardown: { destroyAfterEach: false } +}) .compileComponents(); })); diff --git a/src/frontend/packages/shared/src/types.debug.ts b/src/frontend/packages/shared/src/types.debug.ts new file mode 100644 index 0000000000..3393b0970e --- /dev/null +++ b/src/frontend/packages/shared/src/types.debug.ts @@ -0,0 +1,22 @@ +// Pure Debug Typoes for vscode inspection +// +// Use Case: +// Inspecting exact properties and types of `TypeToInspect` +// type inspectMyType = Expand +// +// For nested/complex types +// type inspectMyType = ExpandRecursively + +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never; + +export type ExpandRecursively = T extends (...args: infer A) => infer R + ? (...args: ExpandRecursively) => ExpandRecursively + : T extends object + ? T extends infer O + ? { [K in keyof O]: ExpandRecursively } + : never + : T; diff --git a/src/frontend/packages/store/ng-package.json b/src/frontend/packages/store/ng-package.json index d06c8efd6e..fdcb5261a0 100644 --- a/src/frontend/packages/store/ng-package.json +++ b/src/frontend/packages/store/ng-package.json @@ -2,18 +2,6 @@ "$schema": "../../../../node_modules/ng-packagr/ng-package.schema.json", "dest": "../../../../dist/store", "lib": { - "entryFile": "src/public-api.ts", - "umdModuleIds": { - "normalizr": "normalizr", - "rxjs-spy/operators": "rxjsSpy_operators", - "rxjs-spy/operators/tag": "rxjsSpy_operators_tag", - "ngrx-store-localstorage": "ngrxStoreLocalstorage", - "@ngrx/store": "ngrx_store", - "@ngrx/effects": "ngrx_effects", - "immer": "immer", - "util": "util", - "@ngrx/router-store": "ngrx_routerStore", - "moment": "moment" - } + "entryFile": "src/public-api.ts" } } diff --git a/src/frontend/packages/store/package.json b/src/frontend/packages/store/package.json index 0184d8f74d..495bbb4962 100644 --- a/src/frontend/packages/store/package.json +++ b/src/frontend/packages/store/package.json @@ -1,8 +1,11 @@ { "name": "@stratosui/store", "version": "0.0.1", + "description": "Stratos Store", + "license": "Apache-2.0", + "repository": "https://github.com/cloudfoundry/stratos", "peerDependencies": { - "@angular/common": "^6.0.0-rc.0 || ^6.0.0", - "@angular/core": "^6.0.0-rc.0 || ^6.0.0" + "@angular/common": "^9.1.6", + "@angular/core": "^9.1.6" } } \ No newline at end of file diff --git a/src/frontend/packages/store/src/effects/api.effects.ts b/src/frontend/packages/store/src/effects/api.effects.ts index 34ee572143..0321ad554e 100644 --- a/src/frontend/packages/store/src/effects/api.effects.ts +++ b/src/frontend/packages/store/src/effects/api.effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { mergeMap, withLatestFrom } from 'rxjs/operators'; @@ -21,8 +21,8 @@ export class APIEffect { private httpClient: PipelineHttpClient ) { } - @Effect() - apiRequest$ = this.actions$.pipe( + + apiRequest$ = createEffect(() => this.actions$.pipe( ofType(ApiActionTypes.API_REQUEST_START), withLatestFrom(this.store), mergeMap(([action, appState]) => { @@ -41,12 +41,12 @@ export class APIEffect { appState }); }), - ); + )); // Whenever we spot a delete success operation, look to see if the action // fulfils the entity delete requirements and dispatch an entity delete action if it does - @Effect() - apiDeleteRequest$ = this.actions$.pipe( + + apiDeleteRequest$ = createEffect(() => this.actions$.pipe( ofType(RequestTypes.SUCCESS), withLatestFrom(this.store), mergeMap(([action, appState]) => { @@ -59,6 +59,6 @@ export class APIEffect { } return []; }) - ); + )); } diff --git a/src/frontend/packages/store/src/effects/apiKey.effects.ts b/src/frontend/packages/store/src/effects/apiKey.effects.ts index cc65efc001..dd673351eb 100644 --- a/src/frontend/packages/store/src/effects/apiKey.effects.ts +++ b/src/frontend/packages/store/src/effects/apiKey.effects.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, mergeMap, switchMap } from 'rxjs/operators'; @@ -32,7 +32,7 @@ export class ApiKeyEffect { ) { } - @Effect() add = this.actions$.pipe( + add = createEffect(() => this.actions$.pipe( ofType(API_KEY_ADD), mergeMap(action => { const actionType = 'create'; @@ -64,9 +64,9 @@ export class ApiKeyEffect { }) ); }) - ); + )); - @Effect() delete = this.actions$.pipe( + delete = createEffect(() => this.actions$.pipe( ofType(API_KEY_DELETE), mergeMap(action => { const actionType = 'delete'; @@ -90,9 +90,9 @@ export class ApiKeyEffect { }) ); }) - ); + )); - @Effect() getAll = this.actions$.pipe( + getAll = createEffect(() => this.actions$.pipe( ofType(API_KEY_GET_ALL), mergeMap(action => { const actionType = 'fetch'; @@ -123,7 +123,7 @@ export class ApiKeyEffect { }) ); }) - ); + )); private convertErrorToString(err: any): string { // We should look into beefing this up / combining with generic error handling diff --git a/src/frontend/packages/store/src/effects/auth.effects.ts b/src/frontend/packages/store/src/effects/auth.effects.ts index 850c9a5413..bcb11596c6 100644 --- a/src/frontend/packages/store/src/effects/auth.effects.ts +++ b/src/frontend/packages/store/src/effects/auth.effects.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, map, mergeMap, switchMap, tap } from 'rxjs/operators'; @@ -44,7 +44,7 @@ export class AuthEffect { private store: Store, ) { } - @Effect() loginRequest$ = this.actions$.pipe( + loginRequest$ = createEffect(() => this.actions$.pipe( ofType(LOGIN), switchMap(({ username, password }) => { const params = new HttpParams({ @@ -63,9 +63,9 @@ export class AuthEffect { }).pipe( map(data => new VerifySession()), catchError((err, caught) => [new LoginFailed(err)])); - })); + }))); - @Effect() verifyAuth$ = this.actions$.pipe( + verifyAuth$ = createEffect(() => this.actions$.pipe( ofType(VERIFY_SESSION), switchMap(action => { const headers = { @@ -107,24 +107,24 @@ export class AuthEffect { const isDomainMismatch = this.isDomainMismatch(err.headers); return action.login ? [new InvalidSession(setupMode, isUpgrading, isDomainMismatch, ssoOptions)] : [new ResetAuth()]; })); - })); + }))); - @Effect() EndpointsSuccess$ = this.actions$.pipe( + EndpointsSuccess$ = createEffect(() => this.actions$.pipe( ofType(GET_ENDPOINTS_SUCCESS), mergeMap(action => { if (action.login) { return [new LoginSuccess()]; } return []; - })); + }))); - @Effect() invalidSessionAuth$ = this.actions$.pipe( + invalidSessionAuth$ = createEffect(() => this.actions$.pipe( ofType(SESSION_INVALID), map(() => { return new LoginFailed('Invalid session'); - })); + }))); - @Effect() logoutRequest$ = this.actions$.pipe( + logoutRequest$ = createEffect(() => this.actions$.pipe( ofType(LOGOUT), switchMap(() => { return this.http.post('/pp/v1/auth/logout', {}).pipe( @@ -136,22 +136,22 @@ export class AuthEffect { } }), catchError((err, caught) => [new LogoutFailed(err)])); - })); + }))); - @Effect({ dispatch: false }) resetAuth$ = this.actions$.pipe( + resetAuth$ = createEffect(() => this.actions$.pipe( ofType(RESET_AUTH), tap(() => { // Ensure that we clear any path from the location (otherwise would be stored via auth gate as redirectPath for log in) window.location.assign(window.location.origin); - })); + })), { dispatch: false }); - @Effect({ dispatch: false }) resetSSOAuth$ = this.actions$.pipe( + resetSSOAuth$ = createEffect(() => this.actions$.pipe( ofType(RESET_SSO_AUTH), tap(() => { // Ensure that we clear any path from the location (otherwise would be stored via auth gate as redirectPath for log in) const returnUrl = encodeURI(window.location.origin); window.open('/pp/v1/auth/sso_logout?state=' + returnUrl, '_self'); - })); + })), { dispatch: false }); private isDomainMismatch(headers): boolean { if (headers.has(DOMAIN_HEADER)) { diff --git a/src/frontend/packages/store/src/effects/dashboard.effects.ts b/src/frontend/packages/store/src/effects/dashboard.effects.ts index 3e70adb94b..1ecd2aa4ab 100644 --- a/src/frontend/packages/store/src/effects/dashboard.effects.ts +++ b/src/frontend/packages/store/src/effects/dashboard.effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { map } from 'rxjs/operators'; import { HYDRATE_DASHBOARD_STATE, HydrateDashboardStateAction } from '../actions/dashboard-actions'; @@ -14,11 +14,11 @@ export class DashboardEffect { private themeService: ThemeService ) { } - @Effect({ dispatch: false }) hydrate$ = this.actions$.pipe( + hydrate$ = createEffect(() => this.actions$.pipe( ofType(HYDRATE_DASHBOARD_STATE), map(() => { // Ensure the previous theme is applied after dashboard is hydrated this.themeService.initialize(); }) - ); + ), { dispatch: false }); } diff --git a/src/frontend/packages/store/src/effects/endpoint-api-errors.effects.ts b/src/frontend/packages/store/src/effects/endpoint-api-errors.effects.ts index 118abe2282..c64eedd669 100644 --- a/src/frontend/packages/store/src/effects/endpoint-api-errors.effects.ts +++ b/src/frontend/packages/store/src/effects/endpoint-api-errors.effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { map } from 'rxjs/operators'; @@ -18,7 +18,7 @@ export class EndpointApiError { private store: Store, ) { } - @Effect({ dispatch: false }) endpointApiError$ = this.actions$.pipe( + endpointApiError$ = createEffect(() => this.actions$.pipe( ofType(RequestTypes.FAILED), map(action => { const internalEndpointError = action.internalEndpointError; @@ -42,5 +42,5 @@ export class EndpointApiError { ), ); } - })); + })), { dispatch: false }); } diff --git a/src/frontend/packages/store/src/effects/endpoint.effects.ts b/src/frontend/packages/store/src/effects/endpoint.effects.ts index fff7653c04..9d4ad33f9b 100644 --- a/src/frontend/packages/store/src/effects/endpoint.effects.ts +++ b/src/frontend/packages/store/src/effects/endpoint.effects.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, mergeMap } from 'rxjs/operators'; @@ -51,21 +51,21 @@ export class EndpointsEffect { private store: Store ) { } - @Effect() getEndpoint$ = this.actions$.pipe( + getEndpoint$ = createEffect(() => this.actions$.pipe( ofType(GET_ENDPOINT), mergeMap((action: GetEndpoint) => [ stratosEntityCatalog.systemInfo.actions.getSystemInfo(false, action) ]) - ); + )); - @Effect() getAllEndpointsBySystemInfo$ = this.actions$.pipe( + getAllEndpointsBySystemInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_ENDPOINTS), mergeMap((action: GetAllEndpoints) => [ stratosEntityCatalog.systemInfo.actions.getSystemInfo(false, action) ]) - ); + )); - @Effect() getAllEndpoints$ = this.actions$.pipe( + getAllEndpoints$ = createEffect(() => this.actions$.pipe( ofType(GET_SYSTEM_INFO_SUCCESS), mergeMap(action => { const { associatedAction } = action; @@ -98,9 +98,9 @@ export class EndpointsEffect { new WrapperRequestActionSuccess(mappedData, associatedAction, 'fetch'), new GetAllEndpointsSuccess(mappedData, isLogin), ]; - })); + }))); - @Effect() connectEndpoint$ = this.actions$.pipe( + connectEndpoint$ = createEffect(() => this.actions$.pipe( ofType(CONNECT_ENDPOINTS), mergeMap(action => { // Special-case SSO login - redirect to the back-end @@ -151,9 +151,9 @@ export class EndpointsEffect { body, response => httpErrorResponseToSafeString(response) || 'Could not connect, please try again', ); - })); + }))); - @Effect() disconnect$ = this.actions$.pipe( + disconnect$ = createEffect(() => this.actions$.pipe( ofType(DISCONNECT_ENDPOINTS), mergeMap(action => { @@ -167,9 +167,9 @@ export class EndpointsEffect { null, 'DELETE' ); - })); + }))); - @Effect() unregister$ = this.actions$.pipe( + unregister$ = createEffect(() => this.actions$.pipe( ofType(UNREGISTER_ENDPOINTS), mergeMap(action => { return this.doEndpointAction( @@ -182,9 +182,9 @@ export class EndpointsEffect { null, 'DELETE' ); - })); + }))); - @Effect() register$ = this.actions$.pipe( + register$ = createEffect(() => this.actions$.pipe( ofType(REGISTER_ENDPOINTS), mergeMap(action => { @@ -221,9 +221,9 @@ export class EndpointsEffect { body, this.processRegisterError ); - })); + }))); - @Effect() updateEndpoint$ = this.actions$.pipe( + updateEndpoint$ = createEffect(() => this.actions$.pipe( ofType(UPDATE_ENDPOINT), mergeMap((action: UpdateEndpoint) => { const paramsObj = { @@ -250,7 +250,7 @@ export class EndpointsEffect { body, this.processUpdateError ); - })); + }))); private processUpdateError(e: HttpErrorResponse): string { let message = 'There was a problem updating the endpoint. ' + diff --git a/src/frontend/packages/store/src/effects/metrics.effects.ts b/src/frontend/packages/store/src/effects/metrics.effects.ts index 098b0f174c..38a46f3c74 100644 --- a/src/frontend/packages/store/src/effects/metrics.effects.ts +++ b/src/frontend/packages/store/src/effects/metrics.effects.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, map, mergeMap } from 'rxjs/operators'; @@ -25,7 +25,7 @@ export class MetricsEffect { private store: Store ) { } - @Effect() metrics$ = this.actions$.pipe( + metrics$ = createEffect(() => this.actions$.pipe( ofType(METRICS_START), mergeMap(action => { const fullUrl = action.directApi ? action.url : this.buildFullUrl(action); @@ -68,9 +68,9 @@ export class MetricsEffect { ) ]; })); - })); + }))); - @Effect() metricsAPI$ = this.actions$.pipe( + metricsAPI$ = createEffect(() => this.actions$.pipe( ofType(METRIC_API_START), mergeMap(action => { return this.httpClient.get<{ [cfguid: string]: IMetricsResponse }>(action.url, { @@ -88,7 +88,7 @@ export class MetricsEffect { } ]; })); - })); + }))); private buildFullUrl(action: MetricsAction) { return `${action.url}/${action.queryType}?query=${getFullMetricQueryQuery(action.query)}`; diff --git a/src/frontend/packages/store/src/effects/pagination.effects.ts b/src/frontend/packages/store/src/effects/pagination.effects.ts index 5620253eae..f59a1fea25 100644 --- a/src/frontend/packages/store/src/effects/pagination.effects.ts +++ b/src/frontend/packages/store/src/effects/pagination.effects.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { map } from 'rxjs/operators'; @@ -22,12 +22,12 @@ export class PaginationEffects { private store: Store ) { } - @Effect({ dispatch: false }) clearPaginationOnParamChange$ = this.actions$.pipe( + clearPaginationOnParamChange$ = createEffect(() => this.actions$.pipe( ofType(SET_PARAMS, ADD_PARAMS, REMOVE_PARAMS), map(action => { const addAction = action as AddParams; if (!addAction.keepPages) { this.store.dispatch(new ResetPagination(action.entityConfig, action.paginationKey)); } - })); + })), { dispatch: false }); } diff --git a/src/frontend/packages/store/src/effects/permissions.effect.ts b/src/frontend/packages/store/src/effects/permissions.effect.ts index 4678810166..07a20ce155 100644 --- a/src/frontend/packages/store/src/effects/permissions.effect.ts +++ b/src/frontend/packages/store/src/effects/permissions.effect.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Action, Store } from '@ngrx/store'; import { combineLatest, EMPTY, of } from 'rxjs'; import { catchError, map, switchMap } from 'rxjs/operators'; @@ -28,7 +28,7 @@ export class PermissionsEffects { private store: Store, ) { } - @Effect() getCurrentUsersPermissions$ = this.actions$.pipe( + getCurrentUsersPermissions$ = createEffect(() => this.actions$.pipe( ofType(GET_CURRENT_USER_RELATIONS), switchMap(action => { const allRequestsCompleted = entityCatalog.getAllBaseEndpointTypes().reduce((res, endpointType) => { @@ -45,10 +45,10 @@ export class PermissionsEffects { console.warn('Failed to fetch current user permissions: ', err); return of(failedAction); }) - ); + )); - @Effect() getPermissionForNewlyConnectedEndpoint$ = this.actions$.pipe( + getPermissionForNewlyConnectedEndpoint$ = createEffect(() => this.actions$.pipe( ofType(CONNECT_ENDPOINTS_SUCCESS), switchMap(action => { const endpointType = entityCatalog.getEndpoint(action.endpointType); @@ -67,5 +67,5 @@ export class PermissionsEffects { console.warn('Failed to fetch current user permissions after endpoint connected: ', err); return of(failedAction); }) - ); + )); } diff --git a/src/frontend/packages/store/src/effects/recursive-entity-delete.effect.ts b/src/frontend/packages/store/src/effects/recursive-entity-delete.effect.ts index 8cc41df343..70f36a855d 100644 --- a/src/frontend/packages/store/src/effects/recursive-entity-delete.effect.ts +++ b/src/frontend/packages/store/src/effects/recursive-entity-delete.effect.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Action, Store } from '@ngrx/store'; import { map, mergeMap, withLatestFrom } from 'rxjs/operators'; @@ -61,18 +61,18 @@ export class RecursiveDeleteEffect { private store: Store ) { } - @Effect() - delete$ = this.actions$.pipe( + + delete$ = createEffect(() => this.actions$.pipe( ofType(RECURSIVE_ENTITY_DELETE), withLatestFrom(this.store.select(getAPIRequestDataState)), map(([action, state]) => { const tree = this.getTree(action, state); return new SetTreeDeleting(action.guid, tree); }) - ); + )); - @Effect() - deleteComplete$ = this.actions$.pipe( + + deleteComplete$ = createEffect(() => this.actions$.pipe( ofType(RECURSIVE_ENTITY_DELETE_COMPLETE), withLatestFrom(this.store.select(getAPIRequestDataState)), mergeMap(([action, state]) => { @@ -83,17 +83,17 @@ export class RecursiveDeleteEffect { actions.unshift(new SetTreeDeleted(action.guid, tree)); return actions; }) - ); + )); - @Effect() - deleteFailed$ = this.actions$.pipe( + + deleteFailed$ = createEffect(() => this.actions$.pipe( ofType(RECURSIVE_ENTITY_DELETE_FAILED), withLatestFrom(this.store.select(getAPIRequestDataState)), map(([action, state]) => { const tree = this.getTree(action, state); return new ResetTreeDelete(action.guid, tree); }) - ); + )); private getTree(action: IRecursiveDelete, state: GeneralRequestDataState) { const tree = this.entityTreeCache[action.guid] ? diff --git a/src/frontend/packages/store/src/effects/router.effects.ts b/src/frontend/packages/store/src/effects/router.effects.ts index 7bd80c2006..a53b9c7b71 100644 --- a/src/frontend/packages/store/src/effects/router.effects.ts +++ b/src/frontend/packages/store/src/effects/router.effects.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { map, tap } from 'rxjs/operators'; import { RouterActions, RouterNav } from '../actions/router.actions'; @@ -15,8 +15,8 @@ export class RouterEffect { private router: Router ) { } - @Effect({ dispatch: false }) - routerGoUrl$ = this.actions$.pipe( + + routerGoUrl$ = createEffect(() => this.actions$.pipe( ofType(RouterActions.GO), map((action: RouterNav) => action.payload), tap(({ path, query: queryParams, extras = {} }) => { @@ -25,5 +25,5 @@ export class RouterEffect { path = path.split('/'); } this.router.navigate(path, extraParams); - })); + })), { dispatch: false }); } diff --git a/src/frontend/packages/store/src/effects/set-client-filter.effect.ts b/src/frontend/packages/store/src/effects/set-client-filter.effect.ts index fccd7bfa9b..f716337957 100644 --- a/src/frontend/packages/store/src/effects/set-client-filter.effect.ts +++ b/src/frontend/packages/store/src/effects/set-client-filter.effect.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { map } from 'rxjs/operators'; @@ -15,11 +15,11 @@ export class SetClientFilterEffect { private store: Store, ) { } - @Effect({ dispatch: false }) clearPageNumber$ = this.actions$.pipe( + clearPageNumber$ = createEffect(() => this.actions$.pipe( ofType(SET_CLIENT_FILTER), map(action => { // We reset the page when a param is changed. this.store.dispatch(new SetClientPage(action.entityConfig, action.paginationKey, 1)); - })); + })), { dispatch: false }); } diff --git a/src/frontend/packages/store/src/effects/system.effects.ts b/src/frontend/packages/store/src/effects/system.effects.ts index 07eb09bdf5..0eee9faead 100644 --- a/src/frontend/packages/store/src/effects/system.effects.ts +++ b/src/frontend/packages/store/src/effects/system.effects.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, mergeMap } from 'rxjs/operators'; @@ -18,7 +18,7 @@ export class SystemEffects { private store: Store ) { } - @Effect() getInfo$ = this.actions$.pipe( + getInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_SYSTEM_INFO), mergeMap(action => { // Associated action with be either get endpoint or get all endpoints/ @@ -39,5 +39,5 @@ export class SystemEffects { new WrapperRequestActionFailed('Could not fetch system info', action) ]; })); - })); + }))); } diff --git a/src/frontend/packages/store/src/effects/uaa-setup.effects.ts b/src/frontend/packages/store/src/effects/uaa-setup.effects.ts index ea7092d69b..4785da3021 100644 --- a/src/frontend/packages/store/src/effects/uaa-setup.effects.ts +++ b/src/frontend/packages/store/src/effects/uaa-setup.effects.ts @@ -1,6 +1,6 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { catchError, map, switchMap } from 'rxjs/operators'; import { isHttpErrorResponse } from '../jetstream'; @@ -26,7 +26,7 @@ export class UAASetupEffect { getSetupScopesUrl = '/pp/v1/setup/check'; saveSetupUrl = '/pp/v1/setup/save'; - @Effect() setupGetScopes$ = this.actions$.pipe( + setupGetScopes$ = createEffect(() => this.actions$.pipe( ofType(SETUP_GET_SCOPES), switchMap(({ setupData }) => { const params = this.getParams(setupData); @@ -36,9 +36,9 @@ export class UAASetupEffect { map(data => new SetupSuccess(data)), catchError((err, caught) => [new SetupFailed(`Failed to save configuration. ${this.fetchError(err)}`)]) ); - })); + }))); - @Effect() setupSaveConfiguration$ = this.actions$.pipe( + setupSaveConfiguration$ = createEffect(() => this.actions$.pipe( ofType(SETUP_SAVE_CONFIG), switchMap(({ setupData }) => { const params = this.getParams(setupData); @@ -48,7 +48,7 @@ export class UAASetupEffect { map(data => new SetupSuccess(data)), catchError((err, caught) => [new SetupFailed(`Failed to setup Administrator scope. ${this.fetchError(err)}`)]) ); - })); + }))); private fetchError(err): string { const httpResponse = isHttpErrorResponse(err); diff --git a/src/frontend/packages/store/src/effects/user-favorites-effect.ts b/src/frontend/packages/store/src/effects/user-favorites-effect.ts index 26165f8617..51b4cf8e97 100644 --- a/src/frontend/packages/store/src/effects/user-favorites-effect.ts +++ b/src/frontend/packages/store/src/effects/user-favorites-effect.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, first, mergeMap, switchMap, withLatestFrom } from 'rxjs/operators'; @@ -40,7 +40,7 @@ export class UserFavoritesEffect { ) { } - @Effect() saveFavorite = this.actions$.pipe( + saveFavorite = createEffect(() => this.actions$.pipe( ofType(SaveUserFavoriteAction.ACTION_TYPE), mergeMap(action => { const actionType = 'update'; @@ -57,9 +57,9 @@ export class UserFavoritesEffect { }) ); }) - ); + )); - @Effect({ dispatch: false }) getFavorite$ = this.actions$.pipe( + getFavorite$ = createEffect(() => this.actions$.pipe( ofType(GetUserFavoritesAction.ACTION_TYPE), switchMap((action: GetUserFavoritesAction) => { const favEntityKey = entityCatalog.getEntityKey(action); @@ -86,9 +86,9 @@ export class UserFavoritesEffect { }) ); }) - ); + ), { dispatch: false }); - @Effect() toggleFavorite = this.actions$.pipe( + toggleFavorite = createEffect(() => this.actions$.pipe( ofType(ToggleUserFavoriteAction.ACTION_TYPE), mergeMap(action => this.userFavoriteManager.getIsFavoriteObservable(action.favorite).pipe( @@ -102,9 +102,9 @@ export class UserFavoritesEffect { }) ) ) - ); + )); - @Effect({ dispatch: false }) removeFavorite$ = this.actions$.pipe( + removeFavorite$ = createEffect(() => this.actions$.pipe( ofType(RemoveUserFavoriteAction.ACTION_TYPE), mergeMap((action: RemoveUserFavoriteAction) => { const actionType = 'update'; @@ -122,9 +122,9 @@ export class UserFavoritesEffect { }) ); }) - ); + ), { dispatch: false }); - @Effect() updateMetadata$ = this.actions$.pipe( + updateMetadata$ = createEffect(() => this.actions$.pipe( ofType(UpdateUserFavoriteMetadataAction.ACTION_TYPE), mergeMap((action: UpdateUserFavoriteMetadataAction) => { const actionType = 'update'; @@ -144,10 +144,10 @@ export class UserFavoritesEffect { }) ); }) - ); + )); - @Effect() - entityDeleteRequest$ = this.actions$.pipe( + + entityDeleteRequest$ = createEffect(() => this.actions$.pipe( ofType(EntityDeleteCompleteAction.ACTION_TYPE), withLatestFrom(this.store), mergeMap(([action, appState]) => { @@ -159,6 +159,6 @@ export class UserFavoritesEffect { } return []; }) - ); + )); } diff --git a/src/frontend/packages/store/src/effects/user-profile.effects.ts b/src/frontend/packages/store/src/effects/user-profile.effects.ts index 9c010fee57..9c07e51fd8 100644 --- a/src/frontend/packages/store/src/effects/user-profile.effects.ts +++ b/src/frontend/packages/store/src/effects/user-profile.effects.ts @@ -1,6 +1,6 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; +import { Actions, createEffect, ofType } from '@ngrx/effects'; import { Store } from '@ngrx/store'; import { catchError, mergeMap, switchMap } from 'rxjs/operators'; @@ -28,7 +28,7 @@ export class UserProfileEffect { private httpClient: HttpClient, ) { } - @Effect() getUserProfileInfo$ = this.actions$.pipe( + getUserProfileInfo$ = createEffect(() => this.actions$.pipe( ofType(GET_USERPROFILE), mergeMap(action => { this.store.dispatch(new StartRequestAction(action)); @@ -44,9 +44,9 @@ export class UserProfileEffect { new WrapperRequestActionFailed('Could not get User Profile Info', action), ]) ); - })); + }))); - @Effect() updateUserProfileInfo$ = this.actions$.pipe( + updateUserProfileInfo$ = createEffect(() => this.actions$.pipe( ofType(UPDATE_USERPROFILE), mergeMap((action: UpdateUserProfileAction) => { this.store.dispatch(new StartRequestAction(action, 'update')); @@ -69,9 +69,9 @@ export class UserProfileEffect { catchError((e) => [ new WrapperRequestActionFailed('Could not update User Profile Info', action), ])); - })); + }))); - @Effect() updateUserPassword$ = this.actions$.pipe( + updateUserPassword$ = createEffect(() => this.actions$.pipe( ofType(UPDATE_USERPASSWORD), mergeMap((action: UpdateUserPasswordAction) => { this.store.dispatch(new StartRequestAction(action, 'update')); @@ -93,5 +93,5 @@ export class UserProfileEffect { new WrapperRequestActionFailed('Could not update User Password', action), ]) ); - })); + }))); } diff --git a/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity.ts b/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity.ts index 516dc0b6ce..c4db4b6682 100644 --- a/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity.ts +++ b/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity.ts @@ -36,9 +36,12 @@ import { import { ActionBuilderConfigMapper } from './action-builder-config.mapper'; import { ActionDispatchers, EntityCatalogEntityStoreHelpers } from './entity-catalog-entity-store-helpers'; import { EntityCatalogEntityStore } from './entity-catalog-entity.types'; -import { KnownKeys, NonOptionalKeys } from './type.helpers'; +import { NonOptionalKeys, RemoveIndex } from './type.helpers'; -export type KnownActionBuilders = Pick>>>; +export type KnownActionBuilders = Pick< + ABC, + NonOptionalKeys> +>; export interface EntityCatalogBuilders< T extends IEntityMetadata = IEntityMetadata, diff --git a/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity.types.ts b/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity.types.ts index ba490b0d57..32d37f490d 100644 --- a/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity.types.ts +++ b/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/entity-catalog-entity.types.ts @@ -4,7 +4,7 @@ import { PaginationMonitor } from '../../monitors/pagination-monitor'; import { PaginationObservables } from '../../reducers/pagination-reducer/pagination-reducer.types'; import { PaginatedAction } from '../../types/pagination.types'; import { OrchestratedActionBuilders, OrchestratedActionCoreBuilders } from '../action-orchestrator/action-orchestrator'; -import { FilteredByNotReturnType, FilteredByReturnType, KnownKeys, NeverKeys } from './type.helpers'; +import { FilteredByNotReturnType, FilteredByReturnType, NeverKeys, RemoveIndex } from './type.helpers'; /** @@ -46,7 +46,10 @@ export interface CoreEntityCatalogEntityStore = Omit>, keyof OrchestratedActionCoreBuilders>; +type CustomBuilders = Omit< + RemoveIndex, + keyof OrchestratedActionCoreBuilders +>; /** * Mark builders that don't return a pagination action as `never` diff --git a/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/type.helpers.ts b/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/type.helpers.ts index bfda3b93fa..3f30102d17 100644 --- a/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/type.helpers.ts +++ b/src/frontend/packages/store/src/entity-catalog/entity-catalog-entity/type.helpers.ts @@ -4,43 +4,67 @@ * - https://github.com/Microsoft/TypeScript/issues/25987#issuecomment-441224690 * - https://github.com/Microsoft/TypeScript/issues/12215#issuecomment-414808995 */ -export type KnownKeys = { - [K in keyof T]: string extends K ? never : number extends K ? never : K -} extends { [_ in keyof T]: infer U } ? ({} extends U ? never : U) : never; +export type KnownKeys = keyof { + [K in keyof T as string extends K ? never : number extends K ? never : K]: never +} -export type NonOptionalKeys = Exclude<{ - [K in keyof T]: T extends Record - ? K - : never -}[keyof T], undefined>; +export type NonOptionalKeys = Exclude< + { + [K in keyof T]: T extends Record ? K : never; + }[keyof T], + undefined +>; -export type OptionalKeys = Exclude<{ - [K in keyof T]: T extends Record - ? K - : never -}[keyof T], undefined>; +export type RemoveIndex = { + [ K in keyof T as + string extends K + ? never + : number extends K + ? never + : symbol extends K + ? never + : K + ] : T[K]; +}; + +export type OptionalKeys = Exclude< + { + [K in keyof T]: T extends Record ? K : never; + }[keyof T], + undefined +>; -export type NeverKeys = Exclude<{ - [K in keyof T]: T[K] extends never - ? K - : never -}[keyof T], undefined>; +export type NeverKeys = Exclude< + { + [K in keyof T]: T[K] extends never ? K : never; + }[keyof T], + undefined +>; /** * Pick all properties who's function has the specified return type U */ -export type FilteredByReturnType any; }, U> = { - [P in keyof T]: ReturnType extends U ? T[P] : never +export type FilteredByReturnType< + T extends { [key: string]: (...args: any[]) => any }, + U +> = { + [P in keyof T]: ReturnType extends U ? T[P] : never; }; /** * Pick all properties who's function do not have the specified return type U */ -export type FilteredByNotReturnType any; }, U> = { - [P in keyof T]: ReturnType extends U ? never : T[P] +export type FilteredByNotReturnType< + T extends { [key: string]: (...args: any[]) => any }, + U +> = { + [P in keyof T]: ReturnType extends U ? never : T[P]; }; // Note - Adding }[keyof T] to [P in keyof T] types should filter out properties of type `never`, however this fails with generics! -export type FilteredByValueType any; }, U> = { - [P in keyof T]: T[P] extends U ? never : T[P] +export type FilteredByValueType< + T extends { [key: string]: (...args: any[]) => any }, + U +> = { + [P in keyof T]: T[P] extends U ? never : T[P]; }; diff --git a/src/frontend/packages/store/src/extension-types.ts b/src/frontend/packages/store/src/extension-types.ts index 8ad80bd160..a5ecba8a0c 100644 --- a/src/frontend/packages/store/src/extension-types.ts +++ b/src/frontend/packages/store/src/extension-types.ts @@ -1,5 +1,5 @@ import { Type } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { Schema, schema } from 'normalizr'; // Allowable endpoint types @@ -24,7 +24,7 @@ export interface EndpointAuthTypeConfig { * Interface that an Endpoint Auth Form Component must implement */ export interface IAuthForm { - formGroup: FormGroup; + formGroup: UntypedFormGroup; /** * Generic property for any additional config */ diff --git a/src/frontend/packages/store/src/public-api.ts b/src/frontend/packages/store/src/public-api.ts index e85473177c..c00a1f066c 100644 --- a/src/frontend/packages/store/src/public-api.ts +++ b/src/frontend/packages/store/src/public-api.ts @@ -5,21 +5,11 @@ // Helpers export * from './helpers/store-helpers'; -// App State -export { AppState } from './app-state'; - // Used by store testing module -export { CATALOGUE_ENTITIES, EntityCatalogFeatureModule } from './entity-catalog.module'; -export { entityCatalog, TestEntityCatalog } from './entity-catalog/entity-catalog'; -export { EntityCatalogEntityConfig } from './entity-catalog/entity-catalog.types'; -export { endpointEntityType, stratosEntityFactory } from './helpers/stratos-entity-factory'; -export { appReducers } from './reducers.module'; -export { getDefaultRequestState, rootUpdatingKey } from './reducers/api-request-reducer/types'; +export { getDefaultRequestState } from './reducers/api-request-reducer/types'; export { getDefaultPaginationEntityState } from './reducers/pagination-reducer/pagination-reducer-reset-pagination'; -export { NormalizedResponse } from './types/api.types'; -export { SessionData, SessionDataEndpoint } from './types/auth.types'; +export { SessionDataEndpoint } from './types/auth.types'; export { getDefaultRolesRequestState } from './types/current-user-roles.types'; -export { EndpointModel } from './types/endpoint.types'; export { BaseEntityValues } from './types/entity.types'; export { WrapperRequestActionSuccess } from './types/request.types'; @@ -27,3 +17,149 @@ export { flattenPagination, PaginationFlattener } from './helpers/paginated-requ // Operators export { entityFetchedWithoutError } from './operators'; + +// Auto-generated from fiximports tool + +export { EntityCatalogHelpers } from './entity-catalog/entity-catalog.helper'; +export { EntityPipelineEntity } from './entity-request-pipeline/pipeline.types'; +export { + AppState, + AuthOnlyAppState, + DashboardOnlyAppState, + EndpointOnlyAppState, + GeneralAppState, + GeneralEntityAppState, + GeneralRequestDataState, + IRequestEntityTypeState, + InternalAppState, +} from './app-state'; +export { ThemeService } from './theme.service'; +export { internalEventStateSelector } from './selectors/internal-events.selectors'; +export { Login, Logout, VerifySession } from './actions/auth.actions'; +export { SetDashboardStateValueAction } from './actions/dashboard-actions'; +export { LocalPaginationHelpers } from './helpers/local-list.helpers'; +export { getPaginationObservables } from './reducers/pagination-reducer/pagination-reducer.helper'; +export { ApiKey } from './apiKey.types'; +export { MultiActionListEntity, PaginationMonitor } from './monitors/pagination-monitor'; +export { selectDashboardState, selectIsMobile } from './selectors/dashboard.selectors'; +export { DashboardState } from './types/dashboard.types'; +export { + PaginationPageIteratorConfig, +} from './entity-request-pipeline/pagination-request-base-handlers/pagination-iterator.pipe'; +export { + STRATOS_ENDPOINT_TYPE, + endpointEntityType, + stratosEntityFactory, + userFavouritesEntityType, +} from './helpers/stratos-entity-factory'; +export { SetupConsoleGetScopes, SetupSaveConfig } from './actions/setup.actions'; +export { MetricQueryType } from './types/metric.types'; +export { CATALOGUE_ENTITIES, EntityCatalogFeatureModule, EntityCatalogModule } from './entity-catalog.module'; +export { EntityServiceFactory } from './entity-service-factory.service'; +export { MetricsAPIAction, MetricsAPITargets, MetricsStratosAction } from './actions/metrics-api.actions'; +export { ListFilter, ListPagination, ListSort, ListView, SetListViewAction } from './actions/list.actions'; +export { AppStoreModule } from './store.module'; +export { getAPIRequestDataState, selectEntity } from './selectors/api.selectors'; +export { AuthState, selectSessionData } from './reducers/auth.reducer'; +export { + CloseSideNav, + DisableMobileNav, + EnableMobileNav, + SetGravatarEnabledAction, + SetPollingEnabledAction, + SetSessionTimeoutAction, + SetHomeCardLayoutAction, + ToggleSideNav, +} from './actions/dashboard-actions'; +export { InternalEventMonitorFactory } from './monitors/internal-event-monitor.factory'; +export { ComponentEntityMonitorConfig, StratosStatus, StratosStatusMetadata } from './types/shared.types'; +export { + StratosBaseCatalogEntity, + StratosCatalogEndpointEntity, + StratosCatalogEntity, +} from './entity-catalog/entity-catalog-entity/entity-catalog-entity'; +export { SendClearEndpointEventsAction } from './actions/internal-events.actions'; +export { getFavoriteInfoObservable } from './helpers/store-helpers'; +export { + JetStreamErrorResponse, + cfAPIVersion, + httpErrorResponseToSafeString, + isHttpErrorResponse, + proxyAPIVersion, +} from './jetstream'; +export { getPreviousRoutingState } from './types/routing.type'; +export { IFavoriteMetadata, IFavoritesInfo, UserFavorite, UserFavoriteEndpoint, IEndpointFavMetadata } from './types/user-favorites.types'; +export { AddRecentlyVisitedEntityAction, SetRecentlyVisitedEntityAction } from './actions/recently-visited.actions'; +export { UserFavoriteManager } from './user-favorite-manager'; +export { TestEntityCatalog, entityCatalog } from './entity-catalog/entity-catalog'; +export { InternalEventSeverity, InternalEventState } from './types/internal-events.types'; +export { + AddParams, + CreatePagination, + IgnorePaginationMaxedState, + SetClientFilter, + SetClientFilterKey, + SetClientPage, + SetClientPageSize, + SetPage, + SetResultCount, + ResetPagination, + ResetPaginationSortFilter, +} from './actions/pagination.actions'; +export { EntityMonitorFactory } from './monitors/entity-monitor.factory.service'; +export { UserProfileInfo, UserProfileInfoEmail, UserProfileInfoUpdates } from './types/user-profile.types'; +export { BrowserStandardEncoder } from './browser-encoder'; +export { IUserFavoritesGroups } from './types/favorite-groups.types'; +export { getEndpointIDFromFavorite } from './user-favorite-helpers'; +export { MenuItem } from './types/menu-item.types'; +export { IRecentlyVisitedEntity } from './types/recently-visited.types'; +export { recentlyVisitedSelector } from './selectors/recently-visitied.selectors'; +export { IRouterNavPayload, RouterNav } from './actions/router.actions'; +export { PaginationMonitorFactory } from './monitors/pagination-monitor.factory'; +export { EndpointAuthTypeConfig, EndpointType, IAuthForm, IEndpointAuthComponent } from './extension-types'; +export { + endpointEntitiesSelector, + endpointStatusSelector, + endpointsEntityRequestDataSelector, +} from './selectors/endpoint.selectors'; +export { EntityMonitor } from './monitors/entity-monitor'; +export { + EndpointHealthCheck, + EntityCatalogEntityConfig, + EntityCatalogSchemas, + IStratosEndpointDefinition, +} from './entity-catalog/entity-catalog.types'; +export { EntityService } from './entity-service'; +export { APIResource, EntityInfo, NormalizedResponse } from './types/api.types'; +export { getFullEndpointApiUrl } from './endpoint-utils'; +export { PaginatedAction, PaginationClientFilter, PaginationEntityState, PaginationParam } from './types/pagination.types'; +export { MAX_RECENT_COUNT } from './reducers/current-user-roles-reducer/recently-visited.reducer.helpers'; +export { ActionState, RequestInfoState, getDefaultActionState, rootUpdatingKey } from './reducers/api-request-reducer/types'; +export { GetCurrentUsersRelations } from './actions/permissions.actions'; +export { EndpointModel, EndpointState, SystemSharedUserGuid } from './types/endpoint.types'; +export { stratosEntityCatalog } from './stratos-entity-catalog'; +export { EntityCatalogHelper } from './entity-catalog/entity-catalog-entity/entity-catalog.service'; +export { + PermissionValues, + getCurrentUserStratosHasScope, + getCurrentUserStratosRole, +} from './selectors/current-user-role.selectors'; +export { APIKeysEnabled, SessionData } from './types/auth.types'; +export { RouterRedirect } from './reducers/routing.reducer'; +export { LocalAdminSetupData, UAASetupState } from './types/uaa-setup.types'; +export { GetAllApiKeys } from './actions/apiKey.actions'; +export { getListStateObservables } from './reducers/list.reducer'; +export { AuthParams, ConnectEndpoint, DisconnectEndpoint, GetAllEndpoints } from './actions/endpoint.actions'; +export { EntitySchema } from './helpers/entity-schema'; +export { + ChartSeries, + IMetricMatrixResult, + IMetrics, + IMetricsData, + MetricResultTypes, + MetricsFilterSeries, +} from './types/base-metric.types'; +export { generateStratosEntities } from './stratos-entity-generator'; +export { MetricQueryConfig, MetricsAction } from './actions/metrics.actions'; +export { defaultClientPaginationPageSize } from './reducers/pagination-reducer/pagination-reducer-reset-pagination'; +export { appReducers } from './reducers.module'; diff --git a/src/frontend/packages/store/src/reducers/api-request-reducers.generator.helpers.ts b/src/frontend/packages/store/src/reducers/api-request-reducers.generator.helpers.ts index c04bd8ea34..d1c1b869ee 100644 --- a/src/frontend/packages/store/src/reducers/api-request-reducers.generator.helpers.ts +++ b/src/frontend/packages/store/src/reducers/api-request-reducers.generator.helpers.ts @@ -20,7 +20,7 @@ export function chainApiReducers( ) { return (state: Record, action: Action) => produce( state, - draftState => Object.keys(extraReducers).reduce((baseState, entityKey) => { + (draftState: Record) => Object.keys(extraReducers).reduce((baseState, entityKey) => { const reducers = extraReducers[entityKey]; baseState[entityKey] = reducers.reduce((entityState, entityReducer) => { return entityReducer(entityState, action); @@ -35,7 +35,7 @@ export function chainReducers( ) { return (state: Record, action: Action) => produce( state, - draftState => Object.keys(extraReducers).reduce((baseState, entityKey) => { + (draftState: Record) => Object.keys(extraReducers).reduce((baseState, entityKey) => { const reducers = extraReducers[entityKey]; baseState[entityKey] = reducers.reduce((entityState, entityReducer) => { return entityReducer(entityState, action); diff --git a/src/frontend/packages/store/src/test.ts b/src/frontend/packages/store/src/test.ts index f205020844..db08d2e9fd 100644 --- a/src/frontend/packages/store/src/test.ts +++ b/src/frontend/packages/store/src/test.ts @@ -1,7 +1,7 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files import 'core-js/es/reflect'; -import 'zone.js/dist/zone'; -import 'zone.js/dist/zone-testing'; +import 'zone.js'; +import 'zone.js/testing'; import { APP_BASE_HREF } from '@angular/common'; import { getTestBed } from '@angular/core/testing'; @@ -14,7 +14,9 @@ declare const require: any; const testBed = getTestBed(); testBed.initTestEnvironment( BrowserDynamicTestingModule, - platformBrowserDynamicTesting() + platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false } +} ); beforeEach(() => { diff --git a/src/frontend/packages/store/testing/ng-package.json b/src/frontend/packages/store/testing/ng-package.json index f5e468c9b5..bfa6b062cf 100644 --- a/src/frontend/packages/store/testing/ng-package.json +++ b/src/frontend/packages/store/testing/ng-package.json @@ -2,9 +2,6 @@ "$schema": "../../../../../node_modules/ng-packagr/ng-package.schema.json", "dest": "../../../../dist/store/testing", "lib": { - "entryFile": "public-api.ts", - "umdModuleIds": { - "@ngrx/store": "ngrx_store" - } + "entryFile": "public-api.ts" } } \ No newline at end of file diff --git a/src/frontend/packages/store/tsconfig.lib.json b/src/frontend/packages/store/tsconfig.lib.json index 1dc99824ea..1ace645d3b 100644 --- a/src/frontend/packages/store/tsconfig.lib.json +++ b/src/frontend/packages/store/tsconfig.lib.json @@ -1,6 +1,8 @@ { "extends": "../../../tsconfig.lib.json", "compilerOptions": { + "declaration": true, + "declarationMap": true, "outDir": "../../../../out-tsc" }, "exclude": ["./src/test.ts", "**/*.spec.ts"] diff --git a/src/frontend/packages/store/tsconfig.lib.prod.json b/src/frontend/packages/store/tsconfig.lib.prod.json index b1d501abbc..a83f1ff433 100644 --- a/src/frontend/packages/store/tsconfig.lib.prod.json +++ b/src/frontend/packages/store/tsconfig.lib.prod.json @@ -1,6 +1,10 @@ { "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declaration": false, + "declarationMap": false + }, "angularCompilerOptions": { - "enableIvy": false + "compilationMode": "partial" } } \ No newline at end of file diff --git a/src/frontend/packages/theme/_helper.scss b/src/frontend/packages/theme/_helper.scss index 24d0462153..8a7074adf5 100644 --- a/src/frontend/packages/theme/_helper.scss +++ b/src/frontend/packages/theme/_helper.scss @@ -1,7 +1,7 @@ // Stratos Theme Helper @use "sass:color"; -@import '~@angular/material/theming'; +@import '@angular/material/theming'; @import './mat-themes'; @import './mat-colors'; diff --git a/src/frontend/packages/theme/package.json b/src/frontend/packages/theme/package.json index c8e9cce11c..5cdebd4132 100644 --- a/src/frontend/packages/theme/package.json +++ b/src/frontend/packages/theme/package.json @@ -1,6 +1,9 @@ { "name": "@stratosui/theme", "version": "0.0.1", + "description": "Stratos Theme", + "license": "Apache-2.0", + "repository": "https://github.com/cloudfoundry/stratos", "stratos": { "assets": { "assets/core": "core/assets", diff --git a/src/jetstream/repository/interfaces/apikeys.go b/src/jetstream/api/apikeys.go similarity index 93% rename from src/jetstream/repository/interfaces/apikeys.go rename to src/jetstream/api/apikeys.go index a0ead69e35..31c9d785d7 100644 --- a/src/jetstream/repository/interfaces/apikeys.go +++ b/src/jetstream/api/apikeys.go @@ -1,4 +1,4 @@ -package interfaces +package api import "time" diff --git a/src/jetstream/repository/interfaces/auth.go b/src/jetstream/api/auth.go similarity index 83% rename from src/jetstream/repository/interfaces/auth.go rename to src/jetstream/api/auth.go index e43f67a9db..39e0afee96 100644 --- a/src/jetstream/repository/interfaces/auth.go +++ b/src/jetstream/api/auth.go @@ -1,4 +1,4 @@ -package interfaces +package api import "github.com/labstack/echo/v4" @@ -7,7 +7,7 @@ const ( DefaultAdminUserName = "admin" ) -//StratosAuth provides common access to Stratos login/logout functionality +// StratosAuth provides common access to Stratos login/logout functionality type StratosAuth interface { ShowConfig(config *ConsoleConfig) Login(c echo.Context) error diff --git a/src/jetstream/repository/interfaces/cnsis.go b/src/jetstream/api/cnsis.go similarity index 97% rename from src/jetstream/repository/interfaces/cnsis.go rename to src/jetstream/api/cnsis.go index d142e689d7..e39ae69d5f 100644 --- a/src/jetstream/repository/interfaces/cnsis.go +++ b/src/jetstream/api/cnsis.go @@ -1,4 +1,4 @@ -package interfaces +package api // EndpointRepository is an application of the repository pattern for storing CNSI Records type EndpointRepository interface { diff --git a/src/jetstream/repository/interfaces/config/config.go b/src/jetstream/api/config/config.go similarity index 98% rename from src/jetstream/repository/interfaces/config/config.go rename to src/jetstream/api/config/config.go index 4d8fb46fb1..b2804cc7b4 100644 --- a/src/jetstream/repository/interfaces/config/config.go +++ b/src/jetstream/api/config/config.go @@ -96,11 +96,11 @@ var urlType *url.URL // not attempt to look anything up. This is contrary to most serialization // libraries like JSON which require a "-" struct tag to bypass deserialization. // -// type A struct { -// Port uint `configName:"PORT"` -// Name string `configName:"SERVICE_NAME"` -// Struct *myType -// } +// type A struct { +// Port uint `configName:"PORT"` +// Name string `configName:"SERVICE_NAME"` +// Struct *myType +// } // // The name will be given as defined to Getenv, and if that fails a lookup // it's name is then munged to conform to the /etc/secrets filename structure diff --git a/src/jetstream/repository/interfaces/endpoints.go b/src/jetstream/api/endpoints.go similarity index 98% rename from src/jetstream/repository/interfaces/endpoints.go rename to src/jetstream/api/endpoints.go index 7d2388fb4f..8fea724413 100644 --- a/src/jetstream/repository/interfaces/endpoints.go +++ b/src/jetstream/api/endpoints.go @@ -1,4 +1,4 @@ -package interfaces +package api import ( "github.com/labstack/echo/v4" diff --git a/src/jetstream/repository/interfaces/errors.go b/src/jetstream/api/errors.go similarity index 98% rename from src/jetstream/repository/interfaces/errors.go rename to src/jetstream/api/errors.go index b41330161e..33d49734fd 100644 --- a/src/jetstream/repository/interfaces/errors.go +++ b/src/jetstream/api/errors.go @@ -1,4 +1,4 @@ -package interfaces +package api import ( "encoding/json" diff --git a/src/jetstream/repository/interfaces/general.go b/src/jetstream/api/general.go similarity index 91% rename from src/jetstream/repository/interfaces/general.go rename to src/jetstream/api/general.go index c0ac8a24b2..2ebfc81ca4 100644 --- a/src/jetstream/repository/interfaces/general.go +++ b/src/jetstream/api/general.go @@ -1,4 +1,4 @@ -package interfaces +package api import "github.com/labstack/echo/v4" diff --git a/src/jetstream/api/go.mod b/src/jetstream/api/go.mod new file mode 100644 index 0000000000..acfe2af329 --- /dev/null +++ b/src/jetstream/api/go.mod @@ -0,0 +1,29 @@ +module github.com/cloudfoundry-incubator/stratos/src/jetstream/api + +go 1.21.0 + +require ( + github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces v0.0.0-20191015083202-4c24d26ae1ec + github.com/gorilla/sessions v1.2.1 + github.com/gorilla/websocket v1.5.0 + github.com/govau/cf-common v0.0.7 + github.com/labstack/echo/v4 v4.11.1 + github.com/sirupsen/logrus v1.9.3 +) + +require ( + github.com/cloudfoundry-community/go-cfenv v1.17.0 // indirect + github.com/gorilla/securecookie v1.1.1 // indirect + github.com/labstack/gommon v0.4.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mitchellh/mapstructure v1.1.2 // indirect + github.com/onsi/ginkgo v1.16.5 // indirect + github.com/onsi/gomega v1.27.10 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect + golang.org/x/crypto v0.11.0 // indirect + golang.org/x/net v0.12.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect +) diff --git a/src/jetstream/api/go.sum b/src/jetstream/api/go.sum new file mode 100644 index 0000000000..0700028636 --- /dev/null +++ b/src/jetstream/api/go.sum @@ -0,0 +1,148 @@ +github.com/cloudfoundry-community/go-cfenv v1.17.0 h1:qfxEfn8qKkaHY3ZEk/Y2noY79HBASvNgmtHK9x4+6GY= +github.com/cloudfoundry-community/go-cfenv v1.17.0/go.mod h1:2UgWvQTRXUuIZ/x3KnW6fk6CgPBhcV4UQb/UGIrUyyI= +github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces v0.0.0-20191015083202-4c24d26ae1ec h1:tqPgLDgcslmjOxR5vKMmO/C3saEnxPgLJ04GRkGWtjQ= +github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces v0.0.0-20191015083202-4c24d26ae1ec/go.mod h1:iHH60YxCMwZHKbsAokvNrWvvrhyrWosFpDLtQ1R1zYE= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/govau/cf-common v0.0.7 h1:uhp1P6XM6GGzu1+A4C7LELLX/9mCmH6W5DpJZC0kWmo= +github.com/govau/cf-common v0.0.7/go.mod h1:5xL/OfE7wxeyHlXb7iei0rAbdQ/5v6dF18BZknPv7NQ= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= +github.com/labstack/echo/v4 v4.11.1 h1:dEpLU2FLg4UVmvCGPuk/APjlH6GDpbEPti61srUUUs4= +github.com/labstack/echo/v4 v4.11.1/go.mod h1:YuYRTSM3CHs2ybfrL8Px48bO6BAnYIN4l8wSTMP6BDQ= +github.com/labstack/gommon v0.2.8/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4= +github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.6/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v0.0.0-20170224212429-dcecefd839c4/go.mod h1:50wTf68f99/Zt14pr046Tgt3Lp2vLyFZKzbFXTOabXw= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/src/jetstream/repository/interfaces/jetstream_error.go b/src/jetstream/api/jetstream_error.go similarity index 99% rename from src/jetstream/repository/interfaces/jetstream_error.go rename to src/jetstream/api/jetstream_error.go index fa2658e5ae..ef8d21dced 100644 --- a/src/jetstream/repository/interfaces/jetstream_error.go +++ b/src/jetstream/api/jetstream_error.go @@ -1,4 +1,4 @@ -package interfaces +package api import ( "encoding/json" diff --git a/src/jetstream/repository/interfaces/localuser.go b/src/jetstream/api/localuser.go similarity index 94% rename from src/jetstream/repository/interfaces/localuser.go rename to src/jetstream/api/localuser.go index 94f149c8f6..0e3c1fea45 100644 --- a/src/jetstream/repository/interfaces/localuser.go +++ b/src/jetstream/api/localuser.go @@ -1,4 +1,4 @@ -package interfaces +package api // LocalUser - Used for local user auth and management type LocalUser struct { diff --git a/src/jetstream/repository/mock_interfaces/mock_auth.go b/src/jetstream/api/mock/mock_auth.go similarity index 73% rename from src/jetstream/repository/mock_interfaces/mock_auth.go rename to src/jetstream/api/mock/mock_auth.go index 73f4b7699d..ed587b287c 100644 --- a/src/jetstream/repository/mock_interfaces/mock_auth.go +++ b/src/jetstream/api/mock/mock_auth.go @@ -1,68 +1,68 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: repository/interfaces/auth.go +// Source: api/auth.go -// Package mock_interfaces is a generated GoMock package. -package mock_interfaces +// Package mock_api is a generated GoMock package. +package mock_api import ( - interfaces "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + reflect "reflect" + + api "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" gomock "github.com/golang/mock/gomock" echo "github.com/labstack/echo/v4" - reflect "reflect" ) -// MockStratosAuth is a mock of StratosAuth interface +// MockStratosAuth is a mock of StratosAuth interface. type MockStratosAuth struct { ctrl *gomock.Controller recorder *MockStratosAuthMockRecorder } -// MockStratosAuthMockRecorder is the mock recorder for MockStratosAuth +// MockStratosAuthMockRecorder is the mock recorder for MockStratosAuth. type MockStratosAuthMockRecorder struct { mock *MockStratosAuth } -// NewMockStratosAuth creates a new mock instance +// NewMockStratosAuth creates a new mock instance. func NewMockStratosAuth(ctrl *gomock.Controller) *MockStratosAuth { mock := &MockStratosAuth{ctrl: ctrl} mock.recorder = &MockStratosAuthMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use +// EXPECT returns an object that allows the caller to indicate expected use. func (m *MockStratosAuth) EXPECT() *MockStratosAuthMockRecorder { return m.recorder } -// Login mocks base method -func (m *MockStratosAuth) Login(c echo.Context) error { +// BeforeVerifySession mocks base method. +func (m *MockStratosAuth) BeforeVerifySession(c echo.Context) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Login", c) - ret0, _ := ret[0].(error) - return ret0 + m.ctrl.Call(m, "BeforeVerifySession", c) } -// Login indicates an expected call of Login -func (mr *MockStratosAuthMockRecorder) Login(c interface{}) *gomock.Call { +// BeforeVerifySession indicates an expected call of BeforeVerifySession. +func (mr *MockStratosAuthMockRecorder) BeforeVerifySession(c interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Login", reflect.TypeOf((*MockStratosAuth)(nil).Login), c) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BeforeVerifySession", reflect.TypeOf((*MockStratosAuth)(nil).BeforeVerifySession), c) } -// Logout mocks base method -func (m *MockStratosAuth) Logout(c echo.Context) error { +// GetUser mocks base method. +func (m *MockStratosAuth) GetUser(userGUID string) (*api.ConnectedUser, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Logout", c) - ret0, _ := ret[0].(error) - return ret0 + ret := m.ctrl.Call(m, "GetUser", userGUID) + ret0, _ := ret[0].(*api.ConnectedUser) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// Logout indicates an expected call of Logout -func (mr *MockStratosAuthMockRecorder) Logout(c interface{}) *gomock.Call { +// GetUser indicates an expected call of GetUser. +func (mr *MockStratosAuthMockRecorder) GetUser(userGUID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Logout", reflect.TypeOf((*MockStratosAuth)(nil).Logout), c) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUser", reflect.TypeOf((*MockStratosAuth)(nil).GetUser), userGUID) } -// GetUsername mocks base method +// GetUsername mocks base method. func (m *MockStratosAuth) GetUsername(userGUID string) (string, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetUsername", userGUID) @@ -71,61 +71,62 @@ func (m *MockStratosAuth) GetUsername(userGUID string) (string, error) { return ret0, ret1 } -// GetUsername indicates an expected call of GetUsername +// GetUsername indicates an expected call of GetUsername. func (mr *MockStratosAuthMockRecorder) GetUsername(userGUID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUsername", reflect.TypeOf((*MockStratosAuth)(nil).GetUsername), userGUID) } -// GetUser mocks base method -func (m *MockStratosAuth) GetUser(userGUID string) (*interfaces.ConnectedUser, error) { +// Login mocks base method. +func (m *MockStratosAuth) Login(c echo.Context) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetUser", userGUID) - ret0, _ := ret[0].(*interfaces.ConnectedUser) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "Login", c) + ret0, _ := ret[0].(error) + return ret0 } -// GetUser indicates an expected call of GetUser -func (mr *MockStratosAuthMockRecorder) GetUser(userGUID interface{}) *gomock.Call { +// Login indicates an expected call of Login. +func (mr *MockStratosAuthMockRecorder) Login(c interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUser", reflect.TypeOf((*MockStratosAuth)(nil).GetUser), userGUID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Login", reflect.TypeOf((*MockStratosAuth)(nil).Login), c) } -// VerifySession mocks base method -func (m *MockStratosAuth) VerifySession(c echo.Context, sessionUser string, sessionExpireTime int64) error { +// Logout mocks base method. +func (m *MockStratosAuth) Logout(c echo.Context) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "VerifySession", c, sessionUser, sessionExpireTime) + ret := m.ctrl.Call(m, "Logout", c) ret0, _ := ret[0].(error) return ret0 } -// VerifySession indicates an expected call of VerifySession -func (mr *MockStratosAuthMockRecorder) VerifySession(c, sessionUser, sessionExpireTime interface{}) *gomock.Call { +// Logout indicates an expected call of Logout. +func (mr *MockStratosAuthMockRecorder) Logout(c interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifySession", reflect.TypeOf((*MockStratosAuth)(nil).VerifySession), c, sessionUser, sessionExpireTime) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Logout", reflect.TypeOf((*MockStratosAuth)(nil).Logout), c) } -// BeforeVerifySession mocks base method -func (m *MockStratosAuth) BeforeVerifySession(c echo.Context) { +// ShowConfig mocks base method. +func (m *MockStratosAuth) ShowConfig(config *api.ConsoleConfig) { m.ctrl.T.Helper() - m.ctrl.Call(m, "BeforeVerifySession", c) + m.ctrl.Call(m, "ShowConfig", config) } -// BeforeVerifySession indicates an expected call of BeforeVerifySession -func (mr *MockStratosAuthMockRecorder) BeforeVerifySession(c interface{}) *gomock.Call { +// ShowConfig indicates an expected call of ShowConfig. +func (mr *MockStratosAuthMockRecorder) ShowConfig(config interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BeforeVerifySession", reflect.TypeOf((*MockStratosAuth)(nil).BeforeVerifySession), c) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ShowConfig", reflect.TypeOf((*MockStratosAuth)(nil).ShowConfig), config) } -// ShowConfig mocks base method -func (m *MockStratosAuth) ShowConfig(config *interfaces.ConsoleConfig) { +// VerifySession mocks base method. +func (m *MockStratosAuth) VerifySession(c echo.Context, sessionUser string, sessionExpireTime int64) error { m.ctrl.T.Helper() - m.ctrl.Call(m, "ShowConfig", config) + ret := m.ctrl.Call(m, "VerifySession", c, sessionUser, sessionExpireTime) + ret0, _ := ret[0].(error) + return ret0 } -// ShowConfig indicates an expected call of ShowConfig -func (mr *MockStratosAuthMockRecorder) ShowConfig(c interface{}) *gomock.Call { +// VerifySession indicates an expected call of VerifySession. +func (mr *MockStratosAuthMockRecorder) VerifySession(c, sessionUser, sessionExpireTime interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ShowConfig", reflect.TypeOf((*MockStratosAuth)(nil).ShowConfig), c) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifySession", reflect.TypeOf((*MockStratosAuth)(nil).VerifySession), c, sessionUser, sessionExpireTime) } diff --git a/src/jetstream/repository/interfaces/plugin.go b/src/jetstream/api/plugin.go similarity index 98% rename from src/jetstream/repository/interfaces/plugin.go rename to src/jetstream/api/plugin.go index 869bc674e8..ebed927221 100644 --- a/src/jetstream/repository/interfaces/plugin.go +++ b/src/jetstream/api/plugin.go @@ -1,4 +1,4 @@ -package interfaces +package api import ( "github.com/govau/cf-common/env" diff --git a/src/jetstream/repository/interfaces/portal_proxy.go b/src/jetstream/api/portal_proxy.go similarity index 99% rename from src/jetstream/repository/interfaces/portal_proxy.go rename to src/jetstream/api/portal_proxy.go index dcc4e8f630..d1e1f8fb7f 100644 --- a/src/jetstream/repository/interfaces/portal_proxy.go +++ b/src/jetstream/api/portal_proxy.go @@ -1,4 +1,4 @@ -package interfaces +package api import ( "database/sql" diff --git a/src/jetstream/repository/interfaces/sessiondata.go b/src/jetstream/api/sessiondata.go similarity index 97% rename from src/jetstream/repository/interfaces/sessiondata.go rename to src/jetstream/api/sessiondata.go index 37884b576a..e2282aeeb6 100644 --- a/src/jetstream/repository/interfaces/sessiondata.go +++ b/src/jetstream/api/sessiondata.go @@ -1,4 +1,4 @@ -package interfaces +package api import ( "time" diff --git a/src/jetstream/repository/interfaces/store.go b/src/jetstream/api/store.go similarity index 90% rename from src/jetstream/repository/interfaces/store.go rename to src/jetstream/api/store.go index c607a17717..aaa2396e49 100644 --- a/src/jetstream/repository/interfaces/store.go +++ b/src/jetstream/api/store.go @@ -1,4 +1,4 @@ -package interfaces +package api // StoreFactory is used to obtain interfaces for accessing the store type StoreFactory interface { diff --git a/src/jetstream/repository/interfaces/structs.go b/src/jetstream/api/structs.go similarity index 96% rename from src/jetstream/repository/interfaces/structs.go rename to src/jetstream/api/structs.go index d057698ac7..61f20bd75b 100644 --- a/src/jetstream/repository/interfaces/structs.go +++ b/src/jetstream/api/structs.go @@ -1,4 +1,4 @@ -package interfaces +package api import ( "fmt" @@ -6,7 +6,7 @@ import ( "net/url" "reflect" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" + api "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" "github.com/gorilla/sessions" "github.com/labstack/echo/v4" ) @@ -39,7 +39,7 @@ type V2Info struct { type InfoFunc func(apiEndpoint string, skipSSLValidation bool) (CNSIRecord, interface{}, error) -//TODO this could be moved back to cnsis subpackage, and extensions could import it? +// TODO this could be moved back to cnsis subpackage, and extensions could import it? type CNSIRecord struct { GUID string `json:"guid"` Name string `json:"name"` @@ -263,7 +263,7 @@ type Versions struct { DatabaseVersion int64 `json:"database_version"` } -//AuthEndpointType - Restrict the possible values of the configured +// AuthEndpointType - Restrict the possible values of the configured type AuthEndpointType string const ( @@ -275,8 +275,8 @@ const ( AuthNone AuthEndpointType = "none" ) -//AuthEndpointTypes - Allows lookup of internal string representation by the -//value of the AUTH_ENDPOINT_TYPE env variable +// AuthEndpointTypes - Allows lookup of internal string representation by the +// value of the AUTH_ENDPOINT_TYPE env variable var AuthEndpointTypes = map[string]AuthEndpointType{ "remote": Remote, "local": Local, @@ -403,9 +403,9 @@ type PortalConfig struct { DatabaseProviderName string EnableTechPreview bool `configName:"ENABLE_TECH_PREVIEW"` CanMigrateDatabaseSchema bool - APIKeysEnabled config.APIKeysConfigValue `configName:"API_KEYS_ENABLED"` - HomeViewShowFavoritesOnly bool `configName:"HOME_VIEW_SHOW_FAVORITES_ONLY"` - UserEndpointsEnabled config.UserEndpointsConfigValue `configName:"USER_ENDPOINTS_ENABLED"` + APIKeysEnabled api.APIKeysConfigValue `configName:"API_KEYS_ENABLED"` + HomeViewShowFavoritesOnly bool `configName:"HOME_VIEW_SHOW_FAVORITES_ONLY"` + UserEndpointsEnabled api.UserEndpointsConfigValue `configName:"USER_ENDPOINTS_ENABLED"` // CanMigrateDatabaseSchema indicates if we can safely perform migrations // This depends on the deployment mechanism and the database config // e.g. if running in Cloud Foundry with a shared DB, then only the 0-index application instance diff --git a/src/jetstream/repository/interfaces/tokens.go b/src/jetstream/api/tokens.go similarity index 98% rename from src/jetstream/repository/interfaces/tokens.go rename to src/jetstream/api/tokens.go index 0467c8220b..cfa4a2c7d4 100644 --- a/src/jetstream/repository/interfaces/tokens.go +++ b/src/jetstream/api/tokens.go @@ -1,4 +1,4 @@ -package interfaces +package api // Token - type Token struct { diff --git a/src/jetstream/repository/interfaces/uaa.go b/src/jetstream/api/uaa.go similarity index 96% rename from src/jetstream/repository/interfaces/uaa.go rename to src/jetstream/api/uaa.go index f7c4478faa..c76ac9c412 100644 --- a/src/jetstream/repository/interfaces/uaa.go +++ b/src/jetstream/api/uaa.go @@ -1,4 +1,4 @@ -package interfaces +package api // UAAResponse - Response returned by Cloud Foundry UAA Service type UAAResponse struct { diff --git a/src/jetstream/repository/interfaces/websocket.go b/src/jetstream/api/websocket.go similarity index 98% rename from src/jetstream/repository/interfaces/websocket.go rename to src/jetstream/api/websocket.go index 42b716ce03..5ca3a54a9d 100644 --- a/src/jetstream/repository/interfaces/websocket.go +++ b/src/jetstream/api/websocket.go @@ -1,4 +1,4 @@ -package interfaces +package api import ( "fmt" diff --git a/src/jetstream/apikeys.go b/src/jetstream/apikeys.go index 4fac9de9dc..2b50da635c 100644 --- a/src/jetstream/apikeys.go +++ b/src/jetstream/apikeys.go @@ -4,7 +4,7 @@ import ( "errors" "net/http" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) diff --git a/src/jetstream/apikeys_test.go b/src/jetstream/apikeys_test.go index c0b06c55a4..5fa46414f2 100644 --- a/src/jetstream/apikeys_test.go +++ b/src/jetstream/apikeys_test.go @@ -6,10 +6,10 @@ import ( "net/http" "testing" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/apikeys" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/mock_interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" + mock_api "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/mock" + mock_apikeys "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/apikeys/mock" "github.com/golang/mock/gomock" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" @@ -26,8 +26,8 @@ func Test_addAPIKey(t *testing.T) { userID := "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" ctrl := gomock.NewController(t) - mockAPIRepo := apikeys.NewMockRepository(ctrl) - mockStratosAuth := mock_interfaces.NewMockStratosAuth(ctrl) + mockAPIRepo := mock_apikeys.NewMockRepository(ctrl) + mockStratosAuth := mock_api.NewMockStratosAuth(ctrl) pp := makeMockServer(mockAPIRepo, mockStratosAuth) defer ctrl.Finish() defer pp.DatabaseConnectionPool.Close() @@ -74,7 +74,7 @@ func Test_addAPIKey(t *testing.T) { ctx, _ := makeNewRequestWithParams("POST", map[string]string{"comment": comment}) ctx.Set("user_id", userID) - connectedUser := &interfaces.ConnectedUser{ + connectedUser := &api.ConnectedUser{ GUID: userID, Admin: false, } @@ -95,12 +95,12 @@ func Test_addAPIKey(t *testing.T) { Convey("when user is an admin", func() { Convey("when API key comment is present", func() { comment := "Test API key" - retval := interfaces.APIKey{UserGUID: userID, Comment: comment} + retval := api.APIKey{UserGUID: userID, Comment: comment} ctx, rec := makeNewRequestWithParams("POST", map[string]string{"comment": comment}) ctx.Set("user_id", userID) - connectedUser := &interfaces.ConnectedUser{ + connectedUser := &api.ConnectedUser{ GUID: userID, Admin: true, } @@ -179,7 +179,7 @@ func Test_addAPIKey(t *testing.T) { Convey("when API key comment is present", func() { comment := "Test API key" - retval := interfaces.APIKey{UserGUID: userID, Comment: comment} + retval := api.APIKey{UserGUID: userID, Comment: comment} mockAPIRepo. EXPECT(). @@ -227,8 +227,8 @@ func Test_listAPIKeys(t *testing.T) { log.SetLevel(log.PanicLevel) ctrl := gomock.NewController(t) - mockAPIRepo := apikeys.NewMockRepository(ctrl) - mockStratosAuth := mock_interfaces.NewMockStratosAuth(ctrl) + mockAPIRepo := mock_apikeys.NewMockRepository(ctrl) + mockStratosAuth := mock_api.NewMockStratosAuth(ctrl) pp := makeMockServer(mockAPIRepo, mockStratosAuth) defer ctrl.Finish() defer pp.DatabaseConnectionPool.Close() @@ -269,7 +269,7 @@ func Test_listAPIKeys(t *testing.T) { }) Convey("when DB no errors occur", func() { - r1 := &interfaces.APIKey{ + r1 := &api.APIKey{ GUID: "00000000-0000-0000-0000-000000000000", Secret: "", UserGUID: userID, @@ -277,7 +277,7 @@ func Test_listAPIKeys(t *testing.T) { LastUsed: nil, } - r2 := &interfaces.APIKey{ + r2 := &api.APIKey{ GUID: "11111111-1111-1111-1111-111111111111", Secret: "", UserGUID: userID, @@ -285,7 +285,7 @@ func Test_listAPIKeys(t *testing.T) { LastUsed: nil, } - retval := []interfaces.APIKey{*r1, *r2} + retval := []api.APIKey{*r1, *r2} mockAPIRepo. EXPECT(). @@ -316,8 +316,8 @@ func Test_deleteAPIKeys(t *testing.T) { log.SetLevel(log.PanicLevel) ctrl := gomock.NewController(t) - mockAPIRepo := apikeys.NewMockRepository(ctrl) - mockStratosAuth := mock_interfaces.NewMockStratosAuth(ctrl) + mockAPIRepo := mock_apikeys.NewMockRepository(ctrl) + mockStratosAuth := mock_api.NewMockStratosAuth(ctrl) pp := makeMockServer(mockAPIRepo, mockStratosAuth) defer ctrl.Finish() defer pp.DatabaseConnectionPool.Close() diff --git a/src/jetstream/auth.go b/src/jetstream/auth.go index 27eadb5762..36b715628f 100644 --- a/src/jetstream/auth.go +++ b/src/jetstream/auth.go @@ -9,53 +9,53 @@ import ( "github.com/labstack/echo/v4" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // LoginHookFunc - function that can be hooked into a successful user login type LoginHookFunc func(c echo.Context) error -//LogoutResponse is sent upon user logout. -//It contains a flag to indicate whether or not the user was signed in with SSO +// LogoutResponse is sent upon user logout. +// It contains a flag to indicate whether or not the user was signed in with SSO type LogoutResponse struct { IsSSO bool `json:"isSSO"` } -//InitStratosAuthService is used to instantiate an Auth service when setting up the portalProxy -func (p *portalProxy) InitStratosAuthService(t interfaces.AuthEndpointType) error { - var auth interfaces.StratosAuth +// InitStratosAuthService is used to instantiate an Auth service when setting up the portalProxy +func (p *portalProxy) InitStratosAuthService(t api.AuthEndpointType) error { + var auth api.StratosAuth switch t { - case interfaces.Local: + case api.Local: auth = &localAuth{ databaseConnectionPool: p.DatabaseConnectionPool, localUserScope: p.Config.ConsoleConfig.LocalUserScope, p: p, } - case interfaces.Remote: + case api.Remote: auth = &uaaAuth{ databaseConnectionPool: p.DatabaseConnectionPool, p: p, } - case interfaces.AuthNone: + case api.AuthNone: auth = &noAuth{ databaseConnectionPool: p.DatabaseConnectionPool, p: p, } default: - err := fmt.Errorf("Invalid auth endpoint type: %v", t) + err := fmt.Errorf("invalid auth endpoint type: %v", t) return err } p.StratosAuthService = auth return nil } -//GetAuthService gets the auth service from portalProxy via the Auth interface -func (p *portalProxy) GetStratosAuthService() interfaces.StratosAuth { +// GetAuthService gets the auth service from portalProxy via the Auth interface +func (p *portalProxy) GetStratosAuthService() api.StratosAuth { return p.StratosAuthService } -//login is used for both endpoint and direct UAA login -func (p *portalProxy) login(c echo.Context, skipSSLValidation bool, client string, clientSecret string, endpoint string) (uaaRes *interfaces.UAAResponse, u *interfaces.JWTUserTokenInfo, err error) { +// login is used for both endpoint and direct UAA login +func (p *portalProxy) login(c echo.Context, skipSSLValidation bool, client string, clientSecret string, endpoint string) (uaaRes *api.UAAResponse, u *api.JWTUserTokenInfo, err error) { log.Debug("login") if c.Request().Method == http.MethodGet { code := c.QueryParam("code") @@ -64,14 +64,14 @@ func (p *portalProxy) login(c echo.Context, skipSSLValidation bool, client strin cnsiGUID := c.QueryParam("guid") uaaRes, err = p.getUAATokenWithAuthorizationCode(skipSSLValidation, code, client, clientSecret, endpoint, state, cnsiGUID) } else { - params := new(interfaces.LoginToCNSIParams) - bindErr := interfaces.BindOnce(params, c) + params := new(api.LoginToCNSIParams) + bindErr := api.BindOnce(params, c) if bindErr != nil { return nil, nil, bindErr } if len(params.Username) == 0 || len(params.Password) == 0 { - return uaaRes, u, errors.New("Needs username and password") + return uaaRes, u, errors.New("needs username and password") } uaaRes, err = p.getUAATokenWithCreds(skipSSLValidation, params.Username, params.Password, client, clientSecret, endpoint) } diff --git a/src/jetstream/auth_providers.go b/src/jetstream/auth_providers.go index 83de6a3ce8..427e71b2e4 100644 --- a/src/jetstream/auth_providers.go +++ b/src/jetstream/auth_providers.go @@ -1,16 +1,15 @@ package main -import ( - // log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" -) +import "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + +// log "github.com/sirupsen/logrus" // AddAuthProvider adds a new auth provider -func (p *portalProxy) AddAuthProvider(name string, provider interfaces.AuthProvider) { +func (p *portalProxy) AddAuthProvider(name string, provider api.AuthProvider) { p.AuthProviders[name] = provider } -func (p *portalProxy) GetAuthProvider(name string) interfaces.AuthProvider { +func (p *portalProxy) GetAuthProvider(name string) api.AuthProvider { return p.AuthProviders[name] } @@ -18,4 +17,3 @@ func (p *portalProxy) HasAuthProvider(name string) bool { _, ok := p.AuthProviders[name] return ok } - diff --git a/src/jetstream/auth_test.go b/src/jetstream/auth_test.go index 9df9c09794..663dfe37c0 100644 --- a/src/jetstream/auth_test.go +++ b/src/jetstream/auth_test.go @@ -18,10 +18,10 @@ import ( log "github.com/sirupsen/logrus" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" + mock_api "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/mock" "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/mock_interfaces" . "github.com/smartystreets/goconvey/convey" ) @@ -48,13 +48,13 @@ func TestLoginToUAA(t *testing.T) { msBody(jsonMust(mockUAAResponse))) defer mockUAA.Close() - pp.Config.ConsoleConfig = new(interfaces.ConsoleConfig) + pp.Config.ConsoleConfig = new(api.ConsoleConfig) uaaURL, _ := url.Parse(mockUAA.URL) pp.Config.ConsoleConfig.UAAEndpoint = uaaURL pp.Config.ConsoleConfig.SkipSSLValidation = true - pp.Config.ConsoleConfig.AuthEndpointType = string(interfaces.Remote) + pp.Config.ConsoleConfig.AuthEndpointType = string(api.Remote) //Init the auth service - err := pp.InitStratosAuthService(interfaces.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) + err := pp.InitStratosAuthService(api.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) if err != nil { log.Fatalf("Could not initialise auth service: %v", err) } @@ -103,9 +103,9 @@ func TestLocalLogin(t *testing.T) { _, _, ctx, pp, db, mock := setupHTTPTest(req) defer db.Close() - pp.Config.ConsoleConfig.AuthEndpointType = string(interfaces.Local) + pp.Config.ConsoleConfig.AuthEndpointType = string(api.Local) //Init the auth service - err := pp.InitStratosAuthService(interfaces.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) + err := pp.InitStratosAuthService(api.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) if err != nil { log.Fatalf("Could not initialise auth service: %v", err) } @@ -161,9 +161,9 @@ func TestLocalLoginWithBadCredentials(t *testing.T) { _, _, ctx, pp, db, mock := setupHTTPTest(req) defer db.Close() - pp.Config.ConsoleConfig.AuthEndpointType = string(interfaces.Local) + pp.Config.ConsoleConfig.AuthEndpointType = string(api.Local) //Init the auth service - err := pp.InitStratosAuthService(interfaces.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) + err := pp.InitStratosAuthService(api.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) if err != nil { log.Fatalf("Could not initialise auth service: %v", err) } @@ -217,11 +217,11 @@ func TestLocalLoginWithNoAdminScope(t *testing.T) { mock.ExpectQuery(findPasswordHash).WithArgs(userGUID).WillReturnRows(rows) //Configure the admin scope we expect the user to have - pp.Config.ConsoleConfig = new(interfaces.ConsoleConfig) + pp.Config.ConsoleConfig = new(api.ConsoleConfig) pp.Config.ConsoleConfig.LocalUserScope = "stratos.admin" - pp.Config.ConsoleConfig.AuthEndpointType = string(interfaces.Local) + pp.Config.ConsoleConfig.AuthEndpointType = string(api.Local) //Init the auth service - err := pp.InitStratosAuthService(interfaces.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) + err := pp.InitStratosAuthService(api.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) if err != nil { log.Fatalf("Could not initialise auth service: %v", err) } @@ -262,13 +262,13 @@ func TestLoginToUAAWithBadCreds(t *testing.T) { ) defer mockUAA.Close() - pp.Config.ConsoleConfig = new(interfaces.ConsoleConfig) + pp.Config.ConsoleConfig = new(api.ConsoleConfig) uaaURL, _ := url.Parse(mockUAA.URL) pp.Config.ConsoleConfig.UAAEndpoint = uaaURL pp.Config.ConsoleConfig.SkipSSLValidation = true - pp.Config.ConsoleConfig.AuthEndpointType = string(interfaces.Remote) + pp.Config.ConsoleConfig.AuthEndpointType = string(api.Remote) //Init the auth service - err := pp.InitStratosAuthService(interfaces.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) + err := pp.InitStratosAuthService(api.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) if err != nil { log.Fatalf("Could not initialise auth service: %v", err) } @@ -278,7 +278,7 @@ func TestLoginToUAAWithBadCreds(t *testing.T) { So(err, ShouldNotBeNil) }) - someErr := err.(interfaces.ErrHTTPShadow) + someErr := err.(api.ErrHTTPShadow) Convey("HTTP status code should be 401", func() { So(someErr.HTTPError.Code, ShouldEqual, http.StatusUnauthorized) @@ -308,13 +308,13 @@ func TestLoginToUAAButCantSaveToken(t *testing.T) { msBody(jsonMust(mockUAAResponse))) defer mockUAA.Close() - pp.Config.ConsoleConfig = new(interfaces.ConsoleConfig) + pp.Config.ConsoleConfig = new(api.ConsoleConfig) uaaURL, _ := url.Parse(mockUAA.URL) pp.Config.ConsoleConfig.UAAEndpoint = uaaURL pp.Config.ConsoleConfig.SkipSSLValidation = true - pp.Config.ConsoleConfig.AuthEndpointType = string(interfaces.Remote) + pp.Config.ConsoleConfig.AuthEndpointType = string(api.Remote) //Init the auth service - err := pp.InitStratosAuthService(interfaces.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) + err := pp.InitStratosAuthService(api.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) if err != nil { log.Fatalf("Could not initialise auth service: %v", err) } @@ -365,7 +365,7 @@ func TestLoginToCNSI(t *testing.T) { var mockURL *url.URL mockURL, _ = url.Parse(mockUAA.URL) stringCFType := "cf" - var mockCNSI = interfaces.CNSIRecord{ + var mockCNSI = api.CNSIRecord{ GUID: mockCNSIGUID, Name: "mockCF", CNSIType: "cf", @@ -392,10 +392,10 @@ func TestLoginToCNSI(t *testing.T) { } //Init the auth service - err := pp.InitStratosAuthService(interfaces.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) + err := pp.InitStratosAuthService(api.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) if err != nil { log.Warnf("%v, defaulting to auth type: remote", err) - err = pp.InitStratosAuthService(interfaces.Remote) + err = pp.InitStratosAuthService(api.Remote) if err != nil { log.Fatalf("Could not initialise auth service: %v", err) } @@ -543,7 +543,7 @@ func TestLoginToCNSIWithBadUserIDinSession(t *testing.T) { var mockURL *url.URL mockURL, _ = url.Parse(mockUAA.URL) stringCFType := "cf" - var mockCNSI = interfaces.CNSIRecord{ + var mockCNSI = api.CNSIRecord{ GUID: mockCNSIGUID, Name: "mockCF", CNSIType: "cf", @@ -584,7 +584,7 @@ func TestLoginToCNSIWithUserEndpointsEnabled(t *testing.T) { Convey("Login to CNSI with UserEndpoints enabled", t, func() { // mock StratosAuthService ctrl := gomock.NewController(t) - mockStratosAuth := mock_interfaces.NewMockStratosAuth(ctrl) + mockStratosAuth := mock_api.NewMockStratosAuth(ctrl) defer ctrl.Finish() // setup mock DB, PortalProxy and mock StratosAuthService @@ -816,12 +816,12 @@ func TestLogout(t *testing.T) { res, _, ctx, pp, db, _ := setupHTTPTest(req) defer db.Close() - pp.Config.ConsoleConfig.AuthEndpointType = string(interfaces.Local) + pp.Config.ConsoleConfig.AuthEndpointType = string(api.Local) //Init the auth service - err := pp.InitStratosAuthService(interfaces.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) + err := pp.InitStratosAuthService(api.AuthEndpointTypes[pp.Config.ConsoleConfig.AuthEndpointType]) if err != nil { log.Warnf("%v, defaulting to auth type: remote", err) - err = pp.InitStratosAuthService(interfaces.Remote) + err = pp.InitStratosAuthService(api.Remote) if err != nil { log.Fatalf("Could not initialise auth service: %v", err) } @@ -849,11 +849,11 @@ func TestSaveCNSITokenWithInvalidInput(t *testing.T) { badCNSIID := "" badAuthToken := "" badRefreshToken := "" - badUserInfo := interfaces.JWTUserTokenInfo{ + badUserInfo := api.JWTUserTokenInfo{ UserGUID: "", TokenExpiry: 0, } - emptyTokenRecord := interfaces.TokenRecord{} + emptyTokenRecord := api.TokenRecord{} req := setupMockReq("POST", "", map[string]string{}) _, _, _, pp, db, mock := setupHTTPTest(req) @@ -887,7 +887,7 @@ func TestSetUAATokenRecord(t *testing.T) { Convey("Test saving a UAA Token record with a DB exception", t, func() { fakeKey := "fake-guid" - fakeTr := interfaces.TokenRecord{} + fakeTr := api.TokenRecord{} req := setupMockReq("POST", "", map[string]string{}) _, _, _, pp, db, mock := setupHTTPTest(req) @@ -984,7 +984,7 @@ func TestVerifySession(t *testing.T) { res, _, ctx, pp, db, mock := setupHTTPTest(req) defer db.Close() - if e := pp.InitStratosAuthService(interfaces.Remote); e != nil { + if e := pp.InitStratosAuthService(api.Remote); e != nil { log.Fatalf("Could not initialise auth service: %v", e) } @@ -1055,7 +1055,7 @@ func TestVerifySessionNoDate(t *testing.T) { defer db.Close() //Init the auth service - err := pp.InitStratosAuthService(interfaces.Local) + err := pp.InitStratosAuthService(api.Local) if err != nil { log.Fatalf("Could not initialise auth service: %v", err) } @@ -1076,7 +1076,7 @@ func TestVerifySessionNoDate(t *testing.T) { So(err, ShouldBeNil) }) - var expectedBody = `{"status":"error","error":"Could not find session date","data":null}` + var expectedBody = `{"status":"error","error":"could not find session date","data":null}` Convey("Should contain expected body", func() { So(res, ShouldNotBeNil) So(strings.TrimSpace(res.Body.String()), ShouldEqual, expectedBody) @@ -1098,7 +1098,7 @@ func TestVerifySessionExpired(t *testing.T) { res, _, ctx, pp, db, mock := setupHTTPTest(req) defer db.Close() - if e := pp.InitStratosAuthService(interfaces.Remote); e != nil { + if e := pp.InitStratosAuthService(api.Remote); e != nil { log.Fatalf("Could not initialise auth service: %v", e) } @@ -1125,7 +1125,7 @@ func TestVerifySessionExpired(t *testing.T) { So(err, ShouldBeNil) }) - var expectedBody = `{"status":"error","error":"Could not verify user","data":null}` + var expectedBody = `{"status":"error","error":"could not verify user","data":null}` Convey("Should contain expected body", func() { So(res, ShouldNotBeNil) So(strings.TrimSpace(res.Body.String()), ShouldEqual, expectedBody) diff --git a/src/jetstream/authcnsi.go b/src/jetstream/authcnsi.go index ba446ef2a4..64817dfcd5 100644 --- a/src/jetstream/authcnsi.go +++ b/src/jetstream/authcnsi.go @@ -11,8 +11,8 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/tokens" ) @@ -24,7 +24,7 @@ func (p *portalProxy) ssoLoginToCNSI(c echo.Context) error { log.Debug("ssoLoginToCNSI") endpointGUID := c.QueryParam("guid") if len(endpointGUID) == 0 { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Missing target endpoint", "Need Endpoint GUID passed as form param") @@ -37,7 +37,7 @@ func (p *portalProxy) ssoLoginToCNSI(c echo.Context) error { state := c.QueryParam("state") if len(state) == 0 { - err := interfaces.NewHTTPShadowError( + err := api.NewHTTPShadowError( http.StatusUnauthorized, "SSO Login: State parameter missing", "SSO Login: State parameter missing") @@ -46,7 +46,7 @@ func (p *portalProxy) ssoLoginToCNSI(c echo.Context) error { cnsiRecord, err := p.GetCNSIRecord(endpointGUID) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Requested endpoint not registered", "No Endpoint registered with GUID %s: %s", endpointGUID, err) @@ -91,9 +91,9 @@ func (p *portalProxy) ssoLoginToCNSI(c echo.Context) error { // @Param connect_type formData string false "Connection type" Enums(creds, none) // @Param username formData string false "Username" // @Param password formData string false "Password" -// @Success 201 {object} interfaces.LoginRes "Connected endpoint object" -// @Failure 400 {object} interfaces.ErrorResponseBody "Error response" -// @Failure 401 {object} interfaces.ErrorResponseBody "Error response" +// @Success 201 {object} api.LoginRes "Connected endpoint object" +// @Failure 400 {object} api.ErrorResponseBody "Error response" +// @Failure 401 {object} api.ErrorResponseBody "Error response" // @Security ApiKeyAuth // @Router /tokens [post] func (p *portalProxy) loginToCNSI(c echo.Context) error { @@ -101,14 +101,14 @@ func (p *portalProxy) loginToCNSI(c echo.Context) error { var systemSharedToken = false - params := new(interfaces.LoginToCNSIParams) - err := interfaces.BindOnce(params, c) + params := new(api.LoginToCNSIParams) + err := api.BindOnce(params, c) if err != nil { return err } if len(params.CNSIGUID) == 0 { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Missing target endpoint", "Need Endpoint GUID passed as form param") @@ -134,11 +134,11 @@ func (p *portalProxy) loginToCNSI(c echo.Context) error { return nil } -func (p *portalProxy) DoLoginToCNSI(c echo.Context, cnsiGUID string, systemSharedToken bool) (*interfaces.LoginRes, error) { +func (p *portalProxy) DoLoginToCNSI(c echo.Context, cnsiGUID string, systemSharedToken bool) (*api.LoginRes, error) { cnsiRecord, err := p.GetCNSIRecord(cnsiGUID) if err != nil { - return nil, interfaces.NewHTTPShadowError( + return nil, api.NewHTTPShadowError( http.StatusBadRequest, "Requested endpoint not registered", "No Endpoint registered with GUID %s: %s", cnsiGUID, err) @@ -207,10 +207,10 @@ func (p *portalProxy) DoLoginToCNSI(c echo.Context, cnsiGUID string, systemShare if cnsiRecord.CNSIType == endpointType { tokenRecord, isAdmin, err := endpointPlugin.Connect(c, cnsiRecord, userID) if err != nil { - if shadowError, ok := err.(interfaces.ErrHTTPShadow); ok { + if shadowError, ok := err.(api.ErrHTTPShadow); ok { return nil, shadowError } - return nil, interfaces.NewHTTPShadowError( + return nil, api.NewHTTPShadowError( http.StatusBadRequest, "Could not connect to the endpoint", "Could not connect to the endpoint: %s", err) @@ -218,7 +218,7 @@ func (p *portalProxy) DoLoginToCNSI(c echo.Context, cnsiGUID string, systemShare err = p.setCNSITokenRecord(cnsiGUID, userID, *tokenRecord) if err != nil { - return nil, interfaces.NewHTTPShadowError( + return nil, api.NewHTTPShadowError( http.StatusBadRequest, "Failed to save Token for endpoint", "Error occurred: %s", err) @@ -229,13 +229,13 @@ func (p *portalProxy) DoLoginToCNSI(c echo.Context, cnsiGUID string, systemShare if err != nil { // Clear the token p.ClearCNSIToken(cnsiRecord, userID) - return nil, interfaces.NewHTTPShadowError( + return nil, api.NewHTTPShadowError( http.StatusBadRequest, "Could not connect to the endpoint", "Could not connect to the endpoint: %s", err) } - resp := &interfaces.LoginRes{ + resp := &api.LoginRes{ Account: userID, TokenExpiry: tokenRecord.TokenExpiry, APIEndpoint: cnsiRecord.APIEndpoint, @@ -249,7 +249,7 @@ func (p *portalProxy) DoLoginToCNSI(c echo.Context, cnsiGUID string, systemShare resp.User = cnsiUser } else { // Need to record a user - resp.User = &interfaces.ConnectedUser{ + resp.User = &api.ConnectedUser{ GUID: "Unknown", Name: "Unknown", Scopes: []string{"read"}, @@ -261,13 +261,13 @@ func (p *portalProxy) DoLoginToCNSI(c echo.Context, cnsiGUID string, systemShare } } - return nil, interfaces.NewHTTPShadowError( + return nil, api.NewHTTPShadowError( http.StatusBadRequest, "Endpoint connection not supported", "Endpoint connection not supported") } -func (p *portalProxy) DoLoginToCNSIwithConsoleUAAtoken(c echo.Context, theCNSIrecord interfaces.CNSIRecord) error { +func (p *portalProxy) DoLoginToCNSIwithConsoleUAAtoken(c echo.Context, theCNSIrecord api.CNSIRecord) error { userID, err := p.GetSessionStringValue(c, "user_id") if err != nil { return errors.New("could not find correct session value") @@ -309,7 +309,7 @@ func (p *portalProxy) DoLoginToCNSIwithConsoleUAAtoken(c echo.Context, theCNSIre return err } -func santizeInfoForSystemSharedTokenUser(cnsiUser *interfaces.ConnectedUser, isSysystemShared bool) { +func santizeInfoForSystemSharedTokenUser(cnsiUser *api.ConnectedUser, isSysystemShared bool) { if isSysystemShared { cnsiUser.GUID = tokens.SystemSharedUserGuid // Used by front end also cnsiUser.Scopes = make([]string, 0) @@ -317,7 +317,7 @@ func santizeInfoForSystemSharedTokenUser(cnsiUser *interfaces.ConnectedUser, isS } } -func (p *portalProxy) ConnectOAuth2(c echo.Context, cnsiRecord interfaces.CNSIRecord) (*interfaces.TokenRecord, error) { +func (p *portalProxy) ConnectOAuth2(c echo.Context, cnsiRecord api.CNSIRecord) (*api.TokenRecord, error) { uaaRes, u, _, err := p.FetchOAuth2Token(cnsiRecord, c) if err != nil { return nil, err @@ -326,7 +326,7 @@ func (p *portalProxy) ConnectOAuth2(c echo.Context, cnsiRecord interfaces.CNSIRe return &tokenRecord, nil } -func (p *portalProxy) FetchOAuth2Token(cnsiRecord interfaces.CNSIRecord, c echo.Context) (*interfaces.UAAResponse, *interfaces.JWTUserTokenInfo, *interfaces.CNSIRecord, error) { +func (p *portalProxy) FetchOAuth2Token(cnsiRecord api.CNSIRecord, c echo.Context) (*api.UAAResponse, *api.JWTUserTokenInfo, *api.CNSIRecord, error) { endpoint := cnsiRecord.AuthorizationEndpoint tokenEndpoint := fmt.Sprintf("%s/oauth/token", endpoint) @@ -334,20 +334,20 @@ func (p *portalProxy) FetchOAuth2Token(cnsiRecord interfaces.CNSIRecord, c echo. uaaRes, u, err := p.login(c, cnsiRecord.SkipSSLValidation, cnsiRecord.ClientId, cnsiRecord.ClientSecret, tokenEndpoint) if err != nil { - if httpError, ok := err.(interfaces.ErrHTTPRequest); ok { + if httpError, ok := err.(api.ErrHTTPRequest); ok { // Try and parse the Response into UAA error structure (p.login only handles UAA requests) errMessage := "" - authError := &interfaces.UAAErrorResponse{} + authError := &api.UAAErrorResponse{} if err := json.Unmarshal([]byte(httpError.Response), authError); err == nil { errMessage = fmt.Sprintf(": %s", authError.ErrorDescription) } - return nil, nil, nil, interfaces.NewHTTPShadowError( + return nil, nil, nil, api.NewHTTPShadowError( httpError.Status, fmt.Sprintf("Could not connect to the endpoint%s", errMessage), "Could not connect to the endpoint: %s", err) } - return nil, nil, nil, interfaces.NewHTTPShadowError( + return nil, nil, nil, api.NewHTTPShadowError( http.StatusBadRequest, "Login failed", "Login failed: %v", err) @@ -362,8 +362,8 @@ func (p *portalProxy) FetchOAuth2Token(cnsiRecord interfaces.CNSIRecord, c echo. // @Produce json // @Param cnsi_guid path string true "Endpoint GUID" // @Success 200 -// @Failure 400 {object} interfaces.ErrorResponseBody "Error response" -// @Failure 401 {object} interfaces.ErrorResponseBody "Error response" +// @Failure 400 {object} api.ErrorResponseBody "Error response" +// @Failure 401 {object} api.ErrorResponseBody "Error response" // @Security ApiKeyAuth // @Router /tokens/{cnsi_guid} [delete] func (p *portalProxy) logoutOfCNSI(c echo.Context) error { @@ -372,7 +372,7 @@ func (p *portalProxy) logoutOfCNSI(c echo.Context) error { cnsiGUID := c.Param("cnsi_guid") if len(cnsiGUID) == 0 { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Missing target endpoint", "Need CNSI GUID passed as form param") @@ -380,12 +380,12 @@ func (p *portalProxy) logoutOfCNSI(c echo.Context) error { userGUID, err := p.GetSessionStringValue(c, "user_id") if err != nil { - return fmt.Errorf("Could not find correct session value: %s", err) + return fmt.Errorf("could not find correct session value: %s", err) } cnsiRecord, err := p.GetCNSIRecord(cnsiGUID) if err != nil { - return fmt.Errorf("Unable to load CNSI record: %s", err) + return fmt.Errorf("unable to load CNSI record: %s", err) } // Get the existing token to see if it is connected as a system shared endpoint @@ -407,18 +407,18 @@ func (p *portalProxy) logoutOfCNSI(c echo.Context) error { return p.ClearCNSIToken(cnsiRecord, userGUID) } -func (p *portalProxy) DoAuthFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request, authHandler interfaces.AuthHandlerFunc) (*http.Response, error) { +func (p *portalProxy) DoAuthFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request, authHandler api.AuthHandlerFunc) (*http.Response, error) { // get a cnsi token record and a cnsi record tokenRec, cnsi, err := p.getCNSIRequestRecords(cnsiRequest) if err != nil { - return nil, fmt.Errorf("Unable to retrieve Endpoint records: %v", err) + return nil, fmt.Errorf("unable to retrieve Endpoint records: %v", err) } return authHandler(tokenRec, cnsi) } // Clear the CNSI token -func (p *portalProxy) ClearCNSIToken(cnsiRecord interfaces.CNSIRecord, userGUID string) error { +func (p *portalProxy) ClearCNSIToken(cnsiRecord api.CNSIRecord, userGUID string) error { // If cnsi is cf AND cf is auto-register only clear the entry p.Config.AutoRegisterCFUrl = strings.TrimRight(p.Config.AutoRegisterCFUrl, "/") if cnsiRecord.CNSIType == "cf" && p.GetConfig().AutoRegisterCFUrl == cnsiRecord.APIEndpoint.String() { @@ -426,24 +426,24 @@ func (p *portalProxy) ClearCNSIToken(cnsiRecord interfaces.CNSIRecord, userGUID tokenRecord := p.InitEndpointTokenRecord(0, "cleared_token", "cleared_token", true) if err := p.setCNSITokenRecord(cnsiRecord.GUID, userGUID, tokenRecord); err != nil { - return fmt.Errorf("Unable to clear token: %s", err) + return fmt.Errorf("unable to clear token: %s", err) } } else { log.Debug("Deleting Token") if err := p.deleteCNSIToken(cnsiRecord.GUID, userGUID); err != nil { - return fmt.Errorf("Unable to delete token: %s", err) + return fmt.Errorf("unable to delete token: %s", err) } } return nil } -func (p *portalProxy) GetCNSIUser(cnsiGUID string, userGUID string) (*interfaces.ConnectedUser, bool) { +func (p *portalProxy) GetCNSIUser(cnsiGUID string, userGUID string) (*api.ConnectedUser, bool) { user, _, ok := p.GetCNSIUserAndToken(cnsiGUID, userGUID) return user, ok } -func (p *portalProxy) GetCNSIUserAndToken(cnsiGUID string, userGUID string) (*interfaces.ConnectedUser, *interfaces.TokenRecord, bool) { +func (p *portalProxy) GetCNSIUserAndToken(cnsiGUID string, userGUID string) (*api.ConnectedUser, *api.TokenRecord, bool) { log.Debug("GetCNSIUserAndToken") // get the uaa token record @@ -462,7 +462,7 @@ func (p *portalProxy) GetCNSIUserAndToken(cnsiGUID string, userGUID string) (*in return cnsiUser, &cfTokenRecord, ok } -func (p *portalProxy) GetCNSIUserFromToken(cnsiGUID string, cfTokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { +func (p *portalProxy) GetCNSIUserFromToken(cnsiGUID string, cfTokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { log.Debug("GetCNSIUserFromToken") // Custom handler for the Auth type available? @@ -475,15 +475,15 @@ func (p *portalProxy) GetCNSIUserFromToken(cnsiGUID string, cfTokenRecord *inter return p.GetCNSIUserFromOAuthToken(cnsiGUID, cfTokenRecord) } -func (p *portalProxy) GetCNSIUserFromBasicToken(cnsiGUID string, cfTokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { - return &interfaces.ConnectedUser{ +func (p *portalProxy) GetCNSIUserFromBasicToken(cnsiGUID string, cfTokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { + return &api.ConnectedUser{ GUID: cfTokenRecord.RefreshToken, Name: cfTokenRecord.RefreshToken, }, true } -func (p *portalProxy) GetCNSIUserFromOAuthToken(cnsiGUID string, cfTokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { - var cnsiUser *interfaces.ConnectedUser +func (p *portalProxy) GetCNSIUserFromOAuthToken(cnsiGUID string, cfTokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { + var cnsiUser *api.ConnectedUser var scope = []string{} // get the scope out of the JWT token data @@ -495,7 +495,7 @@ func (p *portalProxy) GetCNSIUserFromOAuthToken(cnsiGUID string, cfTokenRecord * } // add the uaa entry to the output - cnsiUser = &interfaces.ConnectedUser{ + cnsiUser = &api.ConnectedUser{ GUID: userTokenInfo.UserGUID, Name: userTokenInfo.UserName, Scopes: userTokenInfo.Scope, @@ -519,13 +519,13 @@ func (p *portalProxy) GetCNSIUserFromOAuthToken(cnsiGUID string, cfTokenRecord * } // Helper to initialize a token record using the specified parameters -func (p *portalProxy) InitEndpointTokenRecord(expiry int64, authTok string, refreshTok string, disconnect bool) interfaces.TokenRecord { - tokenRecord := interfaces.TokenRecord{ +func (p *portalProxy) InitEndpointTokenRecord(expiry int64, authTok string, refreshTok string, disconnect bool) api.TokenRecord { + tokenRecord := api.TokenRecord{ AuthToken: authTok, RefreshToken: refreshTok, TokenExpiry: expiry, Disconnected: disconnect, - AuthType: interfaces.AuthTypeOAuth2, + AuthType: api.AuthTypeOAuth2, } return tokenRecord diff --git a/src/jetstream/authlocal.go b/src/jetstream/authlocal.go index e36c731a23..59b1524f0f 100644 --- a/src/jetstream/authlocal.go +++ b/src/jetstream/authlocal.go @@ -14,12 +14,12 @@ import ( "github.com/labstack/echo/v4" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/localusers" ) -//More fields will be moved into here as global portalProxy struct is phased out +// More fields will be moved into here as global portalProxy struct is phased out type localAuth struct { databaseConnectionPool *sql.DB localUserScope string @@ -27,17 +27,17 @@ type localAuth struct { p *portalProxy } -func (a *localAuth) ShowConfig(config *interfaces.ConsoleConfig) { +func (a *localAuth) ShowConfig(config *api.ConsoleConfig) { log.Infof("... Local User : %s", config.LocalUser) log.Infof("... Local User Scope : %s", config.LocalUserScope) } -//Login provides Local-auth specific Stratos login +// Login provides Local-auth specific Stratos login func (a *localAuth) Login(c echo.Context) error { //This check will remain in until auth is factored down into its own package - if interfaces.AuthEndpointTypes[a.p.Config.ConsoleConfig.AuthEndpointType] != interfaces.Local { - err := interfaces.NewHTTPShadowError( + if api.AuthEndpointTypes[a.p.Config.ConsoleConfig.AuthEndpointType] != api.Local { + err := api.NewHTTPShadowError( http.StatusNotFound, "Local Login is not enabled", "Local Login is not enabled") @@ -50,7 +50,7 @@ func (a *localAuth) Login(c echo.Context) error { if err != nil { //Login failed, return response. errMessage := err.Error() - err := interfaces.NewHTTPShadowError( + err := api.NewHTTPShadowError( http.StatusUnauthorized, errMessage, "Login failed: %v", err) @@ -62,12 +62,12 @@ func (a *localAuth) Login(c echo.Context) error { return err } -//Logout provides Local-auth specific Stratos login +// Logout provides Local-auth specific Stratos login func (a *localAuth) Logout(c echo.Context) error { return a.logout(c) } -//GetUsername gets the user name for the specified local user +// GetUsername gets the user name for the specified local user func (a *localAuth) GetUsername(userid string) (string, error) { log.Debug("GetUsername") @@ -86,8 +86,8 @@ func (a *localAuth) GetUsername(userid string) (string, error) { return localUser.Username, nil } -//GetUser gets the user guid for the specified local user -func (a *localAuth) GetUser(userGUID string) (*interfaces.ConnectedUser, error) { +// GetUser gets the user guid for the specified local user +func (a *localAuth) GetUser(userGUID string) (*api.ConnectedUser, error) { log.Debug("GetUser") localUsersRepo, err := localusers.NewPgsqlLocalUsersRepository(a.databaseConnectionPool) @@ -103,13 +103,12 @@ func (a *localAuth) GetUser(userGUID string) (*interfaces.ConnectedUser, error) uaaAdmin := (user.Scope == a.p.Config.ConsoleConfig.ConsoleAdminScope) - var scopes []string - scopes = make([]string, 3) + scopes := make([]string, 3) scopes[0] = user.Scope scopes[1] = "password.write" scopes[2] = "scim.write" - connectdUser := &interfaces.ConnectedUser{ + connectdUser := &api.ConnectedUser{ GUID: userGUID, Name: user.Username, Admin: uaaAdmin, @@ -121,7 +120,7 @@ func (a *localAuth) GetUser(userGUID string) (*interfaces.ConnectedUser, error) func (a *localAuth) BeforeVerifySession(c echo.Context) {} -//VerifySession verifies the session the specified local user, currently just verifies user exists +// VerifySession verifies the session the specified local user, currently just verifies user exists func (a *localAuth) VerifySession(c echo.Context, sessionUser string, sessionExpireTime int64) error { localUsersRepo, err := localusers.NewPgsqlLocalUsersRepository(a.databaseConnectionPool) if err != nil { @@ -133,7 +132,7 @@ func (a *localAuth) VerifySession(c echo.Context, sessionUser string, sessionExp return err } -//localLogin verifies local user credentials against our DB +// localLogin verifies local user credentials against our DB func (a *localAuth) localLogin(c echo.Context) (string, string, error) { log.Debug("doLocalLogin") @@ -141,7 +140,7 @@ func (a *localAuth) localLogin(c echo.Context) (string, string, error) { password := c.FormValue("password") if len(username) == 0 || len(password) == 0 { - return "", username, errors.New("Needs usernameand password") + return "", username, errors.New("needs usernameand password") } localUsersRepo, err := localusers.NewPgsqlLocalUsersRepository(a.databaseConnectionPool) @@ -158,21 +157,21 @@ func (a *localAuth) localLogin(c echo.Context) (string, string, error) { // Get the GUID for the specified user guid, err := localUsersRepo.FindUserGUID(username) if err != nil { - return guid, username, fmt.Errorf("Access Denied - Invalid username/password credentials") + return guid, username, fmt.Errorf("access Denied - Invalid username/password credentials") } //Attempt to find the password has for the given user if hash, authError = localUsersRepo.FindPasswordHash(guid); authError != nil { - authError = fmt.Errorf("Access Denied - Invalid username/password credentials") + authError = fmt.Errorf("access Denied - Invalid username/password credentials") //Check the password hash } else if authError = crypto.CheckPasswordHash(password, hash); authError != nil { - authError = fmt.Errorf("Access Denied - Invalid username/password credentials") + authError = fmt.Errorf("access Denied - Invalid username/password credentials") } else { //Ensure the local user has some kind of admin role configured and we check for it here localUserScope, authError = localUsersRepo.FindUserScope(guid) scopeOK = strings.Contains(localUserScope, a.localUserScope) if (authError != nil) || (!scopeOK) { - authError = fmt.Errorf("Access Denied - User scope invalid") + authError = fmt.Errorf("access Denied - User scope invalid") } else { //Update the last login time here if login was successful loginTime := time.Now() @@ -185,13 +184,12 @@ func (a *localAuth) localLogin(c echo.Context) (string, string, error) { return guid, username, authError } -//generateLoginSuccessResponse +// generateLoginSuccessResponse func (a *localAuth) generateLoginSuccessResponse(c echo.Context, userGUID string, username string) error { log.Debug("generateLoginResponse") var err error - var expiry int64 - expiry = math.MaxInt64 + var expiry int64 = math.MaxInt64 sessionValues := make(map[string]interface{}) sessionValues["user_id"] = userGUID @@ -209,7 +207,7 @@ func (a *localAuth) generateLoginSuccessResponse(c echo.Context, userGUID string return err } - resp := &interfaces.LoginRes{ + resp := &api.LoginRes{ Account: username, TokenExpiry: expiry, APIEndpoint: nil, @@ -226,7 +224,7 @@ func (a *localAuth) generateLoginSuccessResponse(c echo.Context, userGUID string return err } -//logout +// logout func (a *localAuth) logout(c echo.Context) error { log.Debug("logout") diff --git a/src/jetstream/authnone.go b/src/jetstream/authnone.go index 10f4fb6cd4..4f0a5b1ca7 100644 --- a/src/jetstream/authnone.go +++ b/src/jetstream/authnone.go @@ -11,7 +11,7 @@ import ( "github.com/labstack/echo/v4" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) const ( @@ -26,13 +26,13 @@ type noAuth struct { p *portalProxy } -func (a *noAuth) ShowConfig(config *interfaces.ConsoleConfig) { +func (a *noAuth) ShowConfig(config *api.ConsoleConfig) { log.Info("... !!!!! No Authentication !!!!!") } //Login provides no-auth specific Stratos login func (a *noAuth) Login(c echo.Context) error { - return errors.New("Can not login when there is no auth") + return errors.New("can not login when there is no auth") } //Logout provides no-auth specific Stratos login @@ -42,18 +42,17 @@ func (a *noAuth) Logout(c echo.Context) error { //GetUsername gets the user name for the specified local user func (a *noAuth) GetUsername(userid string) (string, error) { - return interfaces.DefaultAdminUserName, nil + return api.DefaultAdminUserName, nil } //GetUser gets the user guid for the specified local user -func (a *noAuth) GetUser(userGUID string) (*interfaces.ConnectedUser, error) { - var scopes []string - scopes = make([]string, 1) +func (a *noAuth) GetUser(userGUID string) (*api.ConnectedUser, error) { + var scopes = make([]string, 1) scopes[0] = "stratos.noauth" - connectdUser := &interfaces.ConnectedUser{ + connectdUser := &api.ConnectedUser{ GUID: noAuthUserID, - Name: interfaces.DefaultAdminUserName, + Name: api.DefaultAdminUserName, Admin: true, Scopes: scopes, } @@ -63,8 +62,7 @@ func (a *noAuth) GetUser(userGUID string) (*interfaces.ConnectedUser, error) { func (a *noAuth) BeforeVerifySession(c echo.Context) { var err error - var expiry int64 - expiry = math.MaxInt64 + var expiry int64 = math.MaxInt64 session, err := a.p.GetSession(c) if err != nil { @@ -96,8 +94,7 @@ func (a *noAuth) generateLoginSuccessResponse(c echo.Context, userGUID string, u log.Debug("generateLoginResponse") var err error - var expiry int64 - expiry = math.MaxInt64 + var expiry int64 = math.MaxInt64 sessionValues := make(map[string]interface{}) sessionValues["user_id"] = userGUID @@ -115,7 +112,7 @@ func (a *noAuth) generateLoginSuccessResponse(c echo.Context, userGUID string, u return err } - resp := &interfaces.LoginRes{ + resp := &api.LoginRes{ Account: username, TokenExpiry: expiry, APIEndpoint: nil, diff --git a/src/jetstream/authuaa.go b/src/jetstream/authuaa.go index 24206e90f1..8a94db9240 100644 --- a/src/jetstream/authuaa.go +++ b/src/jetstream/authuaa.go @@ -15,21 +15,21 @@ import ( "github.com/labstack/echo/v4" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/cloudfoundry-incubator/stratos/src/jetstream/stringutils" ) // UAAAdminIdentifier - The identifier that UAA uses to convey administrative level perms const UAAAdminIdentifier = "stratos.admin" -//More fields will be moved into here as global portalProxy struct is phased out +// More fields will be moved into here as global portalProxy struct is phased out type uaaAuth struct { databaseConnectionPool *sql.DB p *portalProxy skipSSLValidation bool } -func (a *uaaAuth) ShowConfig(config *interfaces.ConsoleConfig) { +func (a *uaaAuth) ShowConfig(config *api.ConsoleConfig) { log.Infof("... UAA Endpoint : %s", config.UAAEndpoint) log.Infof("... Authorization Endpoint : %s", config.AuthorizationEndpoint) log.Infof("... Console Client : %s", config.ConsoleClient) @@ -37,12 +37,12 @@ func (a *uaaAuth) ShowConfig(config *interfaces.ConsoleConfig) { log.Infof("... Use SSO Login : %t", config.UseSSO) } -//Login provides UAA-auth specific Stratos login +// Login provides UAA-auth specific Stratos login func (a *uaaAuth) Login(c echo.Context) error { log.Debug("UAA Login") //This check will remain in until auth is factored down into its own package - if interfaces.AuthEndpointTypes[a.p.Config.ConsoleConfig.AuthEndpointType] != interfaces.Remote { - err := interfaces.NewHTTPShadowError( + if api.AuthEndpointTypes[a.p.Config.ConsoleConfig.AuthEndpointType] != api.Remote { + err := api.NewHTTPShadowError( http.StatusNotFound, "UAA Login is not enabled", "UAA Login is not enabled") @@ -68,12 +68,12 @@ func (a *uaaAuth) Login(c echo.Context) error { return nil } -//Logout provides UAA-auth specific Stratos login +// Logout provides UAA-auth specific Stratos login func (a *uaaAuth) Logout(c echo.Context) error { return a.logout(c) } -//GetUsername gets the user name for the specified UAA user +// GetUsername gets the user name for the specified UAA user func (a *uaaAuth) GetUsername(userid string) (string, error) { tr, err := a.p.GetUAATokenRecord(userid) if err != nil { @@ -86,14 +86,14 @@ func (a *uaaAuth) GetUsername(userid string) (string, error) { return u.UserName, nil } -//GetUser gets the user guid for the specified UAA user -func (a *uaaAuth) GetUser(userGUID string) (*interfaces.ConnectedUser, error) { +// GetUser gets the user guid for the specified UAA user +func (a *uaaAuth) GetUser(userGUID string) (*api.ConnectedUser, error) { log.Debug("GetUser") // get the uaa token record uaaTokenRecord, err := a.p.GetUAATokenRecord(userGUID) if err != nil { - msg := "Unable to retrieve UAA token record." + msg := "unable to retrieve UAA token record" log.Error(msg) return nil, fmt.Errorf(msg) } @@ -101,7 +101,7 @@ func (a *uaaAuth) GetUser(userGUID string) (*interfaces.ConnectedUser, error) { // get the scope out of the JWT token data userTokenInfo, err := a.p.GetUserTokenInfo(uaaTokenRecord.AuthToken) if err != nil { - msg := "Unable to find scope information in the UAA Auth Token: %s" + msg := "unable to find scope information in the UAA Auth Token: %s" log.Errorf(msg, err) return nil, fmt.Errorf(msg, err) } @@ -110,7 +110,7 @@ func (a *uaaAuth) GetUser(userGUID string) (*interfaces.ConnectedUser, error) { uaaAdmin := strings.Contains(strings.Join(userTokenInfo.Scope, ""), a.p.Config.ConsoleConfig.ConsoleAdminScope) // add the uaa entry to the output - uaaEntry := &interfaces.ConnectedUser{ + uaaEntry := &api.ConnectedUser{ GUID: userGUID, Name: userTokenInfo.UserName, Admin: uaaAdmin, @@ -123,7 +123,7 @@ func (a *uaaAuth) GetUser(userGUID string) (*interfaces.ConnectedUser, error) { func (a *uaaAuth) BeforeVerifySession(c echo.Context) {} -//VerifySession verifies the session the specified UAA user and refreshes the token if necessary +// VerifySession verifies the session the specified UAA user and refreshes the token if necessary func (a *uaaAuth) VerifySession(c echo.Context, sessionUser string, sessionExpireTime int64) error { tr, err := a.p.GetUAATokenRecord(sessionUser) @@ -165,7 +165,7 @@ func (a *uaaAuth) VerifySession(c echo.Context, sessionUser string, sessionExpir return nil } -//logout performs the underlying logout from the UAA endpoint +// logout performs the underlying logout from the UAA endpoint func (a *uaaAuth) logout(c echo.Context) error { log.Debug("logout") @@ -187,23 +187,23 @@ func (a *uaaAuth) logout(c echo.Context) error { return c.JSON(http.StatusOK, resp) } -//loginToUAA performs the underlying login to the UAA endpoint -func (p *portalProxy) loginToUAA(c echo.Context) (*interfaces.LoginRes, error) { +// loginToUAA performs the underlying login to the UAA endpoint +func (p *portalProxy) loginToUAA(c echo.Context) (*api.LoginRes, error) { log.Debug("loginToUAA") uaaRes, u, err := p.login(c, p.Config.ConsoleConfig.SkipSSLValidation, p.Config.ConsoleConfig.ConsoleClient, p.Config.ConsoleConfig.ConsoleClientSecret, p.getUAAIdentityEndpoint()) - var resp *interfaces.LoginRes + var resp *api.LoginRes if err != nil { // Check the Error errMessage := "Access Denied" - if httpError, ok := err.(interfaces.ErrHTTPRequest); ok { + if httpError, ok := err.(api.ErrHTTPRequest); ok { // Try and parse the Response into UAA error structure - authError := &interfaces.UAAErrorResponse{} + authError := &api.UAAErrorResponse{} if err := json.Unmarshal([]byte(httpError.Response), authError); err == nil { errMessage = authError.ErrorDescription } } - err = interfaces.NewHTTPShadowError( + err = api.NewHTTPShadowError( http.StatusUnauthorized, errMessage, "UAA Login failed: %s: %v", errMessage, err) @@ -237,7 +237,7 @@ func (p *portalProxy) loginToUAA(c echo.Context) (*interfaces.LoginRes, error) { } uaaAdmin := strings.Contains(uaaRes.Scope, p.Config.ConsoleConfig.ConsoleAdminScope) - resp = &interfaces.LoginRes{ + resp = &api.LoginRes{ Account: u.UserName, TokenExpiry: u.TokenExpiry, APIEndpoint: nil, @@ -247,22 +247,22 @@ func (p *portalProxy) loginToUAA(c echo.Context) (*interfaces.LoginRes, error) { return resp, err } -//getUAAIdentityEndpoint gets the token endpoint for the UAA +// getUAAIdentityEndpoint gets the token endpoint for the UAA func (p *portalProxy) getUAAIdentityEndpoint() string { log.Debug("getUAAIdentityEndpoint") return fmt.Sprintf("%s/oauth/token", p.Config.ConsoleConfig.UAAEndpoint) } -//saveAuthToken stores the UAA token for a given user -func (p *portalProxy) saveAuthToken(u interfaces.JWTUserTokenInfo, authTok string, refreshTok string) (interfaces.TokenRecord, error) { +// saveAuthToken stores the UAA token for a given user +func (p *portalProxy) saveAuthToken(u api.JWTUserTokenInfo, authTok string, refreshTok string) (api.TokenRecord, error) { log.Debug("saveAuthToken") key := u.UserGUID - tokenRecord := interfaces.TokenRecord{ + tokenRecord := api.TokenRecord{ AuthToken: authTok, RefreshToken: refreshTok, TokenExpiry: u.TokenExpiry, - AuthType: interfaces.AuthTypeOAuth2, + AuthType: api.AuthTypeOAuth2, } err := p.setUAATokenRecord(key, tokenRecord) @@ -273,24 +273,24 @@ func (p *portalProxy) saveAuthToken(u interfaces.JWTUserTokenInfo, authTok strin return tokenRecord, nil } -//setUAATokenRecord saves the uaa token for the given user, to our store -func (p *portalProxy) setUAATokenRecord(key string, t interfaces.TokenRecord) error { +// setUAATokenRecord saves the uaa token for the given user, to our store +func (p *portalProxy) setUAATokenRecord(key string, t api.TokenRecord) error { log.Debug("setUAATokenRecord") tokenRepo, err := p.GetStoreFactory().TokenStore() if err != nil { - return fmt.Errorf("Database error getting repo for UAA token: %v", err) + return fmt.Errorf("database error getting repo for UAA token: %v", err) } err = tokenRepo.SaveAuthToken(key, t, p.Config.EncryptionKeyInBytes) if err != nil { - return fmt.Errorf("Database error saving UAA token: %v", err) + return fmt.Errorf("database error saving UAA token: %v", err) } return nil } -//RefreshUAALogin refreshes the UAA login and optionally stores the new token +// RefreshUAALogin refreshes the UAA login and optionally stores the new token func (p *portalProxy) RefreshUAALogin(username, password string, store bool) error { log.Debug("RefreshUAALogin") uaaRes, err := p.getUAATokenWithCreds(p.Config.ConsoleConfig.SkipSSLValidation, username, password, p.Config.ConsoleConfig.ConsoleClient, p.Config.ConsoleConfig.ConsoleClientSecret, p.getUAAIdentityEndpoint()) @@ -313,8 +313,8 @@ func (p *portalProxy) RefreshUAALogin(username, password string, store bool) err return nil } -//getUAATokenWithAuthorizationCode -func (p *portalProxy) getUAATokenWithAuthorizationCode(skipSSLValidation bool, code, client, clientSecret, authEndpoint string, state string, cnsiGUID string) (*interfaces.UAAResponse, error) { +// getUAATokenWithAuthorizationCode +func (p *portalProxy) getUAATokenWithAuthorizationCode(skipSSLValidation bool, code, client, clientSecret, authEndpoint string, state string, cnsiGUID string) (*api.UAAResponse, error) { log.Debug("getUAATokenWithAuthorizationCode") body := url.Values{} @@ -327,8 +327,8 @@ func (p *portalProxy) getUAATokenWithAuthorizationCode(skipSSLValidation bool, c return p.getUAAToken(body, skipSSLValidation, client, clientSecret, authEndpoint) } -//getUAATokenWithCreds -func (p *portalProxy) getUAATokenWithCreds(skipSSLValidation bool, username, password, client, clientSecret, authEndpoint string) (*interfaces.UAAResponse, error) { +// getUAATokenWithCreds +func (p *portalProxy) getUAATokenWithCreds(skipSSLValidation bool, username, password, client, clientSecret, authEndpoint string) (*api.UAAResponse, error) { log.Debug("getUAATokenWithCreds") body := url.Values{} @@ -340,8 +340,8 @@ func (p *portalProxy) getUAATokenWithCreds(skipSSLValidation bool, username, pas return p.getUAAToken(body, skipSSLValidation, client, clientSecret, authEndpoint) } -//getUAATokenWithRefreshToken -func (p *portalProxy) getUAATokenWithRefreshToken(skipSSLValidation bool, refreshToken, client, clientSecret, authEndpoint string, scopes string) (*interfaces.UAAResponse, error) { +// getUAATokenWithRefreshToken +func (p *portalProxy) getUAATokenWithRefreshToken(skipSSLValidation bool, refreshToken, client, clientSecret, authEndpoint string, scopes string) (*api.UAAResponse, error) { log.Debug("getUAATokenWithRefreshToken") body := url.Values{} @@ -356,12 +356,12 @@ func (p *portalProxy) getUAATokenWithRefreshToken(skipSSLValidation bool, refres return p.getUAAToken(body, skipSSLValidation, client, clientSecret, authEndpoint) } -//getUAAToken -func (p *portalProxy) getUAAToken(body url.Values, skipSSLValidation bool, client, clientSecret, authEndpoint string) (*interfaces.UAAResponse, error) { +// getUAAToken +func (p *portalProxy) getUAAToken(body url.Values, skipSSLValidation bool, client, clientSecret, authEndpoint string) (*api.UAAResponse, error) { log.WithField("authEndpoint", authEndpoint).Debug("getUAAToken") req, err := http.NewRequest("POST", authEndpoint, strings.NewReader(body.Encode())) if err != nil { - msg := "Failed to create request for UAA: %v" + msg := "failed to create request for UAA: %v" log.Errorf(msg, err) return nil, fmt.Errorf(msg, err) } @@ -373,12 +373,12 @@ func (p *portalProxy) getUAAToken(body url.Values, skipSSLValidation bool, clien res, err := h.Do(req) if err != nil || res.StatusCode != http.StatusOK { log.Errorf("Error performing http request - response: %v, error: %v", res, err) - return nil, interfaces.LogHTTPError(res, err) + return nil, api.LogHTTPError(res, err) } defer res.Body.Close() - var response interfaces.UAAResponse + var response api.UAAResponse dec := json.NewDecoder(res.Body) if err = dec.Decode(&response); err != nil { @@ -389,27 +389,27 @@ func (p *portalProxy) getUAAToken(body url.Values, skipSSLValidation bool, clien return &response, nil } -//GetUAATokenRecord fetched the uaa token for the given user, from our store -func (p *portalProxy) GetUAATokenRecord(userGUID string) (interfaces.TokenRecord, error) { +// GetUAATokenRecord fetched the uaa token for the given user, from our store +func (p *portalProxy) GetUAATokenRecord(userGUID string) (api.TokenRecord, error) { log.Debug("GetUAATokenRecord") tokenRepo, err := p.GetStoreFactory().TokenStore() if err != nil { log.Errorf("Database error getting repo for UAA token: %v", err) - return interfaces.TokenRecord{}, err + return api.TokenRecord{}, err } tr, err := tokenRepo.FindAuthToken(userGUID, p.Config.EncryptionKeyInBytes) if err != nil { log.Errorf("Database error finding UAA token: %v", err) - return interfaces.TokenRecord{}, err + return api.TokenRecord{}, err } return tr, nil } -//RefreshUAAToken refreshes the UAA Token for the user using the refresh token, then updates our store -func (p *portalProxy) RefreshUAAToken(userGUID string) (t interfaces.TokenRecord, err error) { +// RefreshUAAToken refreshes the UAA Token for the user using the refresh token, then updates our store +func (p *portalProxy) RefreshUAAToken(userGUID string) (t api.TokenRecord, err error) { log.Debug("RefreshUAAToken") userToken, err := p.GetUAATokenRecord(userGUID) @@ -424,14 +424,14 @@ func (p *portalProxy) RefreshUAAToken(userGUID string) (t interfaces.TokenRecord } else { u, err := p.GetUserTokenInfo(uaaRes.AccessToken) if err != nil { - return t, fmt.Errorf("Could not get user token info from access token") + return t, fmt.Errorf("could not get user token info from access token") } u.UserGUID = userGUID t, err = p.saveAuthToken(*u, uaaRes.AccessToken, uaaRes.RefreshToken) if err != nil { - return t, fmt.Errorf("Couldn't save new UAA token: %v", err) + return t, fmt.Errorf("couldn't save new UAA token: %v", err) } } return t, err @@ -463,10 +463,10 @@ func (p *portalProxy) ssoLoginToUAA(c echo.Context) error { if err != nil { // Send error as query string param msg := err.Error() - if httpError, ok := err.(interfaces.ErrHTTPShadow); ok { + if httpError, ok := err.(api.ErrHTTPShadow); ok { msg = httpError.UserFacingError } - if httpError, ok := err.(interfaces.ErrHTTPRequest); ok { + if httpError, ok := err.(api.ErrHTTPRequest); ok { msg = httpError.Response } state = fmt.Sprintf("%s/login?SSO_Message=%s", state, url.QueryEscape(msg)) @@ -475,10 +475,10 @@ func (p *portalProxy) ssoLoginToUAA(c echo.Context) error { return c.Redirect(http.StatusTemporaryRedirect, state) } -//ssoLogoutOfUAA performs SSO logout from the UAA +// ssoLogoutOfUAA performs SSO logout from the UAA func (p *portalProxy) ssoLogoutOfUAA(c echo.Context) error { if !p.Config.SSOLogin { - err := interfaces.NewHTTPShadowError( + err := api.NewHTTPShadowError( http.StatusNotFound, "SSO Login is not enabled", "SSO Login is not enabled") @@ -487,7 +487,7 @@ func (p *portalProxy) ssoLogoutOfUAA(c echo.Context) error { state := c.QueryParam("state") if len(state) == 0 { - err := interfaces.NewHTTPShadowError( + err := api.NewHTTPShadowError( http.StatusUnauthorized, "SSO Login: State parameter missing", "SSO Login: State parameter missing") @@ -504,7 +504,7 @@ func (p *portalProxy) ssoLogoutOfUAA(c echo.Context) error { return c.Redirect(http.StatusTemporaryRedirect, redirectURL) } -//hasSSOOption returns whether or not SSO is enabled +// hasSSOOption returns whether or not SSO is enabled func (p *portalProxy) hasSSOOption(option string) bool { // Remove all spaces opts := stringutils.RemoveSpaces(p.Config.SSOOptions) @@ -514,10 +514,10 @@ func (p *portalProxy) hasSSOOption(option string) bool { return stringutils.ArrayContainsString(options, option) } -//initSSOlogin performs SSO Login via UAA +// initSSOlogin performs SSO Login via UAA func (p *portalProxy) initSSOlogin(c echo.Context) error { if !p.Config.SSOLogin { - err := interfaces.NewHTTPShadowError( + err := api.NewHTTPShadowError( http.StatusNotFound, "SSO Login is not enabled", "SSO Login is not enabled") @@ -537,14 +537,14 @@ func (p *portalProxy) initSSOlogin(c echo.Context) error { func validateSSORedirectState(state string, allowListStr string) error { if len(state) == 0 { - err := interfaces.NewHTTPShadowError( + err := api.NewHTTPShadowError( http.StatusUnauthorized, "SSO Login: State parameter missing", "SSO Login: State parameter missing") return err } if !safeSSORedirectState(state, allowListStr) { - err := interfaces.NewHTTPShadowError( + err := api.NewHTTPShadowError( http.StatusUnauthorized, "SSO Login: Disallowed redirect state", "SSO Login: Disallowed redirect state") @@ -572,7 +572,7 @@ func safeSSORedirectState(state string, allowListStr string) bool { return false } -//getSSORedirectURI gets the SSO redirect uri for the given endpoint and state +// getSSORedirectURI gets the SSO redirect uri for the given endpoint and state func getSSORedirectURI(base string, state string, endpointGUID string) string { baseURL, _ := url.Parse(base) baseURL.Path = "" @@ -588,13 +588,13 @@ func getSSORedirectURI(base string, state string, endpointGUID string) string { //HTTP Basic -//fetchHTTPBasicToken currently unused? -func (p *portalProxy) fetchHTTPBasicToken(cnsiRecord interfaces.CNSIRecord, c echo.Context) (*interfaces.UAAResponse, *interfaces.JWTUserTokenInfo, *interfaces.CNSIRecord, error) { +// fetchHTTPBasicToken currently unused? +func (p *portalProxy) fetchHTTPBasicToken(cnsiRecord api.CNSIRecord, c echo.Context) (*api.UAAResponse, *api.JWTUserTokenInfo, *api.CNSIRecord, error) { uaaRes, u, err := p.loginHTTPBasic(c) if err != nil { - return nil, nil, nil, interfaces.NewHTTPShadowError( + return nil, nil, nil, api.NewHTTPShadowError( http.StatusUnauthorized, "Login failed", "Login failed: %v", err) @@ -602,14 +602,14 @@ func (p *portalProxy) fetchHTTPBasicToken(cnsiRecord interfaces.CNSIRecord, c ec return uaaRes, u, &cnsiRecord, nil } -//fetchHTTPBasicToken currently unused? -func (p *portalProxy) loginHTTPBasic(c echo.Context) (uaaRes *interfaces.UAAResponse, u *interfaces.JWTUserTokenInfo, err error) { +// fetchHTTPBasicToken currently unused? +func (p *portalProxy) loginHTTPBasic(c echo.Context) (uaaRes *api.UAAResponse, u *api.JWTUserTokenInfo, err error) { log.Debug("login") username := c.FormValue("username") password := c.FormValue("password") if len(username) == 0 || len(password) == 0 { - return uaaRes, u, errors.New("Needs username and password") + return uaaRes, u, errors.New("needs username and password") } authString := fmt.Sprintf("%s:%s", username, password) diff --git a/src/jetstream/cnsi.go b/src/jetstream/cnsi.go index ea1e95dcc4..1fe0e72e95 100644 --- a/src/jetstream/cnsi.go +++ b/src/jetstream/cnsi.go @@ -3,6 +3,7 @@ package main import ( "crypto/x509" "encoding/json" + "errors" "fmt" "net/http" "net/url" @@ -15,33 +16,39 @@ import ( "crypto/sha1" "encoding/base64" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/userfavorites/userfavoritesendpoints" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" ) -const dbReferenceError = "Unable to establish a database reference: '%v'" +const dbReferenceError = "unable to establish a database reference: '%v'" func isSSLRelatedError(err error) (bool, string) { - if urlErr, ok := err.(*url.Error); ok { - if x509Err, ok := urlErr.Err.(x509.UnknownAuthorityError); ok { - return true, x509Err.Error() + var urlError *url.Error + if errors.As(err, &urlError) { + var ( + certInvalidError *x509.CertificateInvalidError + unknownAuthorityError *x509.UnknownAuthorityError + hostnameError *x509.HostnameError + ) + if errors.As(urlError.Err, unknownAuthorityError) { + return true, unknownAuthorityError.Error() } - if x509Err, ok := urlErr.Err.(x509.HostnameError); ok { - return true, x509Err.Error() + if errors.As(urlError.Err, hostnameError) { + return true, hostnameError.Error() } - if x509Err, ok := urlErr.Err.(x509.CertificateInvalidError); ok { - return true, x509Err.Error() + if errors.As(urlError.Err, certInvalidError) { + return true, certInvalidError.Error() } } return false, "" } -func (p *portalProxy) RegisterEndpoint(c echo.Context, fetchInfo interfaces.InfoFunc) error { +func (p *portalProxy) RegisterEndpoint(c echo.Context, fetchInfo api.InfoFunc) error { log.Debug("registerEndpoint") - params := new(interfaces.RegisterEndpointParams) - err := interfaces.BindOnce(params, c) + params := new(api.RegisterEndpointParams) + err := api.BindOnce(params, c) if err != nil { return err } @@ -76,7 +83,7 @@ func (p *portalProxy) RegisterEndpoint(c echo.Context, fetchInfo interfaces.Info userID, err := p.GetSessionStringValue(c, "user_id") if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusInternalServerError, "Failed to get session user", "Failed to get session user: %v", err) @@ -91,11 +98,11 @@ func (p *portalProxy) RegisterEndpoint(c echo.Context, fetchInfo interfaces.Info return nil } -func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, skipSSLValidation bool, clientId string, clientSecret string, userId string, ssoAllowed bool, subType string, createSystemEndpoint bool, fetchInfo interfaces.InfoFunc) (interfaces.CNSIRecord, error) { +func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, skipSSLValidation bool, clientId string, clientSecret string, userId string, ssoAllowed bool, subType string, createSystemEndpoint bool, fetchInfo api.InfoFunc) (api.CNSIRecord, error) { log.Debug("DoRegisterEndpoint") if len(cnsiName) == 0 || len(apiEndpoint) == 0 { - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusBadRequest, "Needs CNSI Name and API Endpoint", "CNSI Name or Endpoint were not provided when trying to register an CF Cluster") @@ -106,7 +113,7 @@ func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, sk // Remove trailing slash, if there is one apiEndpointURL, err := url.Parse(apiEndpoint) if err != nil { - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusBadRequest, "Failed to get API Endpoint", "Failed to get API Endpoint: %v", err) @@ -118,7 +125,7 @@ func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, sk if p.GetConfig().UserEndpointsEnabled != config.UserEndpointsConfigEnum.Disabled && len(userId) != 0 { currentCreator, err := p.StratosAuthService.GetUser(userId) if err != nil { - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusInternalServerError, "Failed to get user information", "Failed to get user information: %v", err) @@ -131,7 +138,7 @@ func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, sk ok := p.adminCNSIRecordExists(apiEndpoint) if ok { // a record with the same api endpoint was found - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusBadRequest, "Can not register same endpoint multiple times", "Can not register same endpoint multiple times", @@ -141,7 +148,7 @@ func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, sk // get all endpoints determined by the APIEndpoint duplicateEndpoints, err := p.listCNSIByAPIEndpoint(apiEndpoint) if err != nil { - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusBadRequest, "Failed to check other endpoints", "Failed to check other endpoints: %v", @@ -151,7 +158,7 @@ func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, sk for _, duplicate := range duplicateEndpoints { // cant create same system endpoint if len(duplicate.Creator) == 0 && isAdmin && createSystemEndpoint { - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusBadRequest, "Can not register same system endpoint multiple times", "Can not register same system endpoint multiple times", @@ -160,7 +167,7 @@ func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, sk // cant create same user endpoint if duplicate.Creator == userId { - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusBadRequest, "Can not register same endpoint multiple times", "Can not register same endpoint multiple times", @@ -182,13 +189,13 @@ func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, sk newCNSI, _, err := fetchInfo(apiEndpoint, skipSSLValidation) if err != nil { if ok, detail := isSSLRelatedError(err); ok { - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusForbidden, "SSL error - "+detail, "There is a problem with the server Certificate - %s", detail) } - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusBadRequest, "Failed to validate endpoint", "Failed to validate endpoint: %v", @@ -214,8 +221,8 @@ func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, sk // Notify plugins if they support the notification interface for _, plugin := range p.Plugins { - if notifier, ok := plugin.(interfaces.EndpointNotificationPlugin); ok { - notifier.OnEndpointNotification(interfaces.EndpointRegisterAction, &newCNSI) + if notifier, ok := plugin.(api.EndpointNotificationPlugin); ok { + notifier.OnEndpointNotification(api.EndpointRegisterAction, &newCNSI) } } @@ -230,8 +237,8 @@ func (p *portalProxy) DoRegisterEndpoint(cnsiName string, apiEndpoint string, sk // @Produce json // @Param id path string true "Endpoint GUID" // @Success 200 -// @Failure 400 {object} interfaces.ErrorResponseBody "Error response" -// @Failure 401 {object} interfaces.ErrorResponseBody "Error response" +// @Failure 400 {object} api.ErrorResponseBody "Error response" +// @Failure 401 {object} api.ErrorResponseBody "Error response" // @Security ApiKeyAuth // @Router /endpoints/{id} [delete] // TODO (wchrisjohnson) We need do this as a TRANSACTION, vs a set of single calls @@ -240,7 +247,7 @@ func (p *portalProxy) unregisterCluster(c echo.Context) error { log.WithField("cnsiGUID", cnsiGUID).Debug("unregisterCluster") if len(cnsiGUID) == 0 { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Missing target endpoint", "Need CNSI GUID passed as form param") @@ -263,7 +270,7 @@ func (p *portalProxy) doUnregisterCluster(cnsiGUID string) error { return nil } -func (p *portalProxy) buildCNSIList(c echo.Context) ([]*interfaces.CNSIRecord, error) { +func (p *portalProxy) buildCNSIList(c echo.Context) ([]*api.CNSIRecord, error) { log.Debug("buildCNSIList") if p.GetConfig().UserEndpointsEnabled != config.UserEndpointsConfigEnum.Disabled { @@ -288,7 +295,7 @@ func (p *portalProxy) buildCNSIList(c echo.Context) ([]*interfaces.CNSIRecord, e return unfilteredList, err } - filteredList := []*interfaces.CNSIRecord{} + filteredList := []*api.CNSIRecord{} for _, endpoint := range unfilteredList { duplicateSystemEndpoint := false @@ -316,9 +323,9 @@ func (p *portalProxy) buildCNSIList(c echo.Context) ([]*interfaces.CNSIRecord, e return p.ListAdminEndpoints("") } -func (p *portalProxy) ListEndpoints() ([]*interfaces.CNSIRecord, error) { +func (p *portalProxy) ListEndpoints() ([]*api.CNSIRecord, error) { log.Debug("ListEndpoints") - var cnsiList []*interfaces.CNSIRecord + var cnsiList []*api.CNSIRecord var err error cnsiRepo, err := p.GetStoreFactory().EndpointStore() @@ -335,10 +342,10 @@ func (p *portalProxy) ListEndpoints() ([]*interfaces.CNSIRecord, error) { } // ListAdminEndpoints - return a CNSI list with endpoints created by the current user and all admins -func (p *portalProxy) ListAdminEndpoints(userID string) ([]*interfaces.CNSIRecord, error) { +func (p *portalProxy) ListAdminEndpoints(userID string) ([]*api.CNSIRecord, error) { log.Debug("ListAdminEndpoints") // Initialise cnsiList to ensure empty struct (marshals to null) is not returned - cnsiList := []*interfaces.CNSIRecord{} + cnsiList := []*api.CNSIRecord{} var userList []string var err error @@ -364,11 +371,11 @@ func (p *portalProxy) ListAdminEndpoints(userID string) ([]*interfaces.CNSIRecor } // listCNSIByAPIEndpoint - receives a URL as string -func (p *portalProxy) listCNSIByAPIEndpoint(apiEndpoint string) ([]*interfaces.CNSIRecord, error) { +func (p *portalProxy) listCNSIByAPIEndpoint(apiEndpoint string) ([]*api.CNSIRecord, error) { log.Debug("listCNSIByAPIEndpoint") var err error - cnsiList := []*interfaces.CNSIRecord{} + cnsiList := []*api.CNSIRecord{} cnsiRepo, err := p.GetStoreFactory().EndpointStore() if err != nil { @@ -393,16 +400,16 @@ func (p *portalProxy) listCNSIByAPIEndpoint(apiEndpoint string) ([]*interfaces.C // @Description // @Accept x-www-form-urlencoded // @Produce json -// @Success 200 {array} interfaces.CNSIRecord "List of endpoints" -// @Failure 400 {object} interfaces.ErrorResponseBody "Error response" -// @Failure 401 {object} interfaces.ErrorResponseBody "Error response" +// @Success 200 {array} api.CNSIRecord "List of endpoints" +// @Failure 400 {object} api.ErrorResponseBody "Error response" +// @Failure 401 {object} api.ErrorResponseBody "Error response" // @Security ApiKeyAuth // @Router /endpoints [get] func (p *portalProxy) listCNSIs(c echo.Context) error { log.Debug("listCNSIs") cnsiList, err := p.buildCNSIList(c) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Failed to retrieve list of CNSIs", "Failed to retrieve list of CNSIs: %v", err, @@ -423,7 +430,7 @@ func (p *portalProxy) listRegisteredCNSIs(c echo.Context) error { log.Debug("listRegisteredCNSIs") userGUIDIntf, err := p.GetSessionValue(c, "user_id") if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "User session could not be found", "User session could not be found: %v", err, @@ -437,11 +444,11 @@ func (p *portalProxy) listRegisteredCNSIs(c echo.Context) error { } var jsonString []byte - var clusterList []*interfaces.ConnectedEndpoint + var clusterList []*api.ConnectedEndpoint clusterList, err = cnsiRepo.ListByUser(userGUID) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Failed to retrieve list of clusters", "Failed to retrieve list of clusters: %v", err, @@ -458,11 +465,11 @@ func (p *portalProxy) listRegisteredCNSIs(c echo.Context) error { return nil } -func marshalCNSIlist(cnsiList []*interfaces.CNSIRecord) ([]byte, error) { +func marshalCNSIlist(cnsiList []*api.CNSIRecord) ([]byte, error) { log.Debug("marshalCNSIlist") jsonString, err := json.Marshal(cnsiList) if err != nil { - return nil, interfaces.NewHTTPShadowError( + return nil, api.NewHTTPShadowError( http.StatusBadRequest, "Failed to retrieve list of CNSIs", "Failed to retrieve list of CNSIs: %v", err, @@ -471,11 +478,11 @@ func marshalCNSIlist(cnsiList []*interfaces.CNSIRecord) ([]byte, error) { return jsonString, nil } -func marshalClusterList(clusterList []*interfaces.ConnectedEndpoint) ([]byte, error) { +func marshalClusterList(clusterList []*api.ConnectedEndpoint) ([]byte, error) { log.Debug("marshalClusterList") jsonString, err := json.Marshal(clusterList) if err != nil { - return nil, interfaces.NewHTTPShadowError( + return nil, api.NewHTTPShadowError( http.StatusBadRequest, "Failed to retrieve list of clusters", "Failed to retrieve list of clusters: %v", err, @@ -495,7 +502,7 @@ func (p *portalProxy) UpdateEndpointMetadata(guid string, metadata string) error err = cnsiRepo.UpdateMetadata(guid, metadata) if err != nil { - msg := "Unable to update endpoint metadata: %v" + msg := "unable to update endpoint metadata: %v" log.Errorf(msg, err) return fmt.Errorf(msg, err) } @@ -503,16 +510,16 @@ func (p *portalProxy) UpdateEndpointMetadata(guid string, metadata string) error return nil } -func (p *portalProxy) GetCNSIRecord(guid string) (interfaces.CNSIRecord, error) { +func (p *portalProxy) GetCNSIRecord(guid string) (api.CNSIRecord, error) { log.Debug("GetCNSIRecord") cnsiRepo, err := p.GetStoreFactory().EndpointStore() if err != nil { - return interfaces.CNSIRecord{}, err + return api.CNSIRecord{}, err } rec, err := cnsiRepo.Find(guid, p.Config.EncryptionKeyInBytes) if err != nil { - return interfaces.CNSIRecord{}, err + return api.CNSIRecord{}, err } // Ensure that trailing slash is removed from the API Endpoint @@ -521,13 +528,13 @@ func (p *portalProxy) GetCNSIRecord(guid string) (interfaces.CNSIRecord, error) return rec, nil } -func (p *portalProxy) GetAdminCNSIRecordByEndpoint(endpoint string) (interfaces.CNSIRecord, error) { +func (p *portalProxy) GetAdminCNSIRecordByEndpoint(endpoint string) (api.CNSIRecord, error) { log.Debug("GetAdminCNSIRecordByEndpoint") - var rec *interfaces.CNSIRecord + var rec *api.CNSIRecord endpointList, err := p.listCNSIByAPIEndpoint(endpoint) if err != nil { - return interfaces.CNSIRecord{}, err + return api.CNSIRecord{}, err } // search for endpoint created by an admin @@ -538,7 +545,7 @@ func (p *portalProxy) GetAdminCNSIRecordByEndpoint(endpoint string) (interfaces. } if rec == nil { - return interfaces.CNSIRecord{}, fmt.Errorf("Can not find admin CNSIRecord by given endpoint") + return api.CNSIRecord{}, fmt.Errorf("can not find admin CNSIRecord by given endpoint") } // Ensure that trailing slash is removed from the API Endpoint @@ -554,7 +561,7 @@ func (p *portalProxy) adminCNSIRecordExists(apiEndpoint string) bool { return err == nil } -func (p *portalProxy) setCNSIRecord(guid string, c interfaces.CNSIRecord) error { +func (p *portalProxy) setCNSIRecord(guid string, c api.CNSIRecord) error { log.Debug("setCNSIRecord") cnsiRepo, err := p.GetStoreFactory().EndpointStore() if err != nil { @@ -564,7 +571,7 @@ func (p *portalProxy) setCNSIRecord(guid string, c interfaces.CNSIRecord) error err = cnsiRepo.Save(guid, c, p.Config.EncryptionKeyInBytes) if err != nil { - msg := "Unable to save a CNSI Token: %v" + msg := "unable to save a CNSI Token: %v" log.Errorf(msg, err) return fmt.Errorf(msg, err) } @@ -586,7 +593,7 @@ func (p *portalProxy) unsetCNSIRecord(guid string) error { // Delete the endpoint err = cnsiRepo.Delete(guid) if err != nil { - msg := "Unable to delete a CNSI record: %v" + msg := "unable to delete a CNSI record: %v" log.Errorf(msg, err) return fmt.Errorf(msg, err) } @@ -594,8 +601,8 @@ func (p *portalProxy) unsetCNSIRecord(guid string) error { if lookupErr == nil { // Notify plugins if they support the notification interface for _, plugin := range p.Plugins { - if notifier, ok := plugin.(interfaces.EndpointNotificationPlugin); ok { - notifier.OnEndpointNotification(interfaces.EndpointUnregisterAction, &endpoint) + if notifier, ok := plugin.(api.EndpointNotificationPlugin); ok { + notifier.OnEndpointNotification(api.EndpointUnregisterAction, &endpoint) } } } @@ -603,7 +610,7 @@ func (p *portalProxy) unsetCNSIRecord(guid string) error { return nil } -func (p *portalProxy) SaveEndpointToken(cnsiGUID string, userGUID string, tokenRecord interfaces.TokenRecord) error { +func (p *portalProxy) SaveEndpointToken(cnsiGUID string, userGUID string, tokenRecord api.TokenRecord) error { log.Debug("SaveEndpointToken") tokenRepo, err := p.GetStoreFactory().TokenStore() if err != nil { @@ -623,37 +630,37 @@ func (p *portalProxy) DeleteEndpointToken(cnsiGUID string, userGUID string) erro return tokenRepo.DeleteCNSIToken(cnsiGUID, userGUID) } -func (p *portalProxy) GetCNSITokenRecord(cnsiGUID string, userGUID string) (interfaces.TokenRecord, bool) { +func (p *portalProxy) GetCNSITokenRecord(cnsiGUID string, userGUID string) (api.TokenRecord, bool) { log.Debug("GetCNSITokenRecord") tokenRepo, err := p.GetStoreFactory().TokenStore() if err != nil { - return interfaces.TokenRecord{}, false + return api.TokenRecord{}, false } tr, err := tokenRepo.FindCNSIToken(cnsiGUID, userGUID, p.Config.EncryptionKeyInBytes) if err != nil { - return interfaces.TokenRecord{}, false + return api.TokenRecord{}, false } return tr, true } -func (p *portalProxy) GetCNSITokenRecordWithDisconnected(cnsiGUID string, userGUID string) (interfaces.TokenRecord, bool) { +func (p *portalProxy) GetCNSITokenRecordWithDisconnected(cnsiGUID string, userGUID string) (api.TokenRecord, bool) { log.Debug("GetCNSITokenRecordWithDisconnected") tokenRepo, err := p.GetStoreFactory().TokenStore() if err != nil { - return interfaces.TokenRecord{}, false + return api.TokenRecord{}, false } tr, err := tokenRepo.FindCNSITokenIncludeDisconnected(cnsiGUID, userGUID, p.Config.EncryptionKeyInBytes) if err != nil { - return interfaces.TokenRecord{}, false + return api.TokenRecord{}, false } return tr, true } -func (p *portalProxy) ListEndpointsByUser(userGUID string) ([]*interfaces.ConnectedEndpoint, error) { +func (p *portalProxy) ListEndpointsByUser(userGUID string) ([]*api.ConnectedEndpoint, error) { log.Debug("ListCEndpointsByUser") cnsiRepo, err := p.GetStoreFactory().EndpointStore() if err != nil { @@ -671,7 +678,7 @@ func (p *portalProxy) ListEndpointsByUser(userGUID string) ([]*interfaces.Connec } // Uopdate the Access Token, Refresh Token and Token Expiry for a token -func (p *portalProxy) updateTokenAuth(userGUID string, t interfaces.TokenRecord) error { +func (p *portalProxy) updateTokenAuth(userGUID string, t api.TokenRecord) error { log.Debug("updateTokenAuth") tokenRepo, err := p.GetStoreFactory().TokenStore() if err != nil { @@ -681,7 +688,7 @@ func (p *portalProxy) updateTokenAuth(userGUID string, t interfaces.TokenRecord) err = tokenRepo.UpdateTokenAuth(userGUID, t, p.Config.EncryptionKeyInBytes) if err != nil { - msg := "Unable to update Token: %v" + msg := "unable to update Token: %v" log.Errorf(msg, err) return fmt.Errorf(msg, err) } @@ -689,7 +696,7 @@ func (p *portalProxy) updateTokenAuth(userGUID string, t interfaces.TokenRecord) return nil } -func (p *portalProxy) setCNSITokenRecord(cnsiGUID string, userGUID string, t interfaces.TokenRecord) error { +func (p *portalProxy) setCNSITokenRecord(cnsiGUID string, userGUID string, t api.TokenRecord) error { log.Debug("setCNSITokenRecord") tokenRepo, err := p.GetStoreFactory().TokenStore() if err != nil { @@ -699,7 +706,7 @@ func (p *portalProxy) setCNSITokenRecord(cnsiGUID string, userGUID string, t int err = tokenRepo.SaveCNSIToken(cnsiGUID, userGUID, t, p.Config.EncryptionKeyInBytes) if err != nil { - msg := "Unable to save a CNSI Token: %v" + msg := "unable to save a CNSI Token: %v" log.Errorf(msg, err) return fmt.Errorf(msg, err) } @@ -711,14 +718,14 @@ func (p *portalProxy) unsetCNSITokenRecord(cnsiGUID string, userGUID string) err log.Debug("unsetCNSITokenRecord") tokenRepo, err := p.GetStoreFactory().TokenStore() if err != nil { - msg := "Unable to establish a database reference: '%v'" + msg := "unable to establish a database reference: '%v'" log.Errorf(msg, err) return fmt.Errorf(msg, err) } err = tokenRepo.DeleteCNSIToken(cnsiGUID, userGUID) if err != nil { - msg := "Unable to delete a CNSI Token: %v" + msg := "unable to delete a CNSI Token: %v" log.Errorf(msg, err) return fmt.Errorf(msg, err) } @@ -730,14 +737,14 @@ func (p *portalProxy) unsetCNSITokenRecords(cnsiGUID string) error { log.Debug("unsetCNSITokenRecord") tokenRepo, err := p.GetStoreFactory().TokenStore() if err != nil { - msg := "Unable to establish a database reference: '%v'" + msg := "unable to establish a database reference: '%v'" log.Errorf(msg, err) return fmt.Errorf(msg, err) } err = tokenRepo.DeleteCNSITokens(cnsiGUID) if err != nil { - msg := "Unable to delete a CNSI Token: %v" + msg := "unable to delete a CNSI Token: %v" log.Errorf(msg, err) return fmt.Errorf(msg, err) } @@ -759,21 +766,21 @@ func (p *portalProxy) unsetCNSITokenRecords(cnsiGUID string) error { // @Param clientSecret formData string false "Client secret" // @Param allowSSO formData string false "Allow SSO" Enums(true, false) // @Success 200 -// @Failure 400 {object} interfaces.ErrorResponseBody "Error response" -// @Failure 401 {object} interfaces.ErrorResponseBody "Error response" +// @Failure 400 {object} api.ErrorResponseBody "Error response" +// @Failure 401 {object} api.ErrorResponseBody "Error response" // @Security ApiKeyAuth // @Router /endpoints/{id} [post] func (p *portalProxy) updateEndpoint(ec echo.Context) error { log.Debug("updateEndpoint") - params := new(interfaces.UpdateEndpointParams) + params := new(api.UpdateEndpointParams) if err := ec.Bind(params); err != nil { return err } // Check we have an ID if len(params.ID) == 0 { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Missing target endpoint", "Need Endpoint ID") @@ -787,7 +794,7 @@ func (p *portalProxy) updateEndpoint(ec echo.Context) error { endpoint, err := cnsiRepo.Find(params.ID, p.Config.EncryptionKeyInBytes) if err != nil { - return fmt.Errorf("Could not find the endpoint %s: '%v'", params.ID, err) + return fmt.Errorf("could not find the endpoint %s: '%v'", params.ID, err) } updates := false @@ -812,18 +819,18 @@ func (p *portalProxy) updateEndpoint(ec echo.Context) error { // Skip SSL validation is OFF - so check we can communicate with the endpoint plugin, err := p.GetEndpointTypeSpec(endpoint.CNSIType) if err != nil { - return fmt.Errorf("Can not get endpoint type for %s: '%v'", endpoint.CNSIType, err) + return fmt.Errorf("can not get endpoint type for %s: '%v'", endpoint.CNSIType, err) } _, _, err = plugin.Info(endpoint.APIEndpoint.String(), endpoint.SkipSSLValidation) if err != nil { if ok, detail := isSSLRelatedError(err); ok { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusForbidden, "SSL error - "+detail, "There is a problem with the server Certificate - %s", detail) } - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, fmt.Sprintf("Could not validate endpoint: %v", err), "Could not validate endpoint: %v", @@ -862,14 +869,14 @@ func (p *portalProxy) updateEndpoint(ec echo.Context) error { if updates { err := cnsiRepo.Update(endpoint, p.Config.EncryptionKeyInBytes) if err != nil { - return fmt.Errorf("Could not update the endpoint %s: '%v'", params.ID, err) + return fmt.Errorf("could not update the endpoint %s: '%v'", params.ID, err) } } // Notify plugins if they support the notification interface for _, plugin := range p.Plugins { - if notifier, ok := plugin.(interfaces.EndpointNotificationPlugin); ok { - notifier.OnEndpointNotification(interfaces.EndpointUpdateAction, &endpoint) + if notifier, ok := plugin.(api.EndpointNotificationPlugin); ok { + notifier.OnEndpointNotification(api.EndpointUpdateAction, &endpoint) } } diff --git a/src/jetstream/cnsi_test.go b/src/jetstream/cnsi_test.go index a365890d3a..a81a81442c 100644 --- a/src/jetstream/cnsi_test.go +++ b/src/jetstream/cnsi_test.go @@ -7,9 +7,9 @@ import ( "testing" "time" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/mock_interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" + mock_api "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/mock" "github.com/golang/mock/gomock" _ "github.com/satori/go.uuid" . "github.com/smartystreets/goconvey/convey" @@ -84,7 +84,7 @@ func TestRegisterCFClusterWithMissingName(t *testing.T) { } } -func getCFPlugin(p *portalProxy, endpointType string) interfaces.EndpointPlugin { +func getCFPlugin(p *portalProxy, endpointType string) api.EndpointPlugin { for _, plugin := range p.Plugins { endpointPlugin, err := plugin.GetEndpointPlugin() @@ -278,7 +278,7 @@ func TestRegisterWithUserEndpointsEnabled(t *testing.T) { // mock StratosAuthService ctrl := gomock.NewController(t) - mockStratosAuth := mock_interfaces.NewMockStratosAuth(ctrl) + mockStratosAuth := mock_api.NewMockStratosAuth(ctrl) defer ctrl.Finish() // setup mock DB, PortalProxy and mock StratosAuthService @@ -388,7 +388,7 @@ func TestRegisterWithUserEndpointsEnabled(t *testing.T) { dberr := mock.ExpectationsWereMet() Convey("should fail ", func() { - So(err, ShouldResemble, interfaces.NewHTTPShadowError( + So(err, ShouldResemble, api.NewHTTPShadowError( http.StatusBadRequest, "Can not register same system endpoint multiple times", "Can not register same system endpoint multiple times", @@ -454,7 +454,7 @@ func TestRegisterWithUserEndpointsEnabled(t *testing.T) { dberr := mock.ExpectationsWereMet() Convey("there should be no error", func() { - So(err, ShouldResemble, interfaces.NewHTTPShadowError( + So(err, ShouldResemble, api.NewHTTPShadowError( http.StatusBadRequest, "Can not register same endpoint multiple times", "Can not register same endpoint multiple times", @@ -543,7 +543,7 @@ func TestRegisterWithUserEndpointsEnabled(t *testing.T) { dberr := mock.ExpectationsWereMet() Convey("should fail ", func() { - So(err, ShouldResemble, interfaces.NewHTTPShadowError( + So(err, ShouldResemble, api.NewHTTPShadowError( http.StatusBadRequest, "Can not register same endpoint multiple times", "Can not register same endpoint multiple times", @@ -575,7 +575,7 @@ func TestRegisterWithUserEndpointsEnabled(t *testing.T) { dberr := mock.ExpectationsWereMet() Convey("should fail ", func() { - So(err, ShouldResemble, interfaces.NewHTTPShadowError( + So(err, ShouldResemble, api.NewHTTPShadowError( http.StatusBadRequest, "Can not register same endpoint multiple times", "Can not register same endpoint multiple times", @@ -600,7 +600,7 @@ func TestListCNSIsWithUserEndpointsEnabled(t *testing.T) { // mock StratosAuthService ctrl := gomock.NewController(t) - mockStratosAuth := mock_interfaces.NewMockStratosAuth(ctrl) + mockStratosAuth := mock_api.NewMockStratosAuth(ctrl) defer ctrl.Finish() // setup mock DB, PortalProxy and mock StratosAuthService diff --git a/src/jetstream/custom_errors/constants/constants.go b/src/jetstream/custom_errors/constants/constants.go new file mode 100644 index 0000000000..f7dcacc278 --- /dev/null +++ b/src/jetstream/custom_errors/constants/constants.go @@ -0,0 +1,7 @@ +package constants + +const ( + ERR_GOOSE_DB_NO_DATABASE_VERSIONS_FOUND = "pgsql_goosedb: no database versions found" + ERR_GOOSE_DB_NO_SUCH_TABLE = "pgsql_goosedb: no such table" + ERR_GOOSE_DB_FAILED_GETTING_CURRENT_DATABASE_VERSION = "pgsql_goosedb: error trying to get current database version: %w" +) diff --git a/src/jetstream/custom_errors/custom_errors.go b/src/jetstream/custom_errors/custom_errors.go new file mode 100644 index 0000000000..961b646bae --- /dev/null +++ b/src/jetstream/custom_errors/custom_errors.go @@ -0,0 +1,26 @@ +package custom_errors + +import ( + "fmt" + + "github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_errors/constants" +) + +type GooseDBNoDatabaseVersionsFoundError struct{} + +func (e GooseDBNoDatabaseVersionsFoundError) Error() string { + return constants.ERR_GOOSE_DB_NO_DATABASE_VERSIONS_FOUND +} + +type GooseDBNoSuchTableError struct{} + +func (e GooseDBNoSuchTableError) Error() string { + return constants.ERR_GOOSE_DB_NO_SUCH_TABLE +} + +func ErrGettingCurrentVersion(err error) error { + return fmt.Errorf(constants.ERR_GOOSE_DB_FAILED_GETTING_CURRENT_DATABASE_VERSION, err) +} + +var ErrNoDatabaseVersionsFound = GooseDBNoDatabaseVersionsFoundError{} +var ErrNoSuchTable = GooseDBNoSuchTableError{} diff --git a/src/jetstream/datastore/20170818120003_InitialSchema.go b/src/jetstream/datastore/20170818120003_InitialSchema.go index d90ba0ab94..858d144d5e 100644 --- a/src/jetstream/datastore/20170818120003_InitialSchema.go +++ b/src/jetstream/datastore/20170818120003_InitialSchema.go @@ -2,81 +2,85 @@ package datastore import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20170818120003, "InitialSchema", func(txn *sql.Tx, conf *goose.DBConf) error { - binaryDataType := "BYTEA" - if strings.Contains(conf.Driver.Name, "mysql") { - binaryDataType = "BLOB" - } + goose.AddMigration(Up20170818120003, nil) +} + +func Up20170818120003(txn *sql.Tx) error { + dialect := goose.GetDialect() + + binaryDataType := "BYTEA" + + if _, ok := dialect.(*goose.MySQLDialect); ok { + binaryDataType = "BLOB" + } - createTokens := "CREATE TABLE IF NOT EXISTS tokens (" - createTokens += "user_guid VARCHAR(36) NOT NULL, " - createTokens += "cnsi_guid VARCHAR(36), " - createTokens += "token_type VARCHAR(4) NOT NULL, " - createTokens += "auth_token " + binaryDataType + " NOT NULL, " - createTokens += "refresh_token " + binaryDataType + " NOT NULL, " - createTokens += "token_expiry BIGINT NOT NULL, " - createTokens += "last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)" + createTokens := "CREATE TABLE IF NOT EXISTS tokens (" + createTokens += "user_guid VARCHAR(36) NOT NULL, " + createTokens += "cnsi_guid VARCHAR(36), " + createTokens += "token_type VARCHAR(4) NOT NULL, " + createTokens += "auth_token " + binaryDataType + " NOT NULL, " + createTokens += "refresh_token " + binaryDataType + " NOT NULL, " + createTokens += "token_expiry BIGINT NOT NULL, " + createTokens += "last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)" - if strings.Contains(conf.Driver.Name, "postgres") { - createTokens += " WITH (OIDS=FALSE);" - } else { - createTokens += ";" - } + if _, ok := dialect.(*goose.PostgresDialect); ok { + createTokens += " WITH (OIDS=FALSE);" + } else { + createTokens += ";" + } - _, err := txn.Exec(createTokens) - if err != nil { - return err - } + _, err := txn.Exec(createTokens) + if err != nil { + return err + } - createCnsisTable := "CREATE TABLE IF NOT EXISTS cnsis (" - createCnsisTable += "guid VARCHAR(36) NOT NULL UNIQUE," - createCnsisTable += "name VARCHAR(255) NOT NULL," - createCnsisTable += "cnsi_type VARCHAR(3) NOT NULL," - createCnsisTable += "api_endpoint VARCHAR(255) NOT NULL," - createCnsisTable += "auth_endpoint VARCHAR(255) NOT NULL," - createCnsisTable += "token_endpoint VARCHAR(255) NOT NULL," - createCnsisTable += "doppler_logging_endpoint VARCHAR(255) NOT NULL," - createCnsisTable += "skip_ssl_validation BOOLEAN NOT NULL DEFAULT FALSE," - createCnsisTable += "last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," - createCnsisTable += "PRIMARY KEY (guid) );" + createCnsisTable := "CREATE TABLE IF NOT EXISTS cnsis (" + createCnsisTable += "guid VARCHAR(36) NOT NULL UNIQUE," + createCnsisTable += "name VARCHAR(255) NOT NULL," + createCnsisTable += "cnsi_type VARCHAR(3) NOT NULL," + createCnsisTable += "api_endpoint VARCHAR(255) NOT NULL," + createCnsisTable += "auth_endpoint VARCHAR(255) NOT NULL," + createCnsisTable += "token_endpoint VARCHAR(255) NOT NULL," + createCnsisTable += "doppler_logging_endpoint VARCHAR(255) NOT NULL," + createCnsisTable += "skip_ssl_validation BOOLEAN NOT NULL DEFAULT FALSE," + createCnsisTable += "last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + createCnsisTable += "PRIMARY KEY (guid) );" - _, err = txn.Exec(createCnsisTable) - if err != nil { - return err - } + _, err = txn.Exec(createCnsisTable) + if err != nil { + return err + } - createIndex := "CREATE INDEX tokens_user_guid ON tokens (user_guid);" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } - createIndex = "CREATE INDEX tokens_cnsi_guid ON tokens (cnsi_guid);" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } - createIndex = "CREATE INDEX tokens_token_type ON tokens (token_type);" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } - createIndex = "CREATE INDEX cnsis_name ON cnsis (name);" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } - createIndex = "CREATE INDEX cnsis_cnsi_type ON cnsis (cnsi_type);" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } + createIndex := "CREATE INDEX tokens_user_guid ON tokens (user_guid);" + _, err = txn.Exec(createIndex) + if err != nil { + return err + } + createIndex = "CREATE INDEX tokens_cnsi_guid ON tokens (cnsi_guid);" + _, err = txn.Exec(createIndex) + if err != nil { + return err + } + createIndex = "CREATE INDEX tokens_token_type ON tokens (token_type);" + _, err = txn.Exec(createIndex) + if err != nil { + return err + } + createIndex = "CREATE INDEX cnsis_name ON cnsis (name);" + _, err = txn.Exec(createIndex) + if err != nil { + return err + } + createIndex = "CREATE INDEX cnsis_cnsi_type ON cnsis (cnsi_type);" + _, err = txn.Exec(createIndex) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20170818162837_SetupSchema.go b/src/jetstream/datastore/20170818162837_SetupSchema.go index a666af4b45..70f2ad1e25 100644 --- a/src/jetstream/datastore/20170818162837_SetupSchema.go +++ b/src/jetstream/datastore/20170818162837_SetupSchema.go @@ -2,37 +2,40 @@ package datastore import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20170818162837, "SetupSchema", func(txn *sql.Tx, conf *goose.DBConf) error { - consoleConfigTable := "CREATE TABLE IF NOT EXISTS console_config (" - consoleConfigTable += " uaa_endpoint VARCHAR(255) NOT NULL, " - consoleConfigTable += " console_admin_scope VARCHAR(255) NOT NULL," - consoleConfigTable += " console_client VARCHAR(255) NOT NULL," - consoleConfigTable += " console_client_secret VARCHAR(255) NOT NULL, " - consoleConfigTable += " skip_ssl_validation BOOLEAN NOT NULL DEFAULT FALSE," - consoleConfigTable += " is_setup_complete BOOLEAN NOT NULL DEFAULT FALSE," - consoleConfigTable += " last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);" - - _, err := txn.Exec(consoleConfigTable) + goose.AddMigration(Up20170818162837, nil) +} + +func Up20170818162837(txn *sql.Tx) error { + dialect := goose.GetDialect() + + consoleConfigTable := "CREATE TABLE IF NOT EXISTS console_config (" + consoleConfigTable += " uaa_endpoint VARCHAR(255) NOT NULL, " + consoleConfigTable += " console_admin_scope VARCHAR(255) NOT NULL," + consoleConfigTable += " console_client VARCHAR(255) NOT NULL," + consoleConfigTable += " console_client_secret VARCHAR(255) NOT NULL, " + consoleConfigTable += " skip_ssl_validation BOOLEAN NOT NULL DEFAULT FALSE," + consoleConfigTable += " is_setup_complete BOOLEAN NOT NULL DEFAULT FALSE," + consoleConfigTable += " last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);" + + _, err := txn.Exec(consoleConfigTable) + if err != nil { + return err + } + + // Find a way to ensure this in Mysql + if _, ok := dialect.(*goose.PostgresDialect); ok { + createIndex := "CREATE UNIQUE INDEX console_config_one_row" + createIndex += " ON console_config((uaa_endpoint IS NOT NULL));" + _, err = txn.Exec(createIndex) if err != nil { return err } + } - // Find a way to ensure this in Mysql - if strings.Contains(conf.Driver.Name, "postgres") { - createIndex := "CREATE UNIQUE INDEX console_config_one_row" - createIndex += " ON console_config((uaa_endpoint IS NOT NULL));" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } - } - - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20170829154900_TokenDisconnected.go b/src/jetstream/datastore/20170829154900_TokenDisconnected.go index 618291e179..0917ac571f 100644 --- a/src/jetstream/datastore/20170829154900_TokenDisconnected.go +++ b/src/jetstream/datastore/20170829154900_TokenDisconnected.go @@ -3,18 +3,20 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20170829154900, "TokenDisconnected", func(txn *sql.Tx, conf *goose.DBConf) error { - alterTokens := "ALTER TABLE tokens ADD COLUMN disconnected boolean NOT NULL DEFAULT FALSE;" + goose.AddMigration(Up20170829154900, nil) +} + +func Up20170829154900(txn *sql.Tx) error { + alterTokens := "ALTER TABLE tokens ADD COLUMN disconnected boolean NOT NULL DEFAULT FALSE;" - _, err := txn.Exec(alterTokens) - if err != nil { - return err - } + _, err := txn.Exec(alterTokens) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20171108102900_AuthType.go b/src/jetstream/datastore/20171108102900_AuthType.go index 63ded7ad46..c601892269 100644 --- a/src/jetstream/datastore/20171108102900_AuthType.go +++ b/src/jetstream/datastore/20171108102900_AuthType.go @@ -3,23 +3,24 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20171108102900, "AuthType", func(txn *sql.Tx, conf *goose.DBConf) error { - createTokens := "ALTER TABLE tokens ADD auth_type VARCHAR(255) DEFAULT 'OAuth2'" - _, err := txn.Exec(createTokens) - if err != nil { - return err - } + goose.AddMigration(Up20171108102900, nil) +} +func Up20171108102900(txn *sql.Tx) error { + createTokens := "ALTER TABLE tokens ADD auth_type VARCHAR(255) DEFAULT 'OAuth2'" + _, err := txn.Exec(createTokens) + if err != nil { + return err + } - createTokens = "ALTER TABLE tokens ADD meta_data TEXT" - _, err = txn.Exec(createTokens) - if err != nil { - return err - } + createTokens = "ALTER TABLE tokens ADD meta_data TEXT" + _, err = txn.Exec(createTokens) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20180413135700_MetricsSchema.go b/src/jetstream/datastore/20180413135700_MetricsSchema.go index 633656e537..5315d9dbcd 100644 --- a/src/jetstream/datastore/20180413135700_MetricsSchema.go +++ b/src/jetstream/datastore/20180413135700_MetricsSchema.go @@ -2,34 +2,37 @@ package datastore import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20180413135700, "MetricsSchema", func(txn *sql.Tx, conf *goose.DBConf) error { - if strings.Contains(conf.Driver.Name, "sqlite3") { - // SQLite does not support MODIFY on ALTER TABLE - but fortunately it doesn't mind about the column sizes - return nil - } + goose.AddMigration(Up20180413135700, nil) +} - // Special case Postgres as it has different syntax - if strings.Contains(conf.Driver.Name, "postgres") { - alterColumn := "ALTER TABLE cnsis ALTER COLUMN cnsi_type TYPE VARCHAR(16), ALTER COLUMN cnsi_type SET NOT NULL" - _, err := txn.Exec(alterColumn) - if err != nil { - return err - } - } else { - // Fallback to MySQL - alterColumn := "ALTER TABLE cnsis modify cnsi_type VARCHAR(16) NOT NULL" - _, err := txn.Exec(alterColumn) - if err != nil { - return err - } - } +func Up20180413135700(txn *sql.Tx) error { + dialect := goose.GetDialect() + if _, ok := dialect.(*goose.Sqlite3Dialect); ok { + // SQLite does not support MODIFY on ALTER TABLE - but fortunately it doesn't mind about the column sizes return nil - }) + } + + // Special case Postgres as it has different syntax + if _, ok := dialect.(*goose.PostgresDialect); ok { + alterColumn := "ALTER TABLE cnsis ALTER COLUMN cnsi_type TYPE VARCHAR(16), ALTER COLUMN cnsi_type SET NOT NULL" + _, err := txn.Exec(alterColumn) + if err != nil { + return err + } + } else { + // Fallback to MySQL + alterColumn := "ALTER TABLE cnsis modify cnsi_type VARCHAR(16) NOT NULL" + _, err := txn.Exec(alterColumn) + if err != nil { + return err + } + } + + return nil } diff --git a/src/jetstream/datastore/20180627111300_UpdateMetadata.go b/src/jetstream/datastore/20180627111300_UpdateMetadata.go index b931d5ed4e..034e1eb1f5 100644 --- a/src/jetstream/datastore/20180627111300_UpdateMetadata.go +++ b/src/jetstream/datastore/20180627111300_UpdateMetadata.go @@ -3,12 +3,14 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20180627111300, "UpdateMetadata", func(txn *sql.Tx, conf *goose.DBConf) error { - // Removed migration, the backend has been updated to deal with nullable reads in the tokens table - return nil - }) + goose.AddMigration(Up20180627111300, nil) +} + +func Up20180627111300(txn *sql.Tx) error { + // Removed migration, the backend has been updated to deal with nullable reads in the tokens table + return nil } diff --git a/src/jetstream/datastore/20180703142800_CFClient.go b/src/jetstream/datastore/20180703142800_CFClient.go index 905159d0d3..80418f2814 100644 --- a/src/jetstream/datastore/20180703142800_CFClient.go +++ b/src/jetstream/datastore/20180703142800_CFClient.go @@ -2,30 +2,34 @@ package datastore import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20180703142800, "SetupSchema", func(txn *sql.Tx, conf *goose.DBConf) error { - binaryDataType := "BYTEA" - if strings.Contains(conf.Driver.Name, "mysql") { - binaryDataType = "BLOB" - } - - alterCnsis := "ALTER TABLE cnsis ADD COLUMN client_id VARCHAR(255) NOT NULL DEFAULT 'cf';" - _, err := txn.Exec(alterCnsis) - if err != nil { - return err - } - - alterCnsis = "ALTER TABLE cnsis ADD COLUMN client_secret " + binaryDataType + ";" - _, err = txn.Exec(alterCnsis) - if err != nil { - return err - } - - return nil - }) + goose.AddMigration(Up20180703142800, nil) +} + +func Up20180703142800(txn *sql.Tx) error { + dialect := goose.GetDialect() + + binaryDataType := "BYTEA" + + if _, ok := dialect.(*goose.MySQLDialect); ok { + binaryDataType = "BLOB" + } + + alterCnsis := "ALTER TABLE cnsis ADD COLUMN client_id VARCHAR(255) NOT NULL DEFAULT 'cf';" + _, err := txn.Exec(alterCnsis) + if err != nil { + return err + } + + alterCnsis = "ALTER TABLE cnsis ADD COLUMN client_secret " + binaryDataType + ";" + _, err = txn.Exec(alterCnsis) + if err != nil { + return err + } + + return nil } diff --git a/src/jetstream/datastore/20180813110300_RemoveStaleTokens.go b/src/jetstream/datastore/20180813110300_RemoveStaleTokens.go index 9aa31beb04..6cb3fbb44b 100644 --- a/src/jetstream/datastore/20180813110300_RemoveStaleTokens.go +++ b/src/jetstream/datastore/20180813110300_RemoveStaleTokens.go @@ -3,18 +3,19 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20180813110300, "RemoveStaleTokens", func(txn *sql.Tx, conf *goose.DBConf) error { + goose.AddMigration(Up20180813110300, nil) +} - removeStaleTokens := "DELETE FROM tokens WHERE token_type='cnsi' AND cnsi_guid NOT IN (SELECT guid FROM cnsis);" - _, err := txn.Exec(removeStaleTokens) - if err != nil { - return err - } +func Up20180813110300(txn *sql.Tx) error { + removeStaleTokens := "DELETE FROM tokens WHERE token_type='cnsi' AND cnsi_guid NOT IN (SELECT guid FROM cnsis);" + _, err := txn.Exec(removeStaleTokens) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20180824092600_LinkedTokens.go b/src/jetstream/datastore/20180824092600_LinkedTokens.go index c8a1355bc0..b877846ea2 100644 --- a/src/jetstream/datastore/20180824092600_LinkedTokens.go +++ b/src/jetstream/datastore/20180824092600_LinkedTokens.go @@ -3,40 +3,41 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20180824092600, "LinkedTokens", func(txn *sql.Tx, conf *goose.DBConf) error { - - addTokenID := "ALTER TABLE tokens ADD token_guid VARCHAR(36) DEFAULT 'default-token'" - _, err := txn.Exec(addTokenID) - if err != nil { - return err - } - - addLinkedTokens := "ALTER TABLE tokens ADD linked_token VARCHAR(36)" - _, err = txn.Exec(addLinkedTokens) - if err != nil { - return err - } - - // Ensure any existing tokens have an ID - - // For UAA tokens, use the user id - ensureUAATokenID := "UPDATE tokens SET token_guid=user_guid WHERE token_guid='default-token' AND token_type='uaa'" - _, err = txn.Exec(ensureUAATokenID) - if err != nil { - return err - } - - // For CNSI tokens, use the cnsi guid - ensureCNSITokenID := "UPDATE tokens SET token_guid=cnsi_guid WHERE token_guid='default-token'" - _, err = txn.Exec(ensureCNSITokenID) - if err != nil { - return err - } - - return nil - }) + goose.AddMigration(Up20180824092600, nil) +} + +func Up20180824092600(txn *sql.Tx) error { + addTokenID := "ALTER TABLE tokens ADD token_guid VARCHAR(36) DEFAULT 'default-token'" + _, err := txn.Exec(addTokenID) + if err != nil { + return err + } + + addLinkedTokens := "ALTER TABLE tokens ADD linked_token VARCHAR(36)" + _, err = txn.Exec(addLinkedTokens) + if err != nil { + return err + } + + // Ensure any existing tokens have an ID + + // For UAA tokens, use the user id + ensureUAATokenID := "UPDATE tokens SET token_guid=user_guid WHERE token_guid='default-token' AND token_type='uaa'" + _, err = txn.Exec(ensureUAATokenID) + if err != nil { + return err + } + + // For CNSI tokens, use the cnsi guid + ensureCNSITokenID := "UPDATE tokens SET token_guid=cnsi_guid WHERE token_guid='default-token'" + _, err = txn.Exec(ensureCNSITokenID) + if err != nil { + return err + } + + return nil } diff --git a/src/jetstream/datastore/20180831104300_SSOEndpointFlag.go b/src/jetstream/datastore/20180831104300_SSOEndpointFlag.go index 2adeec6c1b..c321feab34 100644 --- a/src/jetstream/datastore/20180831104300_SSOEndpointFlag.go +++ b/src/jetstream/datastore/20180831104300_SSOEndpointFlag.go @@ -3,18 +3,19 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20180831104300, "SSOEndpointFlag", func(txn *sql.Tx, conf *goose.DBConf) error { + goose.AddMigration(Up20180831104300, nil) +} - addTokenID := "ALTER TABLE cnsis ADD sso_allowed BOOLEAN NOT NULL DEFAULT FALSE" - _, err := txn.Exec(addTokenID) - if err != nil { - return err - } +func Up20180831104300(txn *sql.Tx) error { + addTokenID := "ALTER TABLE cnsis ADD sso_allowed BOOLEAN NOT NULL DEFAULT FALSE" + _, err := txn.Exec(addTokenID) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20180907123000_SSOSetupFlag.go b/src/jetstream/datastore/20180907123000_SSOSetupFlag.go index b049cb5564..37abbcd5e9 100644 --- a/src/jetstream/datastore/20180907123000_SSOSetupFlag.go +++ b/src/jetstream/datastore/20180907123000_SSOSetupFlag.go @@ -3,18 +3,19 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20180907123000, "SSOSetupFlag", func(txn *sql.Tx, conf *goose.DBConf) error { + goose.AddMigration(Up20180907123000, nil) +} - addTokenID := "ALTER TABLE console_config ADD use_sso BOOLEAN NOT NULL DEFAULT FALSE" - _, err := txn.Exec(addTokenID) - if err != nil { - return err - } +func Up20180907123000(txn *sql.Tx) error { + addTokenID := "ALTER TABLE console_config ADD use_sso BOOLEAN NOT NULL DEFAULT FALSE" + _, err := txn.Exec(addTokenID) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20181129140500_UserFavorites.go b/src/jetstream/datastore/20181129140500_UserFavorites.go index 6707d57e70..0d031d52fb 100644 --- a/src/jetstream/datastore/20181129140500_UserFavorites.go +++ b/src/jetstream/datastore/20181129140500_UserFavorites.go @@ -3,34 +3,35 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20181129140500, "UserFavorites", func(txn *sql.Tx, conf *goose.DBConf) error { + goose.AddMigration(Up20181129140500, nil) +} - createFavoritesTable := "CREATE TABLE IF NOT EXISTS favorites (" - createFavoritesTable += "guid VARCHAR(255) NOT NULL," - createFavoritesTable += "user_guid VARCHAR(36) NOT NULL," - createFavoritesTable += "endpoint_type VARCHAR(16) NOT NULL," - createFavoritesTable += "endpoint_id VARCHAR(255) NOT NULL," - createFavoritesTable += "entity_type VARCHAR(255) NOT NULL," - createFavoritesTable += "entity_id VARCHAR(255)," - createFavoritesTable += "metadata TEXT," - createFavoritesTable += "last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," - createFavoritesTable += "PRIMARY KEY (guid, user_guid) );" +func Up20181129140500(txn *sql.Tx) error { + createFavoritesTable := "CREATE TABLE IF NOT EXISTS favorites (" + createFavoritesTable += "guid VARCHAR(255) NOT NULL," + createFavoritesTable += "user_guid VARCHAR(36) NOT NULL," + createFavoritesTable += "endpoint_type VARCHAR(16) NOT NULL," + createFavoritesTable += "endpoint_id VARCHAR(255) NOT NULL," + createFavoritesTable += "entity_type VARCHAR(255) NOT NULL," + createFavoritesTable += "entity_id VARCHAR(255)," + createFavoritesTable += "metadata TEXT," + createFavoritesTable += "last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + createFavoritesTable += "PRIMARY KEY (guid, user_guid) );" - _, err := txn.Exec(createFavoritesTable) - if err != nil { - return err - } + _, err := txn.Exec(createFavoritesTable) + if err != nil { + return err + } - createIndex := "CREATE INDEX favorites_user_guid ON favorites (user_guid);" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } + createIndex := "CREATE INDEX favorites_user_guid ON favorites (user_guid);" + _, err = txn.Exec(createIndex) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20190305144600_EndpointSubtype.go b/src/jetstream/datastore/20190305144600_EndpointSubtype.go index ba9a4fbc3a..9778df69f9 100644 --- a/src/jetstream/datastore/20190305144600_EndpointSubtype.go +++ b/src/jetstream/datastore/20190305144600_EndpointSubtype.go @@ -3,24 +3,25 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20190305144600, "EndpointSubtype", func(txn *sql.Tx, conf *goose.DBConf) error { + goose.AddMigration(Up20190305144600, nil) +} - addColumn := "ALTER TABLE cnsis ADD sub_type VARCHAR(64) DEFAULT NULL" - _, err := txn.Exec(addColumn) - if err != nil { - return err - } +func Up20190305144600(txn *sql.Tx) error { + addColumn := "ALTER TABLE cnsis ADD sub_type VARCHAR(64) DEFAULT NULL" + _, err := txn.Exec(addColumn) + if err != nil { + return err + } - addColumn = "ALTER TABLE cnsis ADD meta_data TEXT DEFAULT NULL" - _, err = txn.Exec(addColumn) - if err != nil { - return err - } + addColumn = "ALTER TABLE cnsis ADD meta_data TEXT DEFAULT NULL" + _, err = txn.Exec(addColumn) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20190515133200_AuthEndpoint.go b/src/jetstream/datastore/20190515133200_AuthEndpoint.go index 40af968b94..8be2f25b67 100644 --- a/src/jetstream/datastore/20190515133200_AuthEndpoint.go +++ b/src/jetstream/datastore/20190515133200_AuthEndpoint.go @@ -3,18 +3,19 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20190515133200, "AuthEndpoint", func(txn *sql.Tx, conf *goose.DBConf) error { + goose.AddMigration(Up20190515133200, nil) +} - addColumn := "ALTER TABLE console_config ADD auth_endpoint VARCHAR(255)" - _, err := txn.Exec(addColumn) - if err != nil { - return err - } +func Up20190515133200(txn *sql.Tx) error { + addColumn := "ALTER TABLE console_config ADD auth_endpoint VARCHAR(255)" + _, err := txn.Exec(addColumn) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20190522121200_LocalUsers.go b/src/jetstream/datastore/20190522121200_LocalUsers.go index e2e964c92f..0c33016ceb 100644 --- a/src/jetstream/datastore/20190522121200_LocalUsers.go +++ b/src/jetstream/datastore/20190522121200_LocalUsers.go @@ -2,9 +2,8 @@ package datastore import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) // NOTE: This migration script has been modified @@ -13,52 +12,57 @@ import ( // Upgrades will still remove the trigger if it exists func init() { - RegisterMigration(20190522121200, "LocalUsers", func(txn *sql.Tx, conf *goose.DBConf) error { - binaryDataType := "BYTEA" - if strings.Contains(conf.Driver.Name, "mysql") { - binaryDataType = "BLOB" - } + goose.AddMigration(Up20190522121200, nil) +} + +func Up20190522121200(txn *sql.Tx) error { + dialect := goose.GetDialect() + + binaryDataType := "BYTEA" + + if _, ok := dialect.(*goose.MySQLDialect); ok { + binaryDataType = "BLOB" + } - //Add auth_endpoint_type to console_config table - allows ability to enable local users. - addColumn := "ALTER TABLE console_config ADD auth_endpoint_type VARCHAR(255);" - _, err := txn.Exec(addColumn) - if err != nil { - return err - } + //Add auth_endpoint_type to console_config table - allows ability to enable local users. + addColumn := "ALTER TABLE console_config ADD auth_endpoint_type VARCHAR(255);" + _, err := txn.Exec(addColumn) + if err != nil { + return err + } - createLocalUsers := "CREATE TABLE IF NOT EXISTS local_users (" - createLocalUsers += "user_guid VARCHAR(36) UNIQUE NOT NULL, " - createLocalUsers += "password_hash " + binaryDataType + " NOT NULL, " - createLocalUsers += "user_name VARCHAR(128) UNIQUE NOT NULL, " - createLocalUsers += "user_email VARCHAR(254), " - createLocalUsers += "user_scope VARCHAR(64), " - createLocalUsers += "last_login TIMESTAMP, " - createLocalUsers += "last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " - createLocalUsers += "PRIMARY KEY (user_guid) )" + createLocalUsers := "CREATE TABLE IF NOT EXISTS local_users (" + createLocalUsers += "user_guid VARCHAR(36) UNIQUE NOT NULL, " + createLocalUsers += "password_hash " + binaryDataType + " NOT NULL, " + createLocalUsers += "user_name VARCHAR(128) UNIQUE NOT NULL, " + createLocalUsers += "user_email VARCHAR(254), " + createLocalUsers += "user_scope VARCHAR(64), " + createLocalUsers += "last_login TIMESTAMP, " + createLocalUsers += "last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " + createLocalUsers += "PRIMARY KEY (user_guid) )" - //Configure Postgres migration options - if strings.Contains(conf.Driver.Name, "postgres") { - createLocalUsers += " WITH (OIDS=FALSE);" - } else { - createLocalUsers += ";" - } + //Configure Postgres migration options + if _, ok := dialect.(*goose.PostgresDialect); ok { + createLocalUsers += " WITH (OIDS=FALSE);" + } else { + createLocalUsers += ";" + } - _, err = txn.Exec(createLocalUsers) - if err != nil { - return err - } + _, err = txn.Exec(createLocalUsers) + if err != nil { + return err + } - createIndex := "CREATE INDEX local_users_user_guid ON local_users (user_guid);" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } - createIndex = "CREATE INDEX local_users_user_name ON local_users (user_name);" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } + createIndex := "CREATE INDEX local_users_user_guid ON local_users (user_guid);" + _, err = txn.Exec(createIndex) + if err != nil { + return err + } + createIndex = "CREATE INDEX local_users_user_name ON local_users (user_name);" + _, err = txn.Exec(createIndex) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20190621212700_ConfigSchema.go b/src/jetstream/datastore/20190621212700_ConfigSchema.go index b31842b3f3..d2f394d52a 100644 --- a/src/jetstream/datastore/20190621212700_ConfigSchema.go +++ b/src/jetstream/datastore/20190621212700_ConfigSchema.go @@ -3,30 +3,32 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20190621212700, "ConfigSchema", func(txn *sql.Tx, conf *goose.DBConf) error { - configTable := "CREATE TABLE IF NOT EXISTS config (" - configTable += " groupName VARCHAR(255) NOT NULL, " - configTable += " name VARCHAR(255) NOT NULL, " - configTable += " value VARCHAR(255) NOT NULL," - configTable += " last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);" - - _, err := txn.Exec(configTable) - if err != nil { - return err - } - - // Add a marker to the new table so that later we know we need to migrate the old data to the new table - addMarker := "INSERT INTO config (groupName, name, value) VALUES ('system', '__CONFIG_MIGRATION_NEEDED', 'true')" - - _, err = txn.Exec(addMarker) - if err != nil { - return err - } - - return nil - }) + goose.AddMigration(Up20190621212700, nil) +} + +func Up20190621212700(txn *sql.Tx) error { + configTable := "CREATE TABLE IF NOT EXISTS config (" + configTable += " groupName VARCHAR(255) NOT NULL, " + configTable += " name VARCHAR(255) NOT NULL, " + configTable += " value VARCHAR(255) NOT NULL," + configTable += " last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);" + + _, err := txn.Exec(configTable) + if err != nil { + return err + } + + // Add a marker to the new table so that later we know we need to migrate the old data to the new table + addMarker := "INSERT INTO config (groupName, name, value) VALUES ('system', '__CONFIG_MIGRATION_NEEDED', 'true')" + + _, err = txn.Exec(addMarker) + if err != nil { + return err + } + + return nil } diff --git a/src/jetstream/datastore/20190918092300_LocalUsersUpdates.go b/src/jetstream/datastore/20190918092300_LocalUsersUpdates.go index 1c5517b90d..5099f2079d 100644 --- a/src/jetstream/datastore/20190918092300_LocalUsersUpdates.go +++ b/src/jetstream/datastore/20190918092300_LocalUsersUpdates.go @@ -3,31 +3,32 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - - RegisterMigration(20190918092300, "LocalUsersUpdates", func(txn *sql.Tx, conf *goose.DBConf) error { - addGivenNameColumn := "ALTER TABLE local_users ADD given_name VARCHAR(128);" - _, err := txn.Exec(addGivenNameColumn) - if err != nil { - return err - } + goose.AddMigration(Up20190918092300, nil) +} + +func Up20190918092300(txn *sql.Tx) error { + addGivenNameColumn := "ALTER TABLE local_users ADD given_name VARCHAR(128);" + _, err := txn.Exec(addGivenNameColumn) + if err != nil { + return err + } - addFamilyNameColumn := "ALTER TABLE local_users ADD family_name VARCHAR(128);" - _, err = txn.Exec(addFamilyNameColumn) - if err != nil { - return err - } + addFamilyNameColumn := "ALTER TABLE local_users ADD family_name VARCHAR(128);" + _, err = txn.Exec(addFamilyNameColumn) + if err != nil { + return err + } - // All existing data will not have values, so set to defaults - populate := "UPDATE local_users SET given_name='Admin', family_name='User'" - _, err = txn.Exec(populate) - if err != nil { - return err - } + // All existing data will not have values, so set to defaults + populate := "UPDATE local_users SET given_name='Admin', family_name='User'" + _, err = txn.Exec(populate) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20190930092500_LocalUsersTriggerFix.go b/src/jetstream/datastore/20190930092500_LocalUsersTriggerFix.go index d8c2337a17..7a0f807c75 100644 --- a/src/jetstream/datastore/20190930092500_LocalUsersTriggerFix.go +++ b/src/jetstream/datastore/20190930092500_LocalUsersTriggerFix.go @@ -2,37 +2,40 @@ package datastore import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20190930092500, "LocalUsersTriggerFix", func(txn *sql.Tx, conf *goose.DBConf) error { - - var dropTrigger string - - if strings.Contains(conf.Driver.Name, "sqlite") { - //SQLITE - dropTrigger = "DROP TRIGGER IF EXISTS update_last_updated;" - } - if strings.Contains(conf.Driver.Name, "postgres") { - // POSTGRESQL - dropTrigger = "DROP TRIGGER IF EXISTS update_trigger ON local_users;" - } else if strings.Contains(conf.Driver.Name, "mysql") { - // MYSQL - dropTrigger = "DROP TRIGGER IF EXISTS update_last_updated;" - // Ignore error - most likely permission bug issue on Mysql - txn.Exec(dropTrigger) - return nil - } - - if len(dropTrigger) > 0 { - // Remove the trigger - _, err := txn.Exec(dropTrigger) - return err - } + goose.AddMigration(Up20190930092500, nil) +} + +func Up20190930092500(txn *sql.Tx) error { + dialect := goose.GetDialect() + + var dropTrigger string + if _, ok := dialect.(*goose.Sqlite3Dialect); ok { + //SQLITE + dropTrigger = "DROP TRIGGER IF EXISTS update_last_updated;" + } + + if _, ok := dialect.(*goose.PostgresDialect); ok { + // POSTGRESQL + dropTrigger = "DROP TRIGGER IF EXISTS update_trigger ON local_users;" + } else if _, ok := dialect.(*goose.MySQLDialect); ok { + // MYSQL + dropTrigger = "DROP TRIGGER IF EXISTS update_last_updated;" + // Ignore error - most likely permission bug issue on Mysql + txn.Exec(dropTrigger) return nil - }) + } + + if len(dropTrigger) > 0 { + // Remove the trigger + _, err := txn.Exec(dropTrigger) + return err + } + + return nil } diff --git a/src/jetstream/datastore/20191008121900_PrimaryKeys.go b/src/jetstream/datastore/20191008121900_PrimaryKeys.go index 9e1210616f..5b6b28b18c 100644 --- a/src/jetstream/datastore/20191008121900_PrimaryKeys.go +++ b/src/jetstream/datastore/20191008121900_PrimaryKeys.go @@ -2,45 +2,46 @@ package datastore import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20191008121900, "PrimaryKeys", func(txn *sql.Tx, conf *goose.DBConf) error { - - // Make sure all tokens have a CNSI guid - ensureTokensHaveCnsi := "UPDATE tokens SET cnsi_guid='STRATOS' WHERE token_type='uaa' and cnsi_guid IS NULL;" - _, err := txn.Exec(ensureTokensHaveCnsi) - if err != nil { - return err - } - - // Note: SQLite does not allow constraints to be added after table creation - if strings.Contains(conf.Driver.Name, "sqlite3") { - return nil - } - - // Need cnsi_guid to not be NULL in order to be able to create this primary key - addTokensPrimaryKey := "ALTER TABLE tokens ADD CONSTRAINT PK_Tokens PRIMARY KEY (user_guid, cnsi_guid, token_guid);" - _, err = txn.Exec(addTokensPrimaryKey) - if err != nil { - return err - } - - addSetupConfigPrimaryKey := "ALTER TABLE console_config ADD CONSTRAINT PK_ConsoleConfig PRIMARY KEY (uaa_endpoint, console_admin_scope);" - _, err = txn.Exec(addSetupConfigPrimaryKey) - if err != nil { - return err - } - - addConfigPrimaryKey := "ALTER TABLE config ADD CONSTRAINT PK_Config PRIMARY KEY (groupName, name);" - _, err = txn.Exec(addConfigPrimaryKey) - if err != nil { - return err - } - + goose.AddMigration(Up20191008121900, nil) +} +func Up20191008121900(txn *sql.Tx) error { + dialect := goose.GetDialect() + + // Make sure all tokens have a CNSI guid + ensureTokensHaveCnsi := "UPDATE tokens SET cnsi_guid='STRATOS' WHERE token_type='uaa' and cnsi_guid IS NULL;" + _, err := txn.Exec(ensureTokensHaveCnsi) + if err != nil { + return err + } + + // Note: SQLite does not allow constraints to be added after table creation + if _, ok := dialect.(*goose.Sqlite3Dialect); ok { return nil - }) + } + + // Need cnsi_guid to not be NULL in order to be able to create this primary key + addTokensPrimaryKey := "ALTER TABLE tokens ADD CONSTRAINT PK_Tokens PRIMARY KEY (user_guid, cnsi_guid, token_guid);" + _, err = txn.Exec(addTokensPrimaryKey) + if err != nil { + return err + } + + addSetupConfigPrimaryKey := "ALTER TABLE console_config ADD CONSTRAINT PK_ConsoleConfig PRIMARY KEY (uaa_endpoint, console_admin_scope);" + _, err = txn.Exec(addSetupConfigPrimaryKey) + if err != nil { + return err + } + + addConfigPrimaryKey := "ALTER TABLE config ADD CONSTRAINT PK_Config PRIMARY KEY (groupName, name);" + _, err = txn.Exec(addConfigPrimaryKey) + if err != nil { + return err + } + + return nil } diff --git a/src/jetstream/datastore/20200117152200_SesssionData.go b/src/jetstream/datastore/20200117152200_SesssionData.go index 6b52943583..85f489bc07 100644 --- a/src/jetstream/datastore/20200117152200_SesssionData.go +++ b/src/jetstream/datastore/20200117152200_SesssionData.go @@ -3,11 +3,13 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20200117152200, "SesssionData", func(txn *sql.Tx, conf *goose.DBConf) error { + goose.AddMigration(Up20200117152200, nil) +} +func Up20200117152200(txn *sql.Tx) error { sessionDataTable := "CREATE TABLE IF NOT EXISTS session_data (" sessionDataTable += " session VARCHAR(255) NOT NULL," sessionDataTable += " groupName VARCHAR(32) NOT NULL," @@ -18,5 +20,5 @@ func init() { _, err := txn.Exec(sessionDataTable) return err - }) + } diff --git a/src/jetstream/datastore/20200814140918_ApiKeys.go b/src/jetstream/datastore/20200814140918_ApiKeys.go index 43bc76b181..1161d4f84f 100644 --- a/src/jetstream/datastore/20200814140918_ApiKeys.go +++ b/src/jetstream/datastore/20200814140918_ApiKeys.go @@ -3,11 +3,13 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20200814140918, "ApiKeys", func(txn *sql.Tx, conf *goose.DBConf) error { + goose.AddMigration(Up20200814140918, nil) +} +func Up20200814140918(txn *sql.Tx) error { apiTokenTable := "CREATE TABLE IF NOT EXISTS api_keys (" apiTokenTable += "guid VARCHAR(36) NOT NULL UNIQUE," apiTokenTable += "secret VARCHAR(64) NOT NULL UNIQUE," @@ -18,5 +20,5 @@ func init() { _, err := txn.Exec(apiTokenTable) return err - }) + } diff --git a/src/jetstream/datastore/20200902162200_HelmSubtype.go b/src/jetstream/datastore/20200902162200_HelmSubtype.go index ebb97be983..3356a5c38a 100644 --- a/src/jetstream/datastore/20200902162200_HelmSubtype.go +++ b/src/jetstream/datastore/20200902162200_HelmSubtype.go @@ -3,19 +3,20 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20200902162200, "HelmSubtype", func(txn *sql.Tx, conf *goose.DBConf) error { + goose.AddMigration(Up20200902162200, nil) +} - // Make sure all previous helm endpoints type shave the correct 'repo' sub type - updateHelmRepoSubtype := "UPDATE cnsis SET sub_type='repo' WHERE cnsi_type='helm';" - _, err := txn.Exec(updateHelmRepoSubtype) - if err != nil { - return err - } +func Up20200902162200(txn *sql.Tx) error { + // Make sure all previous helm endpoints type shave the correct 'repo' sub type + updateHelmRepoSubtype := "UPDATE cnsis SET sub_type='repo' WHERE cnsi_type='helm';" + _, err := txn.Exec(updateHelmRepoSubtype) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/20210201110000_Creator.go b/src/jetstream/datastore/20210201110000_Creator.go index f5dda15cc1..4a903ea379 100644 --- a/src/jetstream/datastore/20210201110000_Creator.go +++ b/src/jetstream/datastore/20210201110000_Creator.go @@ -3,18 +3,20 @@ package datastore import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) func init() { - RegisterMigration(20210201110000, "Creator", func(txn *sql.Tx, conf *goose.DBConf) error { - alterCNSI := "ALTER TABLE cnsis ADD COLUMN creator VARCHAR(36) NOT NULL DEFAULT '';" + goose.AddMigration(Up20210201110000, nil) +} + +func Up20210201110000(txn *sql.Tx) error { + alterCNSI := "ALTER TABLE cnsis ADD COLUMN creator VARCHAR(36) NOT NULL DEFAULT '';" - _, err := txn.Exec(alterCNSI) - if err != nil { - return err - } + _, err := txn.Exec(alterCNSI) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/datastore/database_cf_config.go b/src/jetstream/datastore/database_cf_config.go index 614716b633..171e46bb99 100644 --- a/src/jetstream/datastore/database_cf_config.go +++ b/src/jetstream/datastore/database_cf_config.go @@ -131,8 +131,7 @@ func getDBCredentialsValue(val interface{}) string { } func findDatabaseConfigurations(vcapServices map[string][]VCAPService) map[string]VCAPService { - var configs map[string]VCAPService - configs = make(map[string]VCAPService) + configs := make(map[string]VCAPService) for _, services := range vcapServices { for _, service := range services { @@ -170,7 +169,7 @@ func findDatabaseConfigurationFromURI(uri string, defaultPort int) (string, stri n1 := re.SubexpNames() matches := re.FindAllStringSubmatch(uri, -1) if len(matches) < 1 { - return "", "", "", 0, "", errors.New("Failed to parse database URI") + return "", "", "", 0, "", errors.New("failed to parse database URI") } r2 := matches[0] diff --git a/src/jetstream/datastore/datastore.go b/src/jetstream/datastore/datastore.go index 88958ce862..17030c102c 100644 --- a/src/jetstream/datastore/datastore.go +++ b/src/jetstream/datastore/datastore.go @@ -2,6 +2,7 @@ package datastore import ( "database/sql" + "errors" "fmt" "os" "path" @@ -9,6 +10,8 @@ import ( "strings" "time" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_errors" + goosedbversion "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/goose-db-version" "github.com/govau/cf-common/env" log "github.com/sirupsen/logrus" @@ -20,7 +23,7 @@ import ( // Sqlite driver _ "github.com/mattn/go-sqlite3" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) const ( @@ -108,7 +111,7 @@ func NewDatabaseConnectionParametersFromConfig(dc DatabaseConfig) (DatabaseConfi return dc, nil } // Invalid SSL mode - return dc, fmt.Errorf("Invalid SSL mode: %s", dc.SSLMode) + return dc, fmt.Errorf("invalid SSL mode: %s", dc.SSLMode) } else if dc.DatabaseProvider == MYSQL { // Map default of disabled to false for MySQL if dc.SSLMode == "disable" { @@ -118,9 +121,9 @@ func NewDatabaseConnectionParametersFromConfig(dc DatabaseConfig) (DatabaseConfi return dc, nil } // Invalid SSL mode - return dc, fmt.Errorf("Invalid SSL mode: %s", dc.SSLMode) + return dc, fmt.Errorf("invalid SSL mode: %s", dc.SSLMode) } - return dc, fmt.Errorf("Invalid provider %v", dc) + return dc, fmt.Errorf("invalid provider %v", dc) } func validateRequiredDatabaseParams(username, password, database, host string, port int) (err error) { @@ -142,44 +145,35 @@ func validateRequiredDatabaseParams(username, password, database, host string, p } // GetConnection returns a database connection to either MySQL, PostgreSQL or SQLite -func GetConnection(dc DatabaseConfig, env *env.VarSet) (*sql.DB, *goose.DBConf, error) { +func GetConnection(dc DatabaseConfig, env *env.VarSet) (*sql.DB, error) { log.Debug("GetConnection") + db, err := NewGooseDBConf(dc, env) - // Get a Goose Configuration so that we can pass that to the schema migrator - conf, err := NewGooseDBConf(dc, env) - if err != nil { - return nil, nil, err - } - - db, err := sql.Open(conf.Driver.Name, conf.Driver.OpenStr) - return db, conf, err + return db, err } // GetInMemorySQLLiteConnection returns an SQLite DB Connection -func GetInMemorySQLLiteConnection() (*sql.DB, *goose.DBConf, error) { +func GetInMemorySQLLiteConnection() (*sql.DB, error) { databaseFile := "file::memory:?cache=shared" log.Info("Using In Memory Database file") db, err := sql.Open("sqlite3", databaseFile) if err != nil { - return nil, nil, err + return nil, err } - driver := newDBDriver("sqlite3", databaseFile) - conf := &goose.DBConf{ - Driver: driver, - } + goose.SetDialect("sqlite3") - err = ApplyMigrations(conf, db) + err = ApplyMigrations(db) if err != nil { - return nil, nil, err + return nil, err } - return db, conf, nil + return db, nil } // NewGooseDBConf creates a new Goose config for database migrations -func NewGooseDBConf(dc DatabaseConfig, env *env.VarSet) (*goose.DBConf, error) { +func NewGooseDBConf(dc DatabaseConfig, env *env.VarSet) (*sql.DB, error) { var openStr, name string @@ -201,39 +195,10 @@ func NewGooseDBConf(dc DatabaseConfig, env *env.VarSet) (*goose.DBConf, error) { } } - driver := newDBDriver(name, openStr) - return &goose.DBConf{ - MigrationsDir: ".", - Env: fmt.Sprintf("%s_dbenv", name), - Driver: driver, - PgSchema: "", - }, nil -} - -// Create a new DBDriver and populate driver specific -// fields for drivers that we know about. -func newDBDriver(name, open string) goose.DBDriver { - - d := goose.DBDriver{ - Name: name, - OpenStr: open, - } - - switch name { - case "postgres": - d.Import = "github.com/lib/pq" - d.Dialect = &goose.PostgresDialect{} + goose.SetDialect(name) + db, err := sql.Open(name, openStr) - case "mysql": - d.Import = "github.com/go-sql-driver/mysql" - d.Dialect = &goose.MySqlDialect{} - - case "sqlite3": - d.Import = "github.com/mattn/go-sqlite3" - d.Dialect = &goose.Sqlite3Dialect{} - } - - return d + return db, err } func buildConnectionString(dc DatabaseConfig) string { @@ -300,7 +265,7 @@ func Ping(db *sql.DB) error { log.Debug("Ping database") err := db.Ping() if err != nil { - return fmt.Errorf("Unable to ping the database: %+v", err) + return fmt.Errorf("unable to ping the database: %+v", err) } return nil @@ -311,7 +276,7 @@ func Ping(db *sql.DB) error { // SQLite uses ? func ModifySQLStatement(sql string, databaseProvider string) string { if databaseProvider == SQLITE || databaseProvider == MYSQL { - sqlParamReplace := regexp.MustCompile("\\$[0-9]+") + sqlParamReplace := regexp.MustCompile(`\$[0-9]+`) return sqlParamReplace.ReplaceAllString(sql, "?") } @@ -321,8 +286,15 @@ func ModifySQLStatement(sql string, databaseProvider string) string { // WaitForMigrations will wait until all migrations have been applied func WaitForMigrations(db *sql.DB) error { - migrations := GetOrderedMigrations() - targetVersion := migrations[len(migrations)-1] + migrations, err := goose.CollectMigrations(".", minVersion, maxVersion) + if err != nil { + return err + } + + targetVersion, err := migrations.Last() + if err != nil { + return err + } // Timeout after which we will give up timeout := time.Now().Add(time.Minute * TimeoutBoundary) @@ -332,9 +304,9 @@ func WaitForMigrations(db *sql.DB) error { databaseVersionRec, err := dbVersionRepo.GetCurrentVersion() if err != nil { var errorMsg = err.Error() - if strings.Contains(err.Error(), "no such table") { + if errors.Is(err, custom_errors.ErrNoSuchTable) { errorMsg = "Waiting for versions table to be created" - } else if strings.Contains(err.Error(), "No database versions found") { + } else if errors.Is(err, custom_errors.ErrNoDatabaseVersionsFound) { errorMsg = "Versions table is empty - waiting for migrations" } log.Infof("Database schema check: %s", errorMsg) @@ -346,12 +318,12 @@ func WaitForMigrations(db *sql.DB) error { } // If our timeout boundary has been exceeded, bail out - if timeout.Sub(time.Now()) < 0 { + if time.Until(timeout) < 0 { // If we timed out and the last request was a db error, show the error if err != nil { log.Error(err) } - return fmt.Errorf("Timed out waiting for database schema to be initialized") + return fmt.Errorf("timed out waiting for database schema to be initialized") } time.Sleep(3 * time.Second) diff --git a/src/jetstream/datastore/datastore_migrator.go b/src/jetstream/datastore/datastore_migrator.go index e8855deed5..826b877185 100644 --- a/src/jetstream/datastore/datastore_migrator.go +++ b/src/jetstream/datastore/datastore_migrator.go @@ -3,103 +3,58 @@ package datastore import ( "database/sql" "fmt" - "sort" log "github.com/sirupsen/logrus" - "bitbucket.org/liamstask/goose/lib/goose" + "github.com/pressly/goose" ) -// StratosMigration applies a migration step. Use with RegisterMigration() -type StratosMigration func(txn *sql.Tx, conf *goose.DBConf) error - -// RegisterMigration registers a migration step. This should be called from an init() function -func RegisterMigration(version int64, name string, f StratosMigration) { - migrationSteps = append(migrationSteps, StratosMigrationStep{ - Version: version, - Name: name, - Apply: f, - }) -} - -// StratosMigrationStep represents a migaration step -type StratosMigrationStep struct { - Version int64 - Name string - Apply StratosMigration -} - -var migrationSteps []StratosMigrationStep - -// GetOrderedMigrations returns an order list of migrations to run -func GetOrderedMigrations() []StratosMigrationStep { - sort.Slice(migrationSteps, func(i, j int) bool { - return migrationSteps[i].Version < migrationSteps[j].Version - }) - return migrationSteps -} - -// SetMigrations replces the current list of migrations - used only by tests internally -func SetMigrations(steps []StratosMigrationStep) { - migrationSteps = steps -} +var ( + minVersion = int64(0) + maxVersion = int64((1 << 63) - 1) +) // ApplyMigrations will perform the migrations -func ApplyMigrations(conf *goose.DBConf, db *sql.DB) error { - current, err := goose.EnsureDBVersion(conf, db) +func ApplyMigrations(db *sql.DB) error { + current, err := goose.EnsureDBVersion(db) if err != nil { - return fmt.Errorf("Failed to get database version: %s", err.Error()) + return fmt.Errorf("failed to get database version: %s", err.Error()) } log.Println("========================") log.Println("= Stratos DB Migration =") log.Println("========================") - log.Printf("Database provider: %s", conf.Driver.Name) + log.Printf("Database provider: %v", goose.GetDialect()) log.Printf("Current %d", current) - stratosMigrations := GetOrderedMigrations() + goose.SetLogger(log.StandardLogger()) - if len(stratosMigrations) == 0 { - return fmt.Errorf("No Database Migrations found") + migrations, err := goose.CollectMigrations(".", minVersion, maxVersion) + if err != nil { + return err } - // Target is always the last migration - target := stratosMigrations[len(stratosMigrations)-1].Version - log.Printf("Target: %d", target) - - log.Println("Running migrations ....") - didRun := false - for _, step := range stratosMigrations { - if step.Version > current { - log.Printf("Running migration: %d_%s", step.Version, step.Name) - - txn, err := db.Begin() - if err != nil { - log.Error("db.Begin:", err) - return err - } + if len(migrations) == 0 { + return fmt.Errorf("no Database Migrations found") + } - err = step.Apply(txn, conf) - if err != nil { - log.Error("Apply() failed:", err) - return err - } + for { + current, err := goose.GetDBVersion(db) + if err != nil { + return err + } - err = goose.FinalizeMigration(conf, txn, true, step.Version) - if err != nil { - log.Error("Commit() failed:", err) - return err + next, err := migrations.Next(current) + if err != nil { + if err == goose.ErrNoNextVersion { + log.Printf("No migrations to run. current version: %d\n", current) + return nil } - - didRun = true - } else { - log.Printf("Skipping migration: %d", step.Version) + return err } - } - if !didRun { - log.Println("No migrations to run.") + if err = next.Up(db); err != nil { + return err + } } - - return nil } diff --git a/src/jetstream/datastore/datastore_test.go b/src/jetstream/datastore/datastore_test.go index 67e678a512..0ef82081d9 100644 --- a/src/jetstream/datastore/datastore_test.go +++ b/src/jetstream/datastore/datastore_test.go @@ -3,6 +3,7 @@ package datastore import ( "errors" "fmt" + // "net/url" "testing" // "time" @@ -211,7 +212,7 @@ func TestDatastore(t *testing.T) { Convey("when missing ssl mode", func() { mockDatabaseConfigNoSSL.SSLMode = "" - expectedErrorMessage := fmt.Sprintf("Invalid SSL mode: %s", mockDatabaseConfigNoSSL.SSLMode) + expectedErrorMessage := fmt.Sprintf("invalid SSL mode: %s", mockDatabaseConfigNoSSL.SSLMode) Convey("an error should be returned", func() { _, err := NewDatabaseConnectionParametersFromConfig(mockDatabaseConfigNoSSL) @@ -222,7 +223,7 @@ func TestDatastore(t *testing.T) { Convey("when invalid ssl mode", func() { mockDatabaseConfigNoSSL.SSLMode = "ekhewjhfjk" - expectedErrorMessage := fmt.Sprintf("Invalid SSL mode: %s", mockDatabaseConfigNoSSL.SSLMode) + expectedErrorMessage := fmt.Sprintf("invalid SSL mode: %s", mockDatabaseConfigNoSSL.SSLMode) Convey("an error should be returned", func() { _, err := NewDatabaseConnectionParametersFromConfig(mockDatabaseConfigNoSSL) @@ -390,7 +391,7 @@ func TestDatastore(t *testing.T) { Convey("when missing ssl mode", func() { mockDatabaseConfigSSL.SSLMode = "" - expectedErrorMessage := fmt.Sprintf("Invalid SSL mode: %s", mockDatabaseConfigSSL.SSLMode) + expectedErrorMessage := fmt.Sprintf("invalid SSL mode: %s", mockDatabaseConfigSSL.SSLMode) Convey("an error should be returned", func() { _, err := NewDatabaseConnectionParametersFromConfig(mockDatabaseConfigSSL) @@ -401,7 +402,7 @@ func TestDatastore(t *testing.T) { Convey("when invalid ssl mode", func() { mockDatabaseConfigSSL.SSLMode = "jhfewhjfejwhgfj" - expectedErrorMessage := fmt.Sprintf("Invalid SSL mode: %s", mockDatabaseConfigSSL.SSLMode) + expectedErrorMessage := fmt.Sprintf("invalid SSL mode: %s", mockDatabaseConfigSSL.SSLMode) Convey("an error should be returned", func() { _, err := NewDatabaseConnectionParametersFromConfig(mockDatabaseConfigSSL) diff --git a/src/jetstream/diagnostics.go b/src/jetstream/diagnostics.go index ef37a1bc93..77acb0e02c 100644 --- a/src/jetstream/diagnostics.go +++ b/src/jetstream/diagnostics.go @@ -6,13 +6,13 @@ import ( log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/goose-db-version" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + goosedbversion "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/goose-db-version" ) func (p *portalProxy) StoreDiagnostics() { - diagnostics := &interfaces.Diagnostics{} + diagnostics := &api.Diagnostics{} log.Info("Storing Diagnostics") @@ -20,10 +20,7 @@ func (p *portalProxy) StoreDiagnostics() { cmdName := "git" cmdArgs := []string{"version"} if cmdOut, err := exec.Command(cmdName, cmdArgs...).Output(); err == nil { - diagnostics.GitClientVersion = strings.TrimSpace(string(cmdOut)) - if strings.HasPrefix(diagnostics.GitClientVersion, "git version ") { - diagnostics.GitClientVersion = diagnostics.GitClientVersion[12:] - } + diagnostics.GitClientVersion = strings.TrimPrefix(strings.TrimSpace(string(cmdOut)), "git version ") } if p.DatabaseConnectionPool != nil { diff --git a/src/jetstream/factory/factory.go b/src/jetstream/factory/factory.go index 864be2244f..7a4359d180 100644 --- a/src/jetstream/factory/factory.go +++ b/src/jetstream/factory/factory.go @@ -4,7 +4,7 @@ import ( "database/sql" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/cnsis" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/tokens" ) @@ -14,18 +14,18 @@ type DefaultStoreFactory struct { } // NewDefaultStoreFactory creates a new default store factory -func NewDefaultStoreFactory(dbPool *sql.DB) interfaces.StoreFactory { +func NewDefaultStoreFactory(dbPool *sql.DB) api.StoreFactory { return &DefaultStoreFactory{ databaseConnectionPool: dbPool, } } // EndpointStore gets store for obtaining endpoint information -func (f *DefaultStoreFactory) EndpointStore() (interfaces.EndpointRepository, error) { +func (f *DefaultStoreFactory) EndpointStore() (api.EndpointRepository, error) { return cnsis.NewPostgresCNSIRepository(f.databaseConnectionPool) } // TokenStore gets store for obtaining endpoint information -func (f *DefaultStoreFactory) TokenStore() (interfaces.TokenRepository, error) { +func (f *DefaultStoreFactory) TokenStore() (api.TokenRepository, error) { return tokens.NewPgsqlTokenRepository(f.databaseConnectionPool) } diff --git a/src/jetstream/go.mod b/src/jetstream/go.mod index 4f74685673..19d56fa7dc 100644 --- a/src/jetstream/go.mod +++ b/src/jetstream/go.mod @@ -1,129 +1,248 @@ module github.com/cloudfoundry-incubator/stratos/src/jetstream -go 1.12 +go 1.21.0 + +replace ( + github.com/cloudfoundry-incubator/stratos/src/jetstream/api => ./api + github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config => ./api/config + github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto => ./crypto + github.com/cloudfoundry-incubator/stratos/src/jetstream/docs => ./docs + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/cfapppush => ./plugins/cfapppush + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/cloudfoundry => ./plugins/cloudfoundry + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes => ./plugins/kubernetes + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/auth => ./plugins/kubernetes/auth + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/terminal => ./plugins/kubernetes/terminal + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/monocular => ./plugins/monocular +) + +// ported from plugins/kubernetes +replace ( + code.cloudfoundry.org/go-log-cache => code.cloudfoundry.org/go-log-cache v1.0.1-0.20211011162012-ede82a99d3cc + github.com/SermoDigital/jose => github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc + github.com/sabhiram/go-gitignore => github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 + github.com/vito/go-interact => github.com/vito/go-interact v1.0.0 +) require ( - bitbucket.org/liamstask/goose v0.0.0-20150115234039-8488cc47d90c - code.cloudfoundry.org/bytefmt v0.0.0-20180906201452-2aa6f33b730c // indirect - code.cloudfoundry.org/cfnetworking-cli-api v0.0.0-20190103195135-4b04f26287a6 // indirect - code.cloudfoundry.org/cli v6.49.0+incompatible - code.cloudfoundry.org/diego-ssh v0.0.0-20200312183824-517d22c5d890 // indirect - code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f // indirect - code.cloudfoundry.org/inigo v0.0.0-20200318144131-597cd5dbfe8b // indirect - code.cloudfoundry.org/lager v2.0.0+incompatible // indirect - code.cloudfoundry.org/ykk v0.0.0-20170424192843-e4df4ce2fd4d // indirect - github.com/Sirupsen/logrus v0.0.0-00010101000000-000000000000 // indirect + code.cloudfoundry.org/go-log-cache v1.0.1-0.20230224210401-5e305670b626 + code.cloudfoundry.org/go-loggregator/v8 v8.0.5 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 - github.com/antonlindstrom/pgstore v0.0.0-20170604072116-a407030ba6d0 - github.com/apoydence/eachers v0.0.0-20181020210610-23942921fe77 // indirect - github.com/blang/semver v3.5.1+incompatible // indirect - github.com/bmatcuk/doublestar v1.1.1 // indirect - github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 // indirect + github.com/antonlindstrom/pgstore v0.0.0-20220421113606-e3a6e3fed12a github.com/cf-stratos/mysqlstore v0.0.0-20170822100912-304308519d13 - github.com/charlievieth/fs v0.0.0-20170613215519-7dc373669fa1 // indirect - github.com/cloudfoundry-community/go-cfenv v1.17.0 - github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes v0.0.0-00010101000000-000000000000 - github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/monocular v0.0.0-00010101000000-000000000000 - github.com/cloudfoundry/bosh-cli v5.4.0+incompatible // indirect - github.com/cloudfoundry/bosh-utils v0.0.0-20190206192830-9a0affed2bf1 // indirect - github.com/cloudfoundry/cli-plugin-repo v0.0.0-20190220174354-ecf721ef3813 // indirect - github.com/cloudfoundry/noaa v2.1.0+incompatible - github.com/cloudfoundry/sonde-go v0.0.0-20171206171820-b33733203bb4 - github.com/cppforlife/go-patch v0.2.0 // indirect + github.com/cloudfoundry-community/go-cfenv v1.18.0 + github.com/cloudfoundry-incubator/stratos/src/jetstream/api v0.0.0-00010101000000-000000000000 + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/cfapppush v0.0.0-00010101000000-000000000000 + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes v0.0.0-20210416105629-f34f428ca775 + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/auth v0.0.0-00010101000000-000000000000 + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/monocular v0.0.0-20210416105629-f34f428ca775 + github.com/cloudfoundry/noaa/v2 v2.3.0 + github.com/cloudfoundry/sonde-go v0.0.0-20230911203642-fa89d986ae20 github.com/domodwyer/mailyak v3.1.1+incompatible - github.com/dsnet/compress v0.0.0-20171208185109-cc9eb1d7ad76 // indirect - github.com/elazarl/goproxy v0.0.0-20200315184450-1f3cb6622dad // indirect - github.com/elazarl/goproxy/ext v0.0.0-20200315184450-1f3cb6622dad // indirect - github.com/fatih/color v1.7.0 // indirect - github.com/go-sql-driver/mysql v1.5.0 - github.com/golang/mock v1.4.4 - github.com/golang/snappy v0.0.1 // indirect - github.com/google/go-querystring v1.0.0 // indirect - github.com/google/martian v2.1.0+incompatible - github.com/gopherjs/gopherjs v0.0.0-20190411002643-bd77b112433e // indirect + github.com/go-sql-driver/mysql v1.7.1 + github.com/golang/mock v1.6.0 github.com/gorilla/context v1.1.1 github.com/gorilla/securecookie v1.1.1 - github.com/gorilla/sessions v1.1.3 - github.com/gorilla/websocket v1.4.2 + github.com/gorilla/sessions v1.2.1 + github.com/gorilla/websocket v1.5.0 github.com/govau/cf-common v0.0.7 - github.com/helm/monocular v1.10.0 // indirect - github.com/jessevdk/go-flags v1.4.0 // indirect - github.com/jtolds/gls v4.20.0+incompatible // indirect github.com/kat-co/vala v0.0.0-20170210184112-42e1d8b61f12 - github.com/kr/pty v1.1.8 // indirect - github.com/labstack/echo v3.3.10+incompatible - github.com/labstack/echo/v4 v4.1.17 - github.com/lunixbochs/vtclean v1.0.0 // indirect - github.com/mattn/go-sqlite3 v1.14.5 - github.com/mholt/archiver v3.1.1+incompatible - github.com/miekg/dns v1.1.4 // indirect - github.com/moby/moby v1.13.1 // indirect - github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d // indirect - github.com/nwaples/rardecode v1.0.0 // indirect + github.com/labstack/echo/v4 v4.11.1 + github.com/mattn/go-sqlite3 v1.14.17 github.com/nwmac/sqlitestore v0.0.0-20180824125213-7d2ab221fb3f - github.com/onsi/ginkgo v1.11.0 // indirect - github.com/onsi/gomega v1.8.1 // indirect - github.com/pierrec/lz4 v2.0.5+incompatible // indirect - github.com/poy/eachers v0.0.0-20181020210610-23942921fe77 // indirect - github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 // indirect + github.com/pressly/goose v2.7.0+incompatible github.com/satori/go.uuid v1.2.0 - github.com/sirupsen/logrus v1.4.2 - github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3 // indirect - github.com/smartystreets/goconvey v1.6.4 - github.com/swaggo/echo-swagger v1.0.0 - github.com/swaggo/swag v1.6.7 - github.com/tedsuo/ifrit v0.0.0-20191009134036-9a97d0632f00 // indirect - github.com/tedsuo/rata v1.0.0 // indirect - github.com/ulikunitz/xz v0.5.6 // indirect - github.com/vito/go-interact v0.0.0-20171111012221-fa338ed9e9ec // indirect - github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect - golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a - google.golang.org/genproto v0.0.0-20200620020550-bd6e04640131 // indirect - gopkg.in/DATA-DOG/go-sqlmock.v1 v1.5.0 - gopkg.in/cheggaaa/pb.v1 v1.0.27 // indirect + github.com/sirupsen/logrus v1.9.3 + github.com/smartystreets/goconvey v1.8.1 + github.com/swaggo/echo-swagger v1.4.0 + github.com/swaggo/swag v1.16.1 + golang.org/x/crypto v0.13.0 + gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 gopkg.in/yaml.v2 v2.4.0 - k8s.io/apiextensions-apiserver v0.0.0 // indirect - k8s.io/client-go v9.0.0+incompatible - k8s.io/helm v2.16.10+incompatible // indirect - k8s.io/kubectl v0.0.0 // indirect + k8s.io/client-go v0.28.2 ) -replace github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes => ./plugins/kubernetes - -replace github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/monocular => ./plugins/monocular - -replace ( - github.com/SermoDigital/jose => github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc - github.com/Sirupsen/logrus => github.com/sirupsen/logrus v1.4.1 - github.com/docker/docker => github.com/moby/moby v0.7.3-0.20190826074503-38ab9da00309 - github.com/kubernetes-sigs/aws-iam-authenticator => github.com/kubernetes-sigs/aws-iam-authenticator v0.3.1-0.20190111160901-390d9087a4bc - github.com/russross/blackfriday v2.0.0+incompatible => github.com/russross/blackfriday v1.5.2 - github.com/sergi/go-diff => github.com/sergi/go-diff v1.0.0 - github.com/smartystreets/goconvey => github.com/smartystreets/goconvey v0.0.0-20160503033757-d4c757aa9afd - github.com/spf13/cobra => github.com/spf13/cobra v0.0.3 - github.com/ugorji/go => github.com/ugorji/go v1.1.11 - gopkg.in/DATA-DOG/go-sqlmock.v1 => github.com/DATA-DOG/go-sqlmock v1.1.3 - k8s.io/api => k8s.io/kubernetes/staging/src/k8s.io/api v0.0.0-20191001043732-d647ddbd755f - k8s.io/apiextensions-apiserver => k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v0.0.0-20191001043732-d647ddbd755f - k8s.io/apimachinery => k8s.io/kubernetes/staging/src/k8s.io/apimachinery v0.0.0-20191001043732-d647ddbd755f - k8s.io/apiserver => k8s.io/kubernetes/staging/src/k8s.io/apiserver v0.0.0-20191001043732-d647ddbd755f - k8s.io/cli-runtime => k8s.io/kubernetes/staging/src/k8s.io/cli-runtime v0.0.0-20191001043732-d647ddbd755f - k8s.io/client-go => k8s.io/kubernetes/staging/src/k8s.io/client-go v0.0.0-20191001043732-d647ddbd755f - //k8s.io/kubernetes => k8s.io/kubernetes/staging/src/k8s.io/kubernetes v1.13.3 - k8s.io/cloud-provider => k8s.io/kubernetes/staging/src/k8s.io/cloud-provider v0.0.0-20191001043732-d647ddbd755f - k8s.io/cluster-bootstrap => k8s.io/kubernetes/staging/src/k8s.io/cluster-bootstrap v0.0.0-20191001043732-d647ddbd755f - k8s.io/code-generator => k8s.io/kubernetes/staging/src/k8s.io/code-generator v0.0.0-20191001043732-d647ddbd755f - k8s.io/component-base => k8s.io/kubernetes/staging/src/k8s.io/component-base v0.0.0-20191001043732-d647ddbd755f - k8s.io/cri-api => k8s.io/kubernetes/staging/src/k8s.io/cri-api v0.0.0-20191001043732-d647ddbd755f - k8s.io/csi-translation-lib => k8s.io/kubernetes/staging/src/k8s.io/csi-translation-lib v0.0.0-20191001043732-d647ddbd755f - k8s.io/kube-aggregator => k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator v0.0.0-20191001043732-d647ddbd755f - k8s.io/kube-controller-manager => k8s.io/kubernetes/staging/src/k8s.io/kube-controller-manager v0.0.0-20191001043732-d647ddbd755f - k8s.io/kube-proxy => k8s.io/kubernetes/staging/src/k8s.io/kube-proxy v0.0.0-20191001043732-d647ddbd755f - k8s.io/kube-scheduler => k8s.io/kubernetes/staging/src/k8s.io/kube-scheduler v0.0.0-20191001043732-d647ddbd755f - //k8s.io/kube-openapi => k8s.io/kubernetes/staging/src/k8s.io/kube-openapi v0.0.0-20180509051136-39cb288412c4 - k8s.io/kubectl => k8s.io/kubernetes/staging/src/k8s.io/kubectl v0.0.0-20191001043732-d647ddbd755f - k8s.io/kubelet => k8s.io/kubernetes/staging/src/k8s.io/kubelet v0.0.0-20191001043732-d647ddbd755f - k8s.io/legacy-cloud-providers => k8s.io/kubernetes/staging/src/k8s.io/legacy-cloud-providers v0.0.0-20191001043732-d647ddbd755f - k8s.io/metrics => k8s.io/kubernetes/staging/src/k8s.io/metrics v0.0.0-20191001043732-d647ddbd755f - k8s.io/sample-apiserver => k8s.io/kubernetes/staging/src/k8s.io/sample-apiserver v0.0.0-20191001043732-d647ddbd755f +require ( + code.cloudfoundry.org/bytefmt v0.0.0-20230612151507-41ef4d1f67a4 // indirect + code.cloudfoundry.org/cfnetworking-cli-api v0.0.0-20190103195135-4b04f26287a6 // indirect + code.cloudfoundry.org/cli v0.0.0-20230912192837-efd1d03e7292 // indirect + code.cloudfoundry.org/cli-plugin-repo v0.0.0-20230912184324-f005268561a6 // indirect + code.cloudfoundry.org/clock v1.1.0 // indirect + code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f // indirect + code.cloudfoundry.org/jsonry v1.1.4 // indirect + code.cloudfoundry.org/tlsconfig v0.0.0-20230929201433-6cd2b78aba25 // indirect + code.cloudfoundry.org/ykk v0.0.0-20170424192843-e4df4ce2fd4d // indirect + github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect + github.com/BurntSushi/toml v1.2.1 // indirect + github.com/KyleBanks/depth v1.2.1 // indirect + github.com/MakeNowJust/heredoc v1.0.0 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver/v3 v3.2.1 // indirect + github.com/Masterminds/sprig/v3 v3.2.3 // indirect + github.com/Masterminds/squirrel v1.5.4 // indirect + github.com/SermoDigital/jose v0.9.2-0.20161205224733-f6df55f235c2 // indirect + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect + github.com/aws/aws-sdk-go v1.44.324 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/bmatcuk/doublestar v1.3.4 // indirect + github.com/bmizerany/pat v0.0.0-20210406213842-e4b6760bdd6f // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/chai2010/gettext-go v1.0.2 // indirect + github.com/charlievieth/fs v0.0.3 // indirect + github.com/cloudfoundry/bosh-cli v6.4.1+incompatible // indirect + github.com/cloudfoundry/bosh-utils v0.0.399 // indirect + github.com/containerd/containerd v1.7.0 // indirect + github.com/cppforlife/go-patch v0.2.0 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/distribution/reference v0.5.0 // indirect + github.com/docker/cli v23.0.1+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/docker/docker v23.0.1+incompatible // indirect + github.com/docker/docker-credential-helpers v0.7.0 // indirect + github.com/docker/go-connections v0.4.0 // indirect + github.com/docker/go-metrics v0.0.1 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/dsnet/compress v0.0.1 // indirect + github.com/emicklei/go-restful/v3 v3.10.1 // indirect + github.com/evanphx/json-patch v5.6.0+incompatible // indirect + github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-errors/errors v1.4.2 // indirect + github.com/go-gorp/gorp/v3 v3.0.5 // indirect + github.com/go-logr/logr v1.2.4 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/spec v0.20.4 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/gofrs/flock v0.8.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt v3.2.2+incompatible // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/btree v1.0.1 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/gopherjs/gopherjs v1.17.2 // indirect + github.com/gorilla/mux v1.8.0 // indirect + github.com/gosuri/uitable v0.0.4 // indirect + github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/huandu/xstrings v1.4.0 // indirect + github.com/imdario/mergo v0.3.13 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jessevdk/go-flags v1.5.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jmoiron/sqlx v1.3.5 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/jtolds/gls v4.20.0+incompatible // indirect + github.com/klauspost/compress v1.16.6 // indirect + github.com/labstack/gommon v0.4.0 // indirect + github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect + github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect + github.com/lunixbochs/vtclean v1.0.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/mholt/archiver v3.1.1+incompatible // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/mitchellh/mapstructure v1.4.1 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/moby/locker v1.0.1 // indirect + github.com/moby/spdystream v0.2.0 // indirect + github.com/moby/term v0.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/morikuni/aec v1.0.0 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/nwaples/rardecode v1.1.3 // indirect + github.com/nxadm/tail v1.4.8 // indirect + github.com/onsi/ginkgo v1.16.5 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b // indirect + github.com/openzipkin/zipkin-go v0.4.2 // indirect + github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_golang v1.16.0 // indirect + github.com/prometheus/client_model v0.4.0 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/procfs v0.10.1 // indirect + github.com/rivo/uniseg v0.4.4 // indirect + github.com/rubenv/sql-migrate v1.3.1 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 // indirect + github.com/shopspring/decimal v1.3.1 // indirect + github.com/smarty/assertions v1.15.0 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.7.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/swaggo/files/v2 v2.0.0 // indirect + github.com/tedsuo/rata v1.0.1-0.20170830210128-07d200713958 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect + github.com/vito/go-interact v1.0.1 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect + github.com/xlab/treeprint v1.2.0 // indirect + go.opentelemetry.io/otel v1.14.0 // indirect + go.opentelemetry.io/otel/trace v1.14.0 // indirect + go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect + golang.org/x/net v0.15.0 // indirect + golang.org/x/oauth2 v0.12.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/term v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.13.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 // indirect + google.golang.org/grpc v1.58.2 // indirect + google.golang.org/protobuf v1.31.0 // indirect + gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + helm.sh/helm/v3 v3.12.3 // indirect + k8s.io/api v0.28.2 // indirect + k8s.io/apiextensions-apiserver v0.27.3 // indirect + k8s.io/apimachinery v0.28.2 // indirect + k8s.io/apiserver v0.27.3 // indirect + k8s.io/cli-runtime v0.28.1 // indirect + k8s.io/component-base v0.28.1 // indirect + k8s.io/klog/v2 v2.100.1 // indirect + k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect + k8s.io/kubectl v0.28.1 // indirect + k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + oras.land/oras-go v1.2.3 // indirect + sigs.k8s.io/aws-iam-authenticator v0.6.11 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect + sigs.k8s.io/kustomize/kyaml v0.14.3 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/src/jetstream/go.sum b/src/jetstream/go.sum index 708b525d5e..edf17028d2 100644 --- a/src/jetstream/go.sum +++ b/src/jetstream/go.sum @@ -1,888 +1,1432 @@ -bitbucket.org/liamstask/goose v0.0.0-20150115234039-8488cc47d90c h1:bkb2NMGo3/Du52wvYj9Whth5KZfMV6d3O0Vbr3nz/UE= bitbucket.org/liamstask/goose v0.0.0-20150115234039-8488cc47d90c/go.mod h1:hSVuE3qU7grINVSwrmzHfpg9k87ALBk+XaualNyUzI4= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -code.cloudfoundry.org/bytefmt v0.0.0-20180906201452-2aa6f33b730c h1:VzwteSWGbW9mxXTEkH+kpnao5jbgLynw3hq742juQh8= -code.cloudfoundry.org/bytefmt v0.0.0-20180906201452-2aa6f33b730c/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +code.cloudfoundry.org/bytefmt v0.0.0-20230612151507-41ef4d1f67a4 h1:9G5F8zgma5v0GdDvNz6iZwwJp3RS/z0SY/aHGfVwvTo= +code.cloudfoundry.org/bytefmt v0.0.0-20230612151507-41ef4d1f67a4/go.mod h1:wYHCXH/gI19ujoFVuMkY48qPpPCoHLKBKXPkn67h/Yc= code.cloudfoundry.org/cfnetworking-cli-api v0.0.0-20190103195135-4b04f26287a6 h1:Yc9r1p21kEpni9WlG4mwOZw87TB2QlyS9sAEebZ3+ak= code.cloudfoundry.org/cfnetworking-cli-api v0.0.0-20190103195135-4b04f26287a6/go.mod h1:u5FovqC5GGAEbFPz+IdjycDA+gIjhUwqxnu0vbHwVeM= -code.cloudfoundry.org/cli v6.49.0+incompatible h1:lUuYux9EXLe8EBzlvckJLpHKhc8szJfWiEc3SXdM8+o= -code.cloudfoundry.org/cli v6.49.0+incompatible/go.mod h1:e4d+EpbwevNhyTZKybrLlyTvpH+W22vMsmdmcTxs/Fo= -code.cloudfoundry.org/diego-ssh v0.0.0-20200312183824-517d22c5d890/go.mod h1:L2/glHnSK+wKnsG8oZZqdV2sgYY9NDo/I1aDJGhcWaM= +code.cloudfoundry.org/cli v0.0.0-20230912192837-efd1d03e7292 h1:EeEDt9ZTdNoij6f30PFrlkCD6GY0epW9Q21sniKrdVs= +code.cloudfoundry.org/cli v0.0.0-20230912192837-efd1d03e7292/go.mod h1:ie2BbLGL7mXuhZTLpfT8QpQ4g5DdeYNUzia7ffeo838= +code.cloudfoundry.org/cli-plugin-repo v0.0.0-20230912184324-f005268561a6 h1:ZydTGvDizGniImSepXDgopd6iMiA0xQ+/sG/yLpCuiY= +code.cloudfoundry.org/cli-plugin-repo v0.0.0-20230912184324-f005268561a6/go.mod h1:R1EiyOAr7lW0l/YkZNqItUNZ01Q/dYUfbTn4X4Z+82M= +code.cloudfoundry.org/clock v1.1.0 h1:XLzC6W3Ah/Y7ht1rmZ6+QfPdt1iGWEAAtIZXgiaj57c= +code.cloudfoundry.org/clock v1.1.0/go.mod h1:yA3fxddT9RINQL2XHS7PS+OXxKCGhfrZmlNUCIM6AKo= +code.cloudfoundry.org/diego-ssh v0.0.0-20230810200140-af9d79fe9c82 h1:Bns1y0jSlcvfP0u8ael+TUlnyNHsNX808zuo58bf5so= +code.cloudfoundry.org/diego-ssh v0.0.0-20230810200140-af9d79fe9c82/go.mod h1:L2/glHnSK+wKnsG8oZZqdV2sgYY9NDo/I1aDJGhcWaM= +code.cloudfoundry.org/go-diodes v0.0.0-20180905200951-72629b5276e3/go.mod h1:Jzi+ccHgo/V/PLQUaQ6hnZcC1c4BS790gx21LRRui4g= +code.cloudfoundry.org/go-envstruct v1.5.0/go.mod h1:E2S/gzRZpZ51PZnIv7Bo7QvcgH18yio19upkrRk0xLU= +code.cloudfoundry.org/go-log-cache v1.0.1-0.20211011162012-ede82a99d3cc h1:8gj5Z08i9ZvoIGi1A/E2CEQTbvJjogYQgBQUI2/DyNE= +code.cloudfoundry.org/go-log-cache v1.0.1-0.20211011162012-ede82a99d3cc/go.mod h1:8thG6lrstlbeI44hc7QgSnX8eau68+mNt9Pp33/TEcg= +code.cloudfoundry.org/go-loggregator/v8 v8.0.2-0.20200722201844-b5130958b65d/go.mod h1:Or3cWTXwK6d3caPRBTUJv/suT+47jOltB7hYC/3ECCo= +code.cloudfoundry.org/go-loggregator/v8 v8.0.5 h1:p1rrGxTwUqLjlUVtbjTAvKOSGNmPuBja8LeQOQgRrBc= +code.cloudfoundry.org/go-loggregator/v8 v8.0.5/go.mod h1:mLlJ1ZyG6gVvBEtYypvbztRvFeCtBsTxE9tt+85tS6Y= code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f h1:UrKzEwTgeiff9vxdrfdqxibzpWjxLnuXDI5m6z3GJAk= code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f/go.mod h1:sk5LnIjB/nIEU7yP5sDQExVm62wu0pBh3yrElngUisI= -code.cloudfoundry.org/inigo v0.0.0-20200318144131-597cd5dbfe8b/go.mod h1:1ZB1JCh2FAp+SqX79ve6dc8YREvbsziULEOncAilX4Q= +code.cloudfoundry.org/jsonry v1.1.4 h1:P9N7IlH1/4aRCLcXLgLFj1hkcBmV7muijJzY+K6U4hE= +code.cloudfoundry.org/jsonry v1.1.4/go.mod h1:6aKilShQP7w/Ez76h1El2/n9y2OkHuU56nKSBB9Gp0A= +code.cloudfoundry.org/lager v2.0.0+incompatible h1:WZwDKDB2PLd/oL+USK4b4aEjUymIej9My2nUQ9oWEwQ= code.cloudfoundry.org/lager v2.0.0+incompatible/go.mod h1:O2sS7gKP3HM2iemG+EnwvyNQK7pTSC6Foi4QiMp9sSk= +code.cloudfoundry.org/lager/v3 v3.0.2 h1:H0dcQY+814G1Ea0e5K/AMaMpcr+Pe5Iv+AALJEwrP9U= +code.cloudfoundry.org/lager/v3 v3.0.2/go.mod h1:zA6tOIWhr5uZUez+PGpdfBHDWQOfhOrr0cgKDagZPwk= +code.cloudfoundry.org/rfc5424 v0.0.0-20180905210152-236a6d29298a/go.mod h1:tkZo8GtzBjySJ7USvxm4E36lNQw1D3xM6oKHGqdaAJ4= +code.cloudfoundry.org/tlsconfig v0.0.0-20200131000646-bbe0f8da39b3/go.mod h1:eTbFJpyXRGuFVyg5+oaj9B2eIbIc+0/kZjH8ftbtdew= +code.cloudfoundry.org/tlsconfig v0.0.0-20230929201433-6cd2b78aba25 h1:vfCOuqnZi86Jg1EXMWtdCb9ieko4hna/CLzI6ECTgFA= +code.cloudfoundry.org/tlsconfig v0.0.0-20230929201433-6cd2b78aba25/go.mod h1:C8SxvGRSutmgzV2FxH8Zwqz2Q8HsaAITQRQFKhlDzPw= code.cloudfoundry.org/ykk v0.0.0-20170424192843-e4df4ce2fd4d h1:M+zXqtXJqcsmpL76aU0tdl1ho23eYa4axYoM4gD62UA= code.cloudfoundry.org/ykk v0.0.0-20170424192843-e4df4ce2fd4d/go.mod h1:YUJiVOr5xl0N/RjMxM1tHmgSpBbi5UM+KoVR5AoejO0= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= -github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= +filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1/go.mod h1:VzwV+t+dZ9j/H867F1M2ziD+yLHtB46oM35FxxMJ4d0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DATA-DOG/go-sqlmock v1.1.3 h1:sVIxMSTMnnVzl9Bn6BMjW6p5lSbpjHL80mqnxMWJ/oE= -github.com/DATA-DOG/go-sqlmock v1.1.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= +github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= -github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= -github.com/MakeNowJust/heredoc v0.0.0-20171113091838-e9091a26100e h1:eb0Pzkt15Bm7f2FFYv7sjY7NPFi3cPkS3tv1CcrFBWA= -github.com/MakeNowJust/heredoc v0.0.0-20171113091838-e9091a26100e/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= -github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.3.1/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.0.1 h1:2kKm5lb7dKVrt5TYUiAavE6oFc1cFT0057UVGT+JqLk= -github.com/Masterminds/semver/v3 v3.0.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.1.0 h1:Y2lUDsFKVRSYGojLJ1yLxSXdMmMYTYls0rCvoqmMUQk= +github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= +github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= +github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/sprig v2.18.0+incompatible h1:QoGhlbC6pter1jxKnjMFxT8EqsLuDE6FEcNbWEpw+lI= -github.com/Masterminds/sprig v2.18.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig/v3 v3.0.0 h1:KSQz7Nb08/3VU9E4ns29dDxcczhOD1q7O1UfM4G3t3g= -github.com/Masterminds/sprig/v3 v3.0.0/go.mod h1:NEUY/Qq8Gdm2xgYA+NwJM6wmfdRV9xkh8h/Rld20R0U= -github.com/Masterminds/vcs v1.13.0/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.12/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= +github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= +github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= +github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM= +github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/Microsoft/hcsshim v0.10.0-rc.7 h1:HBytQPxcv8Oy4244zbQbe6hnOnx544eL5QPUqhJldz8= +github.com/Microsoft/hcsshim v0.10.0-rc.7/go.mod h1:ILuwjA+kNW+MrN/w5un7n3mTqkwsFu4Bp05/okFUZlE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc h1:MhBvG7RLaLqlyjxMR6of35vt6MVQ+eXMcgn9X/sy0FE= github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc/go.mod h1:ARgCUhI1MHQH+ONky/PAtmVHQrP5JlGY0F3poXOp/fA= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= +github.com/a8m/expect v1.0.0/go.mod h1:4IwSCMumY49ScypDnjNbYEjgVeqy1/U2cEs3Lat96eA= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/antonlindstrom/pgstore v0.0.0-20170604072116-a407030ba6d0 h1:e6PEaXbztY0ViaKotCICNnBQDUeNEJgrQ5UAHWlloh4= -github.com/antonlindstrom/pgstore v0.0.0-20170604072116-a407030ba6d0/go.mod h1:2Ti6VUHVxpC0VSmTZzEvpzysnaGAfGBOoMIz5ykPyyw= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antonlindstrom/pgstore v0.0.0-20220421113606-e3a6e3fed12a h1:dIdcLbck6W67B5JFMewU5Dba1yKZA3MsT67i4No/zh0= +github.com/antonlindstrom/pgstore v0.0.0-20220421113606-e3a6e3fed12a/go.mod h1:Sdr/tmSOLEnncCuXS5TwZRxuk7deH1WXVY8cve3eVBM= +github.com/apoydence/eachers v0.0.0-20181020210610-23942921fe77 h1:afT88tB6u9JCKQZVAAaa9ICz/uGn5Uw9ekn6P22mYKM= github.com/apoydence/eachers v0.0.0-20181020210610-23942921fe77/go.mod h1:bXvGk6IkT1Agy7qzJ+DjIw/SJ1AaB3AvAuMDVV+Vkoo= -github.com/arschles/assert v1.0.0 h1:NofQbRhtxcLgP+XoKunA7J6UMJNTqX7xR/19tej8UsA= -github.com/arschles/assert v1.0.0/go.mod h1:m/u69zW43x0h8dTHcv3JJZljINyEYgBuf5fYJP6WikI= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.17.5 h1:WW9Hm3KYo48iZHpmBc+b7sgyS0h32zgCvya28SLW4BU= -github.com/aws/aws-sdk-go v1.17.5/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/aws/aws-sdk-go v1.44.324 h1:/uja9PtgeeqrZCPOJTenjMLNpciIMuzaRKooq+erG4A= +github.com/aws/aws-sdk-go v1.44.324/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/bmatcuk/doublestar v1.1.1 h1:YroD6BJCZBYx06yYFEWvUuKVWQn3vLLQAVmDmvTSaiQ= -github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 h1:y4B3+GPxKlrigF1ha5FFErxK+sr6sWxQovRMzwMhejo= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/bugsnag/bugsnag-go v1.5.0/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/panicwrap v1.2.0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= +github.com/bmatcuk/doublestar v1.3.4 h1:gPypJ5xD31uhX6Tf54sDPUOBXTqKH4c9aPY66CyQrS0= +github.com/bmatcuk/doublestar v1.3.4/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE= +github.com/bmizerany/pat v0.0.0-20210406213842-e4b6760bdd6f h1:gOO/tNZMjjvTKZWpY7YnXC72ULNLErRtp94LountVE8= +github.com/bmizerany/pat v0.0.0-20210406213842-e4b6760bdd6f/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= +github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.0 h1:yTUvW7Vhb89inJ+8irsUqiWjh8iT6sQPZiQzI6ReGkA= -github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cf-stratos/mysqlstore v0.0.0-20170822100912-304308519d13 h1:WwIvjUUodNoZduhdhotbKnrLSFoIn5vD3QgNZv0hjvo= github.com/cf-stratos/mysqlstore v0.0.0-20170822100912-304308519d13/go.mod h1:GgQT0ToC+7JLnMKdDB5d434WwCLC2dpNR2AgTJj/08o= -github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= -github.com/chai2010/gettext-go v0.0.0-20170215093142-bf70f2a70fb1/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= -github.com/charlievieth/fs v0.0.0-20170613215519-7dc373669fa1 h1:vTlpHKxJqykyKdW9bkrDJNWeKNuSIAJ0TP/K4lRsz/Q= -github.com/charlievieth/fs v0.0.0-20170613215519-7dc373669fa1/go.mod h1:sAoA1zHCH4FJPE2gne5iBiiVG66U7Nyp6JqlOo+FEyg= +github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= +github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= +github.com/charlievieth/fs v0.0.3 h1:3lZQXTj4PbE81CVPwALSn+JoyCNXkZgORHN6h2XHGlg= +github.com/charlievieth/fs v0.0.3/go.mod h1:hD4sRzto1Hw8zCua76tNVKZxaeZZr1RiKftjAJQRLLo= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudfoundry-community/go-cfenv v1.17.0 h1:qfxEfn8qKkaHY3ZEk/Y2noY79HBASvNgmtHK9x4+6GY= -github.com/cloudfoundry-community/go-cfenv v1.17.0/go.mod h1:2UgWvQTRXUuIZ/x3KnW6fk6CgPBhcV4UQb/UGIrUyyI= -github.com/cloudfoundry/bosh-cli v5.4.0+incompatible h1:KpT2PBB7nP1QnK8guXeZ/D2k7FZYAOxcveKgYTDEDBI= -github.com/cloudfoundry/bosh-cli v5.4.0+incompatible/go.mod h1:rzIB+e1sn7wQL/TJ54bl/FemPKRhXby5BIMS3tLuWFM= -github.com/cloudfoundry/bosh-utils v0.0.0-20190206192830-9a0affed2bf1 h1:TxcGamw+BaxXTFwZFORzkWNMCHAWjhThxnI24CLS7iE= -github.com/cloudfoundry/bosh-utils v0.0.0-20190206192830-9a0affed2bf1/go.mod h1:JCrKwetZGjxbfq1U139TZuXDBfdGLtjOEAfxMWKV/QM= -github.com/cloudfoundry/cli-plugin-repo v0.0.0-20190220174354-ecf721ef3813 h1:x1wUMS9Fahudr2C97iiZuPFIjxpVDfsq+n+ARh5n8g0= -github.com/cloudfoundry/cli-plugin-repo v0.0.0-20190220174354-ecf721ef3813/go.mod h1:yC/5vqtuzGhS40ZSeBtWvDMMrfdSeG673lF91gu5K+Y= -github.com/cloudfoundry/noaa v2.1.0+incompatible h1:hr6VnM5VlYRN3YD+NmAedQLW8686sUMknOSe0mFS2vo= -github.com/cloudfoundry/noaa v2.1.0+incompatible/go.mod h1:5LmacnptvxzrTvMfL9+EJhgkUfIgcwI61BVSTh47ECo= -github.com/cloudfoundry/sonde-go v0.0.0-20171206171820-b33733203bb4 h1:cWfya7mo/zbnwYVio6eWGsFJHqYw4/k/uhwIJ1eqRPI= +github.com/cloudfoundry-community/go-cfenv v1.18.0 h1:dOIRSHUSaj4r6Q9Cx+nzz2OytHt+QNKqtOuKTQsa+zw= +github.com/cloudfoundry-community/go-cfenv v1.18.0/go.mod h1:qGMSI6lygPzqugFs9M1NFjJBtEPgl0MgT6drMFZGUoU= +github.com/cloudfoundry/bosh-cli v6.4.1+incompatible h1:n5/+NIF9QxvGINOrjh6DmO+GTen78MoCj5+LU9L8bR4= +github.com/cloudfoundry/bosh-cli v6.4.1+incompatible/go.mod h1:rzIB+e1sn7wQL/TJ54bl/FemPKRhXby5BIMS3tLuWFM= +github.com/cloudfoundry/bosh-utils v0.0.399 h1:FSPMpvGjr/F/snhc0yUPObGoGl6jn/ZqmKkoW6ZSjj4= +github.com/cloudfoundry/bosh-utils v0.0.399/go.mod h1:mLJ0MTXBI0uH9QC7PqLktoWbmqcTVM02IfQShcFZLDw= +github.com/cloudfoundry/dropsonde v1.0.0/go.mod h1:6zwvrWK5TpxBVYi1cdkE5WDsIO8E0n7qAJg3wR9B67c= +github.com/cloudfoundry/gosteno v0.0.0-20150423193413-0c8581caea35/go.mod h1:3YBPUR85RIrvaUTdA1dL38YSp6s3OHu1xrWLkGt2Mog= +github.com/cloudfoundry/loggregatorlib v0.0.0-20170823162133-36eddf15ef12/go.mod h1:ucj7+svyACshmxV3Zze2NAcEcdbBf9scZYR+QKCX9/w= +github.com/cloudfoundry/noaa/v2 v2.3.0 h1:+f//s7zTaiTtjz/Vf1LFKKfJb/6x2hRenTXlSb4dU5g= +github.com/cloudfoundry/noaa/v2 v2.3.0/go.mod h1:W9uqRvqZMmwLB8P4hFsUrb0jKKdWPhmCSeRhQaOawGk= github.com/cloudfoundry/sonde-go v0.0.0-20171206171820-b33733203bb4/go.mod h1:GS0pCHd7onIsewbw8Ue9qa9pZPv2V88cUZDttK6KzgI= -github.com/containerd/containerd v1.3.0-beta.2.0.20190823190603-4a2f61c4f2b4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0 h1:xjvXQWABwS2uiv3TWgQt5Uth60Gu86LTGZXMJkjc7rY= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/continuity v0.0.0-20181203112020-004b46473808 h1:4BX8f882bXEDKfWIf0wa8HRvpnBoPszJJXL+TVbBw4M= -github.com/containerd/continuity v0.0.0-20181203112020-004b46473808/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.15+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/cloudfoundry/sonde-go v0.0.0-20230911203642-fa89d986ae20 h1:mlqnfrDRkWkO6HQ9CT0KkBZy5co/CgTX3xSmkuUNXHs= +github.com/cloudfoundry/sonde-go v0.0.0-20230911203642-fa89d986ae20/go.mod h1:GiUWdcLKuM+RX4gSQBSHn3ADveMrRadWxuY6AFK5JNk= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= +github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= +github.com/containerd/containerd v1.7.0 h1:G/ZQr3gMZs6ZT0qPUZ15znx5QSdQdASW11nXTLTM2Pg= +github.com/containerd/containerd v1.7.0/go.mod h1:QfR7Efgb/6X2BDpTPJRvPTYDE9rsF0FsXX9J8sIs/sc= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cppforlife/go-patch v0.2.0 h1:Y14MnCQjDlbw7WXT4k+u6DPAA9XnygN4BfrSpI/19RU= github.com/cppforlife/go-patch v0.2.0/go.mod h1:67a7aIi94FHDZdoeGSJRRFDp66l9MhaAG1yGxpUoFD8= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= -github.com/deislabs/oras v0.7.0 h1:RnDoFd3tQYODMiUqxgQ8JxlrlWL0/VMKIKRD01MmNYk= -github.com/deislabs/oras v0.7.0/go.mod h1:sqMKPG3tMyIX9xwXUBRLhZ24o+uT4y6jgBD2RzUTKDM= -github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/disintegration/imaging v1.5.0/go.mod h1:9B/deIUIrliYkyMTuXJd6OUFLcrZ2tf+3Qlwnaf/CjU= -github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= -github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= -github.com/docker/cli v0.0.0-20190506213505-d88565df0c2d h1:qdD+BtyCE1XXpDyhvn0yZVcZOLILdj9Cw4pKu0kQbPQ= -github.com/docker/cli v0.0.0-20190506213505-d88565df0c2d/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker-credential-helpers v0.6.1 h1:Dq4iIfcM7cNtddhLVWe9h4QDjsi4OER3Z8voPu/I52g= -github.com/docker/docker-credential-helpers v0.6.1/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc= +github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy13Ul2Q5oM= +github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v23.0.1+incompatible h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY= +github.com/docker/docker v23.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= +github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-metrics v0.0.0-20181218153428-b84716841b82 h1:X0fj836zx99zFu83v/M79DuBn84IL/Syx1SY6Y5ZEMA= -github.com/docker/go-metrics v0.0.0-20181218153428-b84716841b82/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c h1:ZfSZ3P3BedhKGUhzj7BQlPSU4OvT6tfOKe3DVHzOA7s= -github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/domodwyer/mailyak v3.1.1+incompatible h1:oPtXn3+56LEFbdqH0bpuPRsqtijW9l2POpQe9sTUsSI= github.com/domodwyer/mailyak v3.1.1+incompatible/go.mod h1:5NNYkn9hxcdNEOmmMx0yultN5VLorZQ+AWQo9iya+UY= -github.com/dsnet/compress v0.0.0-20171208185109-cc9eb1d7ad76 h1:eX+pdPPlD279OWgdx7f6KqIRSONuK7egk+jDx7OM3Ac= -github.com/dsnet/compress v0.0.0-20171208185109-cc9eb1d7ad76/go.mod h1:KjxHHirfLaw19iGT70HvVjHQsL1vq1SRQB4yOsAfy2s= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= -github.com/elazarl/goproxy v0.0.0-20200315184450-1f3cb6622dad/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= -github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= -github.com/elazarl/goproxy/ext v0.0.0-20200315184450-1f3cb6622dad/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.11.1+incompatible h1:CjKsv3uWcCMvySPQYKxO8XX3f9zD4FeZRsW4G0B4ffE= -github.com/emicklei/go-restful v2.11.1+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/elazarl/goproxy/ext v0.0.0-20230808193330-2592e75ae04a h1:6hp3+W5oJSkbk/m2XquFdhih2H4wxxR0Nl6GfPL8kss= +github.com/elazarl/goproxy/ext v0.0.0-20230808193330-2592e75ae04a/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= +github.com/emicklei/go-restful/v3 v3.10.1 h1:rc42Y5YTp7Am7CS630D7JmhRjq4UlEUuEKfrDac4bSQ= +github.com/emicklei/go-restful/v3 v3.10.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= -github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= -github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= +github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= +github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v0.0.0-20180820084758-c7ce16629ff4/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w= -github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/globalsign/mgo v0.0.0-20180615134936-113d3961e731/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gorp/gorp/v3 v3.0.5 h1:PUjzYdYu3HBOh8LE+UUmRG2P0IRDak9XMeGNvaeq4Ow= +github.com/go-gorp/gorp/v3 v3.0.5/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.4 h1:ixzUSnHTd6hCemgtAJgluaTSGYpLNpJY4mA2DIkdOAo= -github.com/go-openapi/spec v0.19.4/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= +github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/gobuffalo/logger v1.0.6 h1:nnZNpxYo0zx+Aj9RfMPBm+x9zAU2OayFh/xrAWi34HU= +github.com/gobuffalo/logger v1.0.6/go.mod h1:J31TBEHR1QLV2683OXTAItYIg8pv2JMHnF/quuAbMjs= +github.com/gobuffalo/packd v1.0.1 h1:U2wXfRr4E9DH8IdsDLlRFwTZTK7hLfq9qT/QHXGVe/0= +github.com/gobuffalo/packd v1.0.1/go.mod h1:PP2POP3p3RXGz7Jh6eYEf93S7vA2za6xM7QT85L4+VY= +github.com/gobuffalo/packr/v2 v2.8.3 h1:xE1yzvnO56cUC0sTpKR3DIbxZgB54AftTFMhB2XEWlY= +github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXsOdiU5KwbKc= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godror/godror v0.24.2/go.mod h1:wZv/9vPiUib6tkoDl+AZ/QLf5YZgMravZ7jxH2eQWAE= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= -github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= -github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= +github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 h1:pUa4ghanp6q4IJHwE9RwLgmVFfReJN+KbQ8ExNEUUoQ= +github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk= -github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20190411002643-bd77b112433e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= +github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U= -github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.1.3 h1:uXoZdcdA5XdXF3QzuSlheVRUvjl+1rKY7zBXL68L9RU= -github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gosuri/uitable v0.0.1 h1:M9sMNgSZPyAu1FJZJLpJ16ofL8q5ko2EDUkICsynvlY= -github.com/gosuri/uitable v0.0.1/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= +github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= github.com/govau/cf-common v0.0.7 h1:uhp1P6XM6GGzu1+A4C7LELLX/9mCmH6W5DpJZC0kWmo= github.com/govau/cf-common v0.0.7/go.mod h1:5xL/OfE7wxeyHlXb7iei0rAbdQ/5v6dF18BZknPv7NQ= -github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/gregjones/httpcache v0.0.0-20181110185634-c63ab54fda8f/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc h1:f8eY6cV/x1x+HLjOp4r72s/31/V2aTUtg5oKRRPf8/Q= github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.6.0/go.mod h1:qrJPVzv9YlhsrxJc3P/Q85nr0w1lIRikTl4JlhdDH5w= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 h1:1JYBfzqrWPcCclBwxFCPAou9n+q86mfnu7NAeHfte7A= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0/go.mod h1:YDZoGHuwE+ov0c8smSH49WLF3F2LaWnYYuDVd+EWrc0= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/helm/monocular v1.4.0 h1:g0sOpuMe+9u+aPfd9ZO8mWV+c8W0dfGyBG9Wl23nwec= -github.com/helm/monocular v1.4.0/go.mod h1:PpkCN0v4zVVigsIHnsQdJytKFmaUkwfhxB7z33a9/gE= -github.com/helm/monocular v1.10.0 h1:/tkbVH0+7GR2C4W2ODJGiVGXyHmYCa3vaBb5S+pz6bE= -github.com/helm/monocular v1.10.0/go.mod h1:2pJcZSWeUPTtw1QSje6c/qCrSuSUujoNPgUoFc8ySMQ= -github.com/heptio/authenticator v0.3.0/go.mod h1:Q86X8hc61JXhE5XxYLKmrSRWby/Oe8IIYZIBgmGVkTA= -github.com/heptiolabs/healthcheck v0.0.0-20180807145615-6ff867650f40 h1:GT4RsKmHh1uZyhmTkWJTDALRjSHYQp6FRKrotf0zhAs= -github.com/heptiolabs/healthcheck v0.0.0-20180807145615-6ff867650f40/go.mod h1:NtmN9h8vrTveVQRLHcX2HQ5wIPBDCsZ351TGbZWgg38= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.2.0 h1:yPeWdRnmynF7p+lLYz0H2tthW9lqhMJrQV/U7yy4wX0= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= +github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jinzhu/copier v0.0.0-20180308034124-7e38e58719c3/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s= -github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a h1:zPPuIq2jAWWPTrGt70eK/BSch+gFAGrNzecsoENgu2o= -github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jessevdk/go-flags v0.0.0-20170926144705-f88afde2fa19/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= +github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= +github.com/joefitzgerald/rainbow-reporter v0.1.0 h1:AuMG652zjdzI0YCCnXAqATtRBpGXMcAnrajcaTrSeuo= +github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= +github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= +github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/kat-co/vala v0.0.0-20170210184112-42e1d8b61f12 h1:DQVOxR9qdYEybJUr/c7ku34r3PfajaMYXZwgDM7KuSk= github.com/kat-co/vala v0.0.0-20170210184112-42e1d8b61f12/go.mod h1:u9MdXq/QageOOSGp7qG4XAQsYUMP+V5zEel/Vrl6OOc= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.16.6 h1:91SKEy4K37vkp255cJ8QesJhjyRO0hn9i9G0GoUwLsk= +github.com/klauspost/compress v1.16.6/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kortschak/utter v1.0.1/go.mod h1:vSmSjbyrlKjjsL71193LmzBOKgwePk9DH6uFaWHIInc= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kubeapps/common v0.0.0-20190307100129-fcd6537ca4e3/go.mod h1:TsgmjeDpbftqhwPKInJ3v+l+xbHs4goiB6DFb2WqY9c= -github.com/kubeapps/common v0.0.0-20190508164739-10b110436c1a h1:VqeX/fehAB6FtBox0TVYcjOMXGE56INQIfbXegditX4= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kubeapps/common v0.0.0-20190508164739-10b110436c1a/go.mod h1:TsgmjeDpbftqhwPKInJ3v+l+xbHs4goiB6DFb2WqY9c= -github.com/kubernetes-sigs/aws-iam-authenticator v0.3.1-0.20190111160901-390d9087a4bc h1:Ttr4Z3ZrMv4rAXn10UAqOC8ACx+F1omvcyV1a3hRArE= -github.com/kubernetes-sigs/aws-iam-authenticator v0.3.1-0.20190111160901-390d9087a4bc/go.mod h1:ItxiN33Ho7Di8wiC4S4XqbH1NLF0DNdDWOd/5MI9gJU= -github.com/kylelemons/go-gypsy v0.0.0-20160905020020-08cad365cd28 h1:mkl3tvPHIuPaWsLtmHTybJeoVEW7cbePK73Ir8VtruA= github.com/kylelemons/go-gypsy v0.0.0-20160905020020-08cad365cd28/go.mod h1:T/T7jsxVqf9k/zYOqbgNAsANsjxTd1Yq3htjDhQ1H0c= -github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg= github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= -github.com/labstack/echo/v4 v4.0.0/go.mod h1:tZv7nai5buKSg5h/8E6zz4LsD/Dqh9/91Mvs7Z5Zyno= -github.com/labstack/echo/v4 v4.1.17 h1:PQIBaRplyRy3OjwILGkPg89JRtH2x5bssi59G2EL3fo= -github.com/labstack/echo/v4 v4.1.17/go.mod h1:Tn2yRQL/UclUalpb5rPdXDevbkJ+lp/2svdyFBg6CHQ= -github.com/labstack/gommon v0.2.8/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4= -github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0= +github.com/labstack/echo/v4 v4.11.1 h1:dEpLU2FLg4UVmvCGPuk/APjlH6GDpbEPti61srUUUs4= +github.com/labstack/echo/v4 v4.11.1/go.mod h1:YuYRTSM3CHs2ybfrL8Px48bO6BAnYIN4l8wSTMP6BDQ= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= +github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= +github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= +github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= +github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= -github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/loggregator/go-bindata v0.0.0-20190422223605-5f11cfb2d7d9/go.mod h1:PvsJfK9t/8OdGvSanpYlwJ1EPoJ/hwT3c52txAzqooY= github.com/lunixbochs/vtclean v1.0.0 h1:xu2sLAri4lGiovBDQKxl5mrXyESr3gUr5m5SM5+LVb8= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/markbates/errx v1.1.0 h1:QDFeR+UP95dO12JgW+tgi2UVfo0V8YBHiUIOaeBPiEI= +github.com/markbates/errx v1.1.0/go.mod h1:PLa46Oex9KNbVDZhKel8v1OT7hD5JZ2eI7AHhA0wswc= +github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY= +github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI= +github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-shellwords v1.0.5/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-oci8 v0.1.1/go.mod h1:wjDx6Xm9q7dFtHJvIlrI99JytznLw5wQ4R+9mNXJwGI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.13.0 h1:LnJI81JidiW9r7pS/hXe6cFeO5EXNq7KbfvoJLRI69c= -github.com/mattn/go-sqlite3 v1.13.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.5 h1:1IdxlwTNazvbKJQSxoJ5/9ECbEeaTTyeU7sEAZ5KKTQ= -github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM= +github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU= github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= -github.com/miekg/dns v0.0.0-20181005163659-0d29b283ac0f/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.25 h1:dFwPR6SfLtrSwgDcIq2bcU/gVutB4sNApq2HBdqcakg= +github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/moby v0.7.3-0.20190826074503-38ab9da00309 h1:cvy4lBOYN3gKfKj8Lzz5Q9TfviP+L7koMHY7SvkyTKs= -github.com/moby/moby v0.7.3-0.20190826074503-38ab9da00309/go.mod h1:fDXVQ6+S340veQPv35CzDahGBmHsiclFwfEygB/TWMc= -github.com/moby/moby v1.13.1 h1:mC5WwQwCXt/dYxZ1cIrRsnJAWw7VdtcTZUIGr4tXzOM= -github.com/moby/moby v1.13.1/go.mod h1:fDXVQ6+S340veQPv35CzDahGBmHsiclFwfEygB/TWMc= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= +github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c h1:nXxl5PrvVm2L/wCy8dQu6DMTwH4oIuGN8GJDAlqDdVE= -github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nelsam/hel/v2 v2.3.2/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w= +github.com/nelsam/hel/v2 v2.3.3/go.mod h1:1ZTGfU2PFTOd5mx22i5O0Lc2GY933lQ2wb/ggy+rL3w= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d h1:VhgPp6v9qf9Agr/56bj7Y/xa04UccTW04VP0Qed4vnQ= github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d/go.mod h1:YUTz3bUH2ZwIWBy3CJBeOBEugqcmXREj14T+iG/4k4U= -github.com/nwaples/rardecode v1.0.0 h1:r7vGuS5akxOnR4JQSkko62RJ1ReCMXxQRPtxsiFMBOs= -github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= +github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nwmac/sqlitestore v0.0.0-20180824125213-7d2ab221fb3f h1:0U8+7akQEpWd5oaEgSKryzEEeI2oChQNc0ealKppMrk= github.com/nwmac/sqlitestore v0.0.0-20180824125213-7d2ab221fb3f/go.mod h1:GVvWHloj3TN6Mb3PH286FnNmEWPnn9VGEM8AhUUbdlw= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo v0.0.0-20171031171758-652e15c9a27e/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= +github.com/onsi/ginkgo/v2 v2.12.1 h1:uHNEO1RP2SpuZApSkel9nEh1/Mu+hmQe7Q+Pepg5OYA= +github.com/onsi/ginkgo/v2 v2.12.1/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= +github.com/onsi/gomega v0.0.0-20171105031654-1eecca0ba8e6/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8= +github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/openzipkin/zipkin-go v0.4.2 h1:zjqfqHjUpPmB3c1GlCvvgsM1G4LkvqQbBDueDOCg/jA= +github.com/openzipkin/zipkin-go v0.4.2/go.mod h1:ZeVkFjuuBiSy13y8vpSDCjMi9GoI3hPpCJSBx/EYFhY= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/poy/eachers v0.0.0-20181020210610-23942921fe77/go.mod h1:x1vqpbcMW9T/KRcQ4b48diSiSVtYgvwQ5xzDByEg4WE= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.0.0-20181001174001-0a8115f42e03/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/poy/onpar v0.0.0-20200406201722-06f95a1c68e8/go.mod h1:nSbFQvMj97ZyhFRSJYtut+msi4sOY6zJDGCdSc+/rZU= +github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= +github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= +github.com/pressly/goose v2.7.0+incompatible h1:PWejVEv07LCerQEzMMeAtjuyCKbyprZ/LBa6K5P0OCQ= +github.com/pressly/goose v2.7.0+incompatible/go.mod h1:m+QHWCqxR3k8D9l7qfzuC/djtlfzxr34mozWDYEu1z8= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.2.1 h1:JnMpQc6ppsNgw9QPAGF6Dod479itz7lvlsMzzNayLOI= -github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/procfs v0.0.0-20180920065004-418d78d0b9a7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190129233650-316cf8ccfec5/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= -github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rubenv/sql-migrate v1.3.1 h1:Vx+n4Du8X8VTYuXbhNxdEUoh6wiJERA0GlWocR5FrbA= +github.com/rubenv/sql-migrate v1.3.1/go.mod h1:YzG/Vh82CwyhTFXy+Mf5ahAiiEOpAlHurg+23VEzcsk= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 h1:G04eS0JkAIVZfaJLjla9dNxkJCPiKIGZlw9AfOhzOD0= github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ= -github.com/sajari/fuzzy v1.0.0/go.mod h1:OjYR6KxoWOe9+dOlXeiCJd4dIbED4Oo8wpS89o0pwOo= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/sclevine/spec v1.2.0 h1:1Jwdf9jSfDl9NVmt8ndHqbTZ7XCCPbh1jI3hkDBHVYA= +github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.1.0/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3 h1:hBSHahWMEgzwRyS6dRpxY0XyjZsHyQ61s084wo5PJe0= -github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v0.0.0-20160503033757-d4c757aa9afd h1:ZDVcuZGxvWB1ooKj1e31P/ktQK4A2WumM+LucMENpds= -github.com/smartystreets/goconvey v0.0.0-20160503033757-d4c757aa9afd/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= -github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/smarty/assertions v1.15.0 h1:cR//PqUBUiQRakZWqBiFFQ9wb8emQGDb0HeGdqGByCY= +github.com/smarty/assertions v1.15.0/go.mod h1:yABtdzeQs6l1brC900WlRNwj6ZR55d7B+E8C6HtKdec= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.8.1 h1:qGjIddxOk4grTu9JPOU31tVfq3cNdBlNa5sSznIX1xY= +github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/square/certstrap v1.2.0/go.mod h1:CUHqV+fxJW0Y5UQFnnbYwQ7bpKXO1AKbic9g73799yw= +github.com/square/certstrap v1.3.0 h1:N9P0ZRA+DjT8pq5fGDj0z3FjafRKnBDypP0QHpMlaAk= +github.com/square/certstrap v1.3.0/go.mod h1:wGZo9eE1B7WX2GKBn0htJ+B3OuRl2UsdCFySNooy9hU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/swaggo/echo-swagger v1.0.0 h1:ppQFt6Am3/MHIUmTpZOwi4gggMZ/W9zmKP4Z9ahTe5c= -github.com/swaggo/echo-swagger v1.0.0/go.mod h1:Vnz3c2TGeFpoZPSV3CkWCrvyfU0016Gq/S0j4JspQnM= -github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14 h1:PyYN9JH5jY9j6av01SpfRMb+1DWg/i3MbGOKPxJ2wjM= -github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14/go.mod h1:gxQT6pBGRuIGunNf/+tSOB5OHvguWi8Tbt82WOkf35E= -github.com/swaggo/gin-swagger v1.2.0/go.mod h1:qlH2+W7zXGZkczuL+r2nEBR2JTT+/lX05Nn6vPhc7OI= -github.com/swaggo/swag v1.5.1/go.mod h1:1Bl9F/ZBpVWh22nY0zmYyASPO1lI/zIwRDrpZU+tv8Y= -github.com/swaggo/swag v1.6.3/go.mod h1:wcc83tB4Mb2aNiL/HP4MFeQdpHUrca+Rp/DRNgWAUio= -github.com/swaggo/swag v1.6.7 h1:e8GC2xDllJZr3omJkm9YfmK0Y56+rMO3cg0JBKNz09s= -github.com/swaggo/swag v1.6.7/go.mod h1:xDhTyuFIujYiN3DKWC/H/83xcfHp+UE/IzWWampG7Zc= -github.com/technosophos/moniker v0.0.0-20180509230615-a5dbd03a2245/go.mod h1:O1c8HleITsZqzNZDjSNzirUGsMT0oGu9LhHKoJrqO+A= -github.com/tedsuo/ifrit v0.0.0-20191009134036-9a97d0632f00/go.mod h1:eyZnKCc955uh98WQvzOm0dgAeLnf2O0Rz0LPoC5ze+0= -github.com/tedsuo/rata v1.0.0 h1:Sf9aZrYy6ElSTncjnGkyC2yuVvz5YJetBIUKJ4CmeKE= -github.com/tedsuo/rata v1.0.0/go.mod h1:X47ELzhOoLbfFIY0Cql9P6yo3Cdwf2CMX3FVZxRzJPc= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/swaggo/echo-swagger v1.4.0 h1:RCxLKySw1SceHLqnmc41pKyiIeE+OiD7NSI7FUOBlLo= +github.com/swaggo/echo-swagger v1.4.0/go.mod h1:Wh3VlwjZGZf/LH0s81tz916JokuPG7y/ZqaqnckYqoQ= +github.com/swaggo/files/v2 v2.0.0 h1:hmAt8Dkynw7Ssz46F6pn8ok6YmGZqHSVLZ+HQM7i0kw= +github.com/swaggo/files/v2 v2.0.0/go.mod h1:24kk2Y9NYEJ5lHuCra6iVwkMjIekMCaFq/0JQj66kyM= +github.com/swaggo/swag v1.16.1 h1:fTNRhKstPKxcnoKsytm4sahr8FaYzUcT7i1/3nd/fBg= +github.com/swaggo/swag v1.16.1/go.mod h1:9/LMvHycG3NFHfR6LwvikHv5iFvmPADQ359cKikGxto= +github.com/tedsuo/rata v1.0.1-0.20170830210128-07d200713958 h1:mueRRuRjR35dEOkHdhpoRcruNgBz0ohG659HxxmcAwA= +github.com/tedsuo/rata v1.0.1-0.20170830210128-07d200713958/go.mod h1:X47ELzhOoLbfFIY0Cql9P6yo3Cdwf2CMX3FVZxRzJPc= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.5-pre/go.mod h1:FwP/aQVg39TXzItUBMwnWp9T9gPQnXw4Poh4/oBQZ/0= -github.com/ugorji/go v1.1.11/go.mod h1:kbRrdMyHY64ADdazOwkrQP9btxt35Z26OJueD3Tq0/4= -github.com/ugorji/go/codec v0.0.0-20181022190402-e5e69e061d4f/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.5-pre/go.mod h1:tULtS6Gy1AE1yCENaw4Vb//HLH5njI2tfCQDUqRd8fI= -github.com/ugorji/go/codec v1.1.11/go.mod h1:svMFxxx5FVQJPnJ9vbpAgscNufuiXDyldvzApI86qQo= -github.com/ulikunitz/xz v0.5.6 h1:jGHAfXawEGZQ3blwU5wnWKQJvAraT7Ftq9EXjnXYgt8= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/unrolled/render v0.0.0-20180914162206-b9786414de4d/go.mod h1:tu82oB5W2ykJRVioYsB+IQKcft7ryBr7w12qMBUPyXg= -github.com/unrolled/render v1.0.1 h1:VDDnQQVfBMsOsp3VaCJszSO0nkBIVEYoPWeRThk9spY= -github.com/unrolled/render v1.0.1/go.mod h1:gN9T0NhL4Bfbwu8ann7Ry/TGHYfosul+J0obPf6NBdM= -github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli/v2 v2.1.1 h1:Qt8FeAtxE/vfdrLmR3rxR6JRE0RoVmbXu8+6kZtYU4k= -github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/unrolled/secure v0.0.0-20180416205222-a1cf62cc2159/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/urfave/cli v1.21.0/go.mod h1:lxDj6qX9Q6lWQxIrbrT0nwecwUtRnhVZAJjJZrVUZZQ= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v0.0.0-20170224212429-dcecefd839c4/go.mod h1:50wTf68f99/Zt14pr046Tgt3Lp2vLyFZKzbFXTOabXw= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vito/go-interact v0.0.0-20171111012221-fa338ed9e9ec h1:Klu98tQ9Z1t23gvC7p7sCmvxkZxLhBHLNyrUPsWsYFg= -github.com/vito/go-interact v0.0.0-20171111012221-fa338ed9e9ec/go.mod h1:wPlfmglZmRWMYv/qJy3P+fK/UnoQB5ISk4txfNd9tDo= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0= -github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/vito/go-interact v1.0.0 h1:niLW3NjGoMWOayoR6iQ8AxWVM1Q4rR8VGZ1mt6uK3BM= +github.com/vito/go-interact v1.0.0/go.mod h1:W1mz+UVUZScRM3eUjQhEQiLDnQ+yLnXkB2rjBfGPrXg= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.1.0 h1:ngVtJC9TY/lg0AA/1k48FYhBrhRoFlEmWzsehpNAaZg= -github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= -github.com/xenolf/lego v0.0.0-20160613233155-a9d8cec0e656/go.mod h1:fwiGnfsIjG7OHPfOvgK7Y/Qo6+2Ox0iozjNTkZICKbY= -github.com/xenolf/lego v0.3.2-0.20160613233155-a9d8cec0e656/go.mod h1:fwiGnfsIjG7OHPfOvgK7Y/Qo6+2Ox0iozjNTkZICKbY= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/yvasiyarov/go-metrics v0.0.0-20150112132944-c25f46c4b940/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.6/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= +github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= -go.mongodb.org/mongo-driver v1.1.3 h1:++7u8r9adKhGR+I79NfEtYrk2ktjenErXM99PSufIoI= -go.mongodb.org/mongo-driver v1.1.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM= +go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= +go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M= +go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= +go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= +go.step.sm/crypto v0.16.2 h1:Pr9aazTwWBBZNogUsOqhOrPSdwAa9pPs+lMB602lnDA= +go.step.sm/crypto v0.16.2/go.mod h1:1WkTOTY+fOX/RY4TnZREp6trQAsBHRQ7nu6QJBiNQF8= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191028145041-f83a4685e152/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191205161847-0a08dada0ff9 h1:abxekknhS/Drh3uoQDk5Hc7BgeiyI39Crb7vhf/1j5s= -golang.org/x/crypto v0.0.0-20191205161847-0a08dada0ff9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/image v0.0.0-20180926015637-991ec62608f3/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U= -golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180418062111-d41e8174641f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190225153610-fe579d43d832/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271 h1:N66aaryRB3Ax92gH0v3hp1QYZ3zWWCCUR/j8Ifh45Ss= -golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191204025024-5ee1b9f4859a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20180419222023-a2a45943ae67/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180928133829-e4b3c5e90611/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191028164358-195ce5e7f934 h1:u/E0NqCIWRDAo9WCFo6Ko49njPFDLSd3z+X1HgWDMpE= -golang.org/x/sys v0.0.0-20191028164358-195ce5e7f934/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6 h1:DvY3Zkh7KabQE/kfzMvYvKirSiguP9Q/veMtkYyf0o8= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606050223-4d9ae51c2468/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac h1:MQEvx39qSf8vyrx3XRaOe+j1UDIzKwkYOVObRgGPVqI= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191205060818-73c7173a9f7d h1:HjXQhd1u/svlhQb0V71w0I7RKZAI5Vd1lp/4FscZcJ4= -golang.org/x/tools v0.0.0-20191205060818-73c7173a9f7d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200313205530-4303120df7d8/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190128161407-8ac453e89fca/go.mod h1:L3J43x8/uS+qIUoksaLKe6OS3nUKxOKuIFz1sl2/jx4= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20191028173616-919d9bdd9fe6 h1:UXl+Zk3jqqcbEVV7ace5lrt4YdA4tXiz3f/KbmD29Vo= -google.golang.org/genproto v0.0.0-20191028173616-919d9bdd9fe6/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200620020550-bd6e04640131 h1:IXNofpkLhv80L3TJQvj2YQLnMHZgAktycswvtXwQiRk= -google.golang.org/genproto v0.0.0-20200620020550-bd6e04640131/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0= +google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 h1:6GQBEOdGkX6MMTLT9V+TjtIRZCw9VPD5Z+yHY9wMgS0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= -google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= +google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 h1:FVCohIoYO7IJoDDVpV2pdq7SgrMH6wHnuTyrdrxJNoY= +gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0/go.mod h1:OdE7CF6DbADk7lN8LIKRzRJTTZXIjtWgA5THM5lhBAw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.27 h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo= -gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/square/go-jose.v1 v1.1.2/go.mod h1:QpYS+a4WhS+DTlyQIi6Ka7MS3SuR9a055rgXNEe6EiA= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.0.0-20171116090243-287cf08546ab/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -helm.sh/helm/v3 v3.0.0 h1:or/9cs1GgfcTQeEnR2CVJNw893/rmqIG1KsNHmUiSFw= -helm.sh/helm/v3 v3.0.0/go.mod h1:sI7B9yfvMgxtTPMWdk1jSKJ2aa59UyP9qhPydqW6mgo= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +helm.sh/helm/v3 v3.12.3 h1:5y1+Sbty12t48T/t/CGNYUIME5BJ0WKfmW/sobYqkFg= +helm.sh/helm/v3 v3.12.3/go.mod h1:KPKQiX9IP5HX7o5YnnhViMnNuKiL/lJBVQ47GHe1R0k= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/helm v2.13.1+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= -k8s.io/helm v2.16.1+incompatible h1:L+k810plJlaGWEw1EszeT4deK8XVaKxac1oGcuB+WDc= -k8s.io/helm v2.16.1+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= -k8s.io/helm v2.16.10+incompatible h1:eFksERw3joHEL62TrcDX8I5fgEQJvit4qxxPXAkYTyQ= -k8s.io/helm v2.16.10+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20190918143330-0270cf2f1c1d h1:Xpe6sK+RY4ZgCTyZ3y273UmFmURhjtoJiwOMbQsXitY= -k8s.io/kube-openapi v0.0.0-20190918143330-0270cf2f1c1d/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kubernetes/staging/src/k8s.io/api v0.0.0-20191001043732-d647ddbd755f h1:qnPdWj5mRMsfvP85N8J2ogqiu8Aq1T6MPsJdxL3g6Ds= -k8s.io/kubernetes/staging/src/k8s.io/api v0.0.0-20191001043732-d647ddbd755f/go.mod h1:cHpnPcbNeE90PrTRnTu13OM+FN+ROt82odVbEh++81o= -k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v0.0.0-20191001043732-d647ddbd755f h1:bpyOu4+qNIFZRKRtSXGv/iJ7YzqwXrAOoaKxUaYKrV4= -k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver v0.0.0-20191001043732-d647ddbd755f/go.mod h1:f1tFT2pOqPzfckbG1GjHIzy3G+T2LW7rchcruNoLaiM= -k8s.io/kubernetes/staging/src/k8s.io/apimachinery v0.0.0-20191001043732-d647ddbd755f h1:X3br+JCtf40mnzQsKAnHnezd1CvCENgG5uLJTbAspZ4= -k8s.io/kubernetes/staging/src/k8s.io/apimachinery v0.0.0-20191001043732-d647ddbd755f/go.mod h1:PNw+FbGH4/s3zK9V3rAeMiHTbQz2CU/yqAkfQ2UgLVs= -k8s.io/kubernetes/staging/src/k8s.io/apiserver v0.0.0-20191001043732-d647ddbd755f/go.mod h1:WmFoxjELD2xtWb77Yj9RPibT5ACkQYEW9lPQtNkGtbE= -k8s.io/kubernetes/staging/src/k8s.io/cli-runtime v0.0.0-20191001043732-d647ddbd755f h1:6CkT409OUoX4ZiP++1N3id3PCcOoktBvclNsDKPKrfc= -k8s.io/kubernetes/staging/src/k8s.io/cli-runtime v0.0.0-20191001043732-d647ddbd755f/go.mod h1:nBogvbgjMgo7AeVA6CuqVO13LVIfmlQ11t6xzAJdBN8= -k8s.io/kubernetes/staging/src/k8s.io/client-go v0.0.0-20191001043732-d647ddbd755f h1:ksJC2cpBqkCP8bzmfDYXr65JRpt9JmANvaKIR3qggt4= -k8s.io/kubernetes/staging/src/k8s.io/client-go v0.0.0-20191001043732-d647ddbd755f/go.mod h1:GiGfbsjtP4tOW6zgpL8/vCUoyXAV5+9X2onLursPi08= -k8s.io/kubernetes/staging/src/k8s.io/code-generator v0.0.0-20191001043732-d647ddbd755f/go.mod h1:L8deZCu6NpzgKzY91TOGKJ1JtAoHd8WyJ/HdoxqZCGo= -k8s.io/kubernetes/staging/src/k8s.io/component-base v0.0.0-20191001043732-d647ddbd755f/go.mod h1:spPP+vRNS8EsnNNIhFCZTTuRO3XhV1WoF18HJySoZn8= -k8s.io/kubernetes/staging/src/k8s.io/kubectl v0.0.0-20191001043732-d647ddbd755f h1:vH4+rTRLDI8z9dQCZ6cJcIi3RMGZ6JwJWyLbrSNHBCE= -k8s.io/kubernetes/staging/src/k8s.io/kubectl v0.0.0-20191001043732-d647ddbd755f/go.mod h1:ellVfoCz8MlDjTnkqsTkU5svJOIjcK3XNx/onmixgDk= -k8s.io/kubernetes/staging/src/k8s.io/metrics v0.0.0-20191001043732-d647ddbd755f/go.mod h1:vQHTmz0IaEb7/OXPSor1uga8Er0V+2M5aSdXG832NbU= -k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20191010214722-8d271d903fe4 h1:Gi+/O1saihwDqnlmC8Vhv1M5Sp4+rbOmK9TbsLn8ZEA= -k8s.io/utils v0.0.0-20191010214722-8d271d903fe4/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= -modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= -modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= -rsc.io/letsencrypt v0.0.1/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= -sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0= -sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= -sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.4.0-0.dev/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= +k8s.io/api v0.28.2 h1:9mpl5mOb6vXZvqbQmankOfPIGiudghwCoLl1EYfUZbw= +k8s.io/api v0.28.2/go.mod h1:RVnJBsjU8tcMq7C3iaRSGMeaKt2TWEUXcpIt/90fjEg= +k8s.io/apiextensions-apiserver v0.27.3 h1:xAwC1iYabi+TDfpRhxh4Eapl14Hs2OftM2DN5MpgKX4= +k8s.io/apiextensions-apiserver v0.27.3/go.mod h1:BH3wJ5NsB9XE1w+R6SSVpKmYNyIiyIz9xAmBl8Mb+84= +k8s.io/apimachinery v0.28.2 h1:KCOJLrc6gu+wV1BYgwik4AF4vXOlVJPdiqn0yAWWwXQ= +k8s.io/apimachinery v0.28.2/go.mod h1:RdzF87y/ngqk9H4z3EL2Rppv5jj95vGS/HaFXrLDApU= +k8s.io/apiserver v0.27.3 h1:AxLvq9JYtveYWK+D/Dz/uoPCfz8JC9asR5z7+I/bbQ4= +k8s.io/apiserver v0.27.3/go.mod h1:Y61+EaBMVWUBJtxD5//cZ48cHZbQD+yIyV/4iEBhhNA= +k8s.io/cli-runtime v0.28.1 h1:7Njc4eD5kaO4tYdSYVJJEs54koYD/vT6gxOq8dEVf9g= +k8s.io/cli-runtime v0.28.1/go.mod h1:yIThSWkAVLqeRs74CMkq6lNFW42GyJmvMtcNn01SZho= +k8s.io/client-go v0.28.2 h1:DNoYI1vGq0slMBN/SWKMZMw0Rq+0EQW6/AK4v9+3VeY= +k8s.io/client-go v0.28.2/go.mod h1:sMkApowspLuc7omj1FOSUxSoqjr+d5Q0Yc0LOFnYFJY= +k8s.io/component-base v0.28.1 h1:LA4AujMlK2mr0tZbQDZkjWbdhTV5bRyEyAFe0TJxlWg= +k8s.io/component-base v0.28.1/go.mod h1:jI11OyhbX21Qtbav7JkhehyBsIRfnO8oEgoAR12ArIU= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= +k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= +k8s.io/kubectl v0.28.1 h1:jAq4yKEqQL+fwkWcEsUWxhJ7uIRcOYQraJxx4SyAMTY= +k8s.io/kubectl v0.28.1/go.mod h1:a0nk/lMMeKBulp0lMTJAKbkjZg1ykqfLfz/d6dnv1ak= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= +oras.land/oras-go v1.2.3 h1:v8PJl+gEAntI1pJ/LCrDgsuk+1PKVavVEPsYIHFE5uY= +oras.land/oras-go v1.2.3/go.mod h1:M/uaPdYklze0Vf3AakfarnpoEckvw0ESbRdN8Z1vdJg= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/aws-iam-authenticator v0.6.11 h1:qHMMUBh7FKvVWVMcQvdKcfVKFk2c+AbR1L6kSqTeB5E= +sigs.k8s.io/aws-iam-authenticator v0.6.11/go.mod h1:uh/d/yhtzJXBdevntKgTKRaabgD2T/JI/YdV+9IaycE= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 h1:XX3Ajgzov2RKUdc5jW3t5jwY7Bo7dcRm+tFxT+NfgY0= +sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY= +sigs.k8s.io/kustomize/kyaml v0.14.3 h1:WpabVAKZe2YEp/irTSHwD6bfjwZnTtSDewd2BVJGMZs= +sigs.k8s.io/kustomize/kyaml v0.14.3/go.mod h1:npvh9epWysfQ689Rtt/U+dpOJDTBn8kUnF1O6VzvmZA= +sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk= +sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/src/jetstream/http_basic_requests.go b/src/jetstream/http_basic_requests.go index cd8b28931b..a5cf43a368 100644 --- a/src/jetstream/http_basic_requests.go +++ b/src/jetstream/http_basic_requests.go @@ -7,13 +7,13 @@ import ( log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) -func (p *portalProxy) doHttpBasicFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (p *portalProxy) doHttpBasicFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("doHttpBasicFlowRequest") - authHandler := func(tokenRec interfaces.TokenRecord, cnsi interfaces.CNSIRecord) (*http.Response, error) { + authHandler := func(tokenRec api.TokenRecord, cnsi api.CNSIRecord) (*http.Response, error) { // Http Basic has no token refresh or expiry - so much simpler than the OAuth flow req.Header.Set("Authorization", "basic "+tokenRec.AuthToken) client := p.GetHttpClientForRequest(req, cnsi.SkipSSLValidation) @@ -23,24 +23,24 @@ func (p *portalProxy) doHttpBasicFlowRequest(cnsiRequest *interfaces.CNSIRequest } -func (p *portalProxy) doBearerFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (p *portalProxy) doBearerFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("doBearerFlowRequest") return p.doAuthHeaderFlowRequest("bearer", cnsiRequest, req) } -func (p *portalProxy) doTokenFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (p *portalProxy) doTokenFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("doTokenFlowRequest") return p.doAuthHeaderFlowRequest("token", cnsiRequest, req) } // Auth where a toekn is passed in the HTTP Authorization -func (p *portalProxy) doAuthHeaderFlowRequest(headerPrefix string, cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (p *portalProxy) doAuthHeaderFlowRequest(headerPrefix string, cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("doAuthHeaderFlowRequest") - authHandler := func(tokenRec interfaces.TokenRecord, cnsi interfaces.CNSIRecord) (*http.Response, error) { + authHandler := func(tokenRec api.TokenRecord, cnsi api.CNSIRecord) (*http.Response, error) { authTokenDecodedBytes, err := base64.StdEncoding.DecodeString(tokenRec.AuthToken) if err != nil { - return nil, errors.New("Failed to decode auth token") + return nil, errors.New("failed to decode auth token") } // Token auth has no token refresh or expiry - so much simpler than the OAuth flow diff --git a/src/jetstream/info.go b/src/jetstream/info.go index 5e00266a90..3ca10c36da 100644 --- a/src/jetstream/info.go +++ b/src/jetstream/info.go @@ -6,7 +6,7 @@ import ( "net/http" "strings" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) @@ -16,7 +16,7 @@ type Endpoint struct { GUID string `json:"guid"` Name string `json:"name"` Version string `json:"version"` - User *interfaces.ConnectedUser `json:"user"` + User *api.ConnectedUser `json:"user"` CNSIType string `json:"type"` } @@ -30,29 +30,29 @@ func (p *portalProxy) info(c echo.Context) error { return c.JSON(http.StatusOK, s) } -func (p *portalProxy) getInfo(c echo.Context) (*interfaces.Info, error) { +func (p *portalProxy) getInfo(c echo.Context) (*api.Info, error) { // get the version versions, err := p.getVersionsData() if err != nil { - return nil, errors.New("Could not find database version") + return nil, errors.New("could not find database version") } // get the user userGUID, err := p.GetSessionStringValue(c, "user_id") if err != nil { - return nil, errors.New("Could not find session user_id") + return nil, errors.New("could not find session user_id") } uaaUser, err := p.StratosAuthService.GetUser(userGUID) if err != nil { - return nil, errors.New("Could not load session user data") + return nil, errors.New("could not load session user data") } // create initial info struct - s := &interfaces.Info{ + s := &api.Info{ Versions: versions, User: uaaUser, - Endpoints: make(map[string]map[string]*interfaces.EndpointDetail), + Endpoints: make(map[string]map[string]*api.EndpointDetail), CloudFoundry: p.Config.CloudFoundryInfo, PluginConfig: p.Config.PluginConfig, } @@ -78,7 +78,7 @@ func (p *portalProxy) getInfo(c echo.Context) (*interfaces.Info, error) { } // Empty Type can be used if a plugin just wants to implement UpdateMetadata if len(endpointPlugin.GetType()) > 0 { - s.Endpoints[endpointPlugin.GetType()] = make(map[string]*interfaces.EndpointDetail) + s.Endpoints[endpointPlugin.GetType()] = make(map[string]*api.EndpointDetail) } } @@ -86,7 +86,7 @@ func (p *portalProxy) getInfo(c echo.Context) (*interfaces.Info, error) { cnsiList, _ := p.buildCNSIList(c) for _, cnsi := range cnsiList { // Extend the CNSI record - endpoint := &interfaces.EndpointDetail{ + endpoint := &api.EndpointDetail{ CNSIRecord: cnsi, EndpointMetadata: marshalEndpointMetadata(cnsi.Metadata), Metadata: make(map[string]string), @@ -101,7 +101,7 @@ func (p *portalProxy) getInfo(c echo.Context) (*interfaces.Info, error) { } // set the creator preemptively as admin, if no id is found - endpoint.Creator = &interfaces.CreatorInfo{ + endpoint.Creator = &api.CreatorInfo{ Name: "System Endpoint", Admin: false, System: true, diff --git a/src/jetstream/jwt.go b/src/jetstream/jwt.go index e715fa0022..1955335199 100644 --- a/src/jetstream/jwt.go +++ b/src/jetstream/jwt.go @@ -8,25 +8,25 @@ import ( log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) -func (p *portalProxy) GetUserTokenInfo(tok string) (u *interfaces.JWTUserTokenInfo, err error) { +func (p *portalProxy) GetUserTokenInfo(tok string) (u *api.JWTUserTokenInfo, err error) { log.Debug("getUserTokenInfo") accessToken := strings.TrimPrefix(tok, "bearer ") splits := strings.Split(accessToken, ".") if len(splits) < 3 { - return u, errors.New("Token was poorly formed.") + return u, errors.New("token was poorly formed") } decoded, err := base64.RawStdEncoding.DecodeString(splits[1]) if err != nil { - return u, errors.New("Unable to decode token string.") + return u, errors.New("unable to decode token string") } if err = json.Unmarshal(decoded, &u); err != nil { - return u, errors.New("Failed to unmarshall decoded token.") + return u, errors.New("failed to unmarshall decoded token") } return u, err diff --git a/src/jetstream/load_plugins.go b/src/jetstream/load_plugins.go index 173db09b96..d4846309ca 100644 --- a/src/jetstream/load_plugins.go +++ b/src/jetstream/load_plugins.go @@ -1,7 +1,7 @@ package main import ( - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/yamlgenerated" @@ -9,12 +9,12 @@ import ( func (pp *portalProxy) loadPlugins() { - pp.Plugins = make(map[string]interfaces.StratosPlugin) + pp.Plugins = make(map[string]api.StratosPlugin) log.Info("Initialising plugins") yamlgenerated.MakePluginsFromConfig() - for name := range interfaces.PluginInits { + for name := range api.PluginInits { addPlugin(pp, name) } } @@ -26,7 +26,7 @@ func addPlugin(pp *portalProxy, name string) bool { } // Register this one if not already registered - reg, ok := interfaces.PluginInits[name] + reg, ok := api.PluginInits[name] if !ok { // Could not find plugin log.Errorf("Could not find plugin: %s", name) diff --git a/src/jetstream/localusers.go b/src/jetstream/localusers.go index eee270d3fb..0bbb4d8ccf 100644 --- a/src/jetstream/localusers.go +++ b/src/jetstream/localusers.go @@ -8,7 +8,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/localusers" ) @@ -16,7 +16,7 @@ func (p *portalProxy) FindUserGUID(c echo.Context) (string, error) { username := c.FormValue("username") if len(username) == 0 { - return "", errors.New("Needs username") + return "", errors.New("needs username") } localUsersRepo, err := localusers.NewPgsqlLocalUsersRepository(p.DatabaseConnectionPool) @@ -43,7 +43,7 @@ func (p *portalProxy) AddLocalUser(c echo.Context) (string, error) { email := c.FormValue("email") if len(username) == 0 || len(password) == 0 || len(scope) == 0 { - return "", errors.New("Needs username, password and scope") + return "", errors.New("needs username, password and scope") } //Generate a user GUID and hash the password @@ -58,7 +58,7 @@ func (p *portalProxy) AddLocalUser(c echo.Context) (string, error) { if err != nil { log.Errorf("Database error getting repo for local users: %v", err) } else { - user := interfaces.LocalUser{UserGUID: userGUID, PasswordHash: passwordHash, Username: username, Email: email, Scope: scope} + user := api.LocalUser{UserGUID: userGUID, PasswordHash: passwordHash, Username: username, Email: email, Scope: scope} err = localUsersRepo.AddLocalUser(user) if err != nil { log.Errorf("Error adding local user %v", err) diff --git a/src/jetstream/localusers_test.go b/src/jetstream/localusers_test.go index 67cabf0b0e..b7a0b392ef 100644 --- a/src/jetstream/localusers_test.go +++ b/src/jetstream/localusers_test.go @@ -1,20 +1,18 @@ package main import ( - "fmt" "testing" "time" - sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1" uuid "github.com/satori/go.uuid" log "github.com/sirupsen/logrus" + sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/localusers" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" . "github.com/smartystreets/goconvey/convey" - ) const ( @@ -36,16 +34,16 @@ func TestAddLocalUser(t *testing.T) { mock.ExpectExec(addLocalUser).WillReturnResult(sqlmock.NewResult(1, 1)) guid, err := pp.AddLocalUser(ctx) - + expectedGUIDRow := sqlmock.NewRows([]string{"user_guid"}).AddRow(guid) - mock.ExpectQuery(findUserGUID).WillReturnRows(expectedGUIDRow) + mock.ExpectQuery(findUserGUID).WillReturnRows(expectedGUIDRow) fetchedGUID, err := pp.FindUserGUID(ctx) Convey("Should not fail to login", func() { So(err, ShouldBeNil) So(guid, ShouldEqual, fetchedGUID) }) - + Convey("Expectations should be met", func() { So(mock.ExpectationsWereMet(), ShouldBeNil) }) @@ -71,7 +69,7 @@ func TestAddLocalUserMissingUsername(t *testing.T) { So(err, ShouldNotBeNil) So(guid, ShouldEqual, "") }) - + Convey("Expectations should be met", func() { So(mock.ExpectationsWereMet(), ShouldBeNil) }) @@ -97,7 +95,7 @@ func TestAddLocalUserMissingPassword(t *testing.T) { So(err, ShouldNotBeNil) So(guid, ShouldEqual, "") }) - + Convey("Expectations should be met", func() { So(mock.ExpectationsWereMet(), ShouldBeNil) }) @@ -165,9 +163,9 @@ func TestFindPasswordHash(t *testing.T) { username := "testuser" password := "changeme" - email := "test.person@somedomain.com" - scope := "stratos.admin" - + email := "test.person@somedomain.com" + scope := "stratos.admin" + //Hash the password generatedPasswordHash, _ := crypto.HashPassword(password) @@ -175,7 +173,7 @@ func TestFindPasswordHash(t *testing.T) { userGUID := uuid.NewV4().String() mock.ExpectExec(addLocalUser).WillReturnResult(sqlmock.NewResult(1, 1)) - user := interfaces.LocalUser{UserGUID: userGUID, PasswordHash: generatedPasswordHash, Username: username, Email: email, Scope: scope} + user := api.LocalUser{UserGUID: userGUID, PasswordHash: generatedPasswordHash, Username: username, Email: email, Scope: scope} err = localUsersRepo.AddLocalUser(user) if err != nil { log.Errorf("Error hashing user password: %v", err) @@ -188,7 +186,7 @@ func TestFindPasswordHash(t *testing.T) { Convey("Password hashes should match", func() { So(fetchedPasswordHash, ShouldResemble, generatedPasswordHash) }) - + Convey("Expectations should be met", func() { So(mock.ExpectationsWereMet(), ShouldBeNil) }) @@ -210,9 +208,9 @@ func TestUpdateLastLoginTime(t *testing.T) { username := "testuser" password := "changeme" - email := "test.person@somedomain.com" - scope := "stratos.admin" - + email := "test.person@somedomain.com" + scope := "stratos.admin" + //Hash the password generatedPasswordHash, _ := crypto.HashPassword(password) @@ -221,15 +219,15 @@ func TestUpdateLastLoginTime(t *testing.T) { mock.ExpectExec(addLocalUser).WillReturnResult(sqlmock.NewResult(1, 1)) - user := interfaces.LocalUser{UserGUID: userGUID, PasswordHash: generatedPasswordHash, Username: username, Email: email, Scope: scope} + user := api.LocalUser{UserGUID: userGUID, PasswordHash: generatedPasswordHash, Username: username, Email: email, Scope: scope} localUsersRepo.AddLocalUser(user) //Now generate and update the login time generatedLoginTime := time.Now() - mock.ExpectExec(updateLastLoginTime).WillReturnResult(sqlmock.NewResult(1,1)) + mock.ExpectExec(updateLastLoginTime).WillReturnResult(sqlmock.NewResult(1, 1)) localUsersRepo.UpdateLastLoginTime(userGUID, generatedLoginTime) - + expectedLastLoginTimeRow := sqlmock.NewRows([]string{"login_time"}).AddRow(generatedLoginTime) mock.ExpectQuery(findLastLoginTime).WillReturnRows(expectedLastLoginTimeRow) fetchedLoginTime, _ := localUsersRepo.FindLastLoginTime(userGUID) @@ -237,9 +235,9 @@ func TestUpdateLastLoginTime(t *testing.T) { Convey("Login times should match", func() { So(fetchedLoginTime, ShouldEqual, generatedLoginTime) }) - + Convey("Expectations should be met", func() { So(mock.ExpectationsWereMet(), ShouldBeNil) }) }) -} \ No newline at end of file +} diff --git a/src/jetstream/main.go b/src/jetstream/main.go index 6ad5f6d3fd..ac5c839f61 100644 --- a/src/jetstream/main.go +++ b/src/jetstream/main.go @@ -9,8 +9,6 @@ import ( "errors" "fmt" "io" - "io/ioutil" - "math/rand" "net" "net/http" "os" @@ -27,7 +25,6 @@ import ( "github.com/cloudfoundry-incubator/stratos/src/jetstream/custombinder" _ "github.com/cloudfoundry-incubator/stratos/src/jetstream/docs" - "bitbucket.org/liamstask/goose/lib/goose" "github.com/antonlindstrom/pgstore" "github.com/cf-stratos/mysqlstore" cfenv "github.com/cloudfoundry-community/go-cfenv" @@ -40,14 +37,14 @@ import ( log "github.com/sirupsen/logrus" echoSwagger "github.com/swaggo/echo-swagger" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" "github.com/cloudfoundry-incubator/stratos/src/jetstream/factory" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/apikeys" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/cnsis" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/console_config" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/localusers" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/sessiondata" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/tokens" @@ -138,8 +135,6 @@ func main() { } } - rand.Seed(time.Now().UnixNano()) - log.SetOutput(os.Stdout) log.Info("========================================") @@ -149,7 +144,7 @@ func main() { log.Info("Initialization started.") // Load the portal configuration from env vars - var portalConfig interfaces.PortalConfig + var portalConfig api.PortalConfig portalConfig, err := loadPortalConfig(portalConfig, envLookup) if err != nil { log.Fatal(err) // calls os.Exit(1) after logging @@ -175,7 +170,7 @@ func main() { log.Infof("Stratos Version: %s", portalConfig.ConsoleVersion) // Initialize an empty config for the console - initially not setup - portalConfig.ConsoleConfig = new(interfaces.ConsoleConfig) + portalConfig.ConsoleConfig = new(api.ConsoleConfig) // Initialize the HTTP client initializeHTTPClients(portalConfig.HTTPClientTimeoutInSecs, portalConfig.HTTPClientTimeoutMutatingInSecs, portalConfig.HTTPConnectionTimeoutInSecs) @@ -206,7 +201,7 @@ func main() { apikeys.InitRepositoryProvider(dc.DatabaseProvider) // Establish a Postgresql connection pool - databaseConnectionPool, migratorConf, err := initConnPool(dc, envLookup) + databaseConnectionPool, err := initConnPool(dc, envLookup) if err != nil { log.Fatal(err.Error()) } @@ -221,7 +216,7 @@ func main() { log.Info("Session Store Secret detected okay") } - for _, configPlugin := range interfaces.JetstreamConfigPlugins { + for _, configPlugin := range api.JetstreamConfigPlugins { configPlugin(envLookup, &portalConfig) } @@ -236,7 +231,7 @@ func main() { // Config plugins get to determine if we should run migrations on this instance if portalConfig.CanMigrateDatabaseSchema { // Create the database schema otherwise wait for the datbase schema - err = datastore.ApplyMigrations(migratorConf, databaseConnectionPool) + err = datastore.ApplyMigrations(databaseConnectionPool) if err != nil { log.Fatal(err) } @@ -322,7 +317,7 @@ func main() { // Plugin cleanup for _, plugin := range portalProxy.Plugins { - if pCleanup, ok := plugin.(interfaces.StratosPluginCleanup); ok { + if pCleanup, ok := plugin.(api.StratosPluginCleanup); ok { pCleanup.Destroy() } } @@ -339,10 +334,10 @@ func main() { } // Init auth service - err = portalProxy.InitStratosAuthService(interfaces.AuthEndpointTypes[portalProxy.Config.AuthEndpointType]) + err = portalProxy.InitStratosAuthService(api.AuthEndpointTypes[portalProxy.Config.AuthEndpointType]) if err != nil { log.Warnf("Defaulting to UAA authentication: %v", err) - err = portalProxy.InitStratosAuthService(interfaces.Remote) + err = portalProxy.InitStratosAuthService(api.Remote) if err != nil { log.Fatalf("Could not initialise auth service. %v", err) } @@ -351,7 +346,7 @@ func main() { // Initialise Plugins portalProxy.loadPlugins() - initedPlugins := make(map[string]interfaces.StratosPlugin) + initedPlugins := make(map[string]api.StratosPlugin) portalProxy.PluginsStatus = make(map[string]bool) // Initialise general plugins @@ -398,7 +393,7 @@ func (portalProxy *portalProxy) GetDatabaseConnection() *sql.DB { } // GetSessionDataStore returns the store that can be used for extra session data -func (portalProxy *portalProxy) GetSessionDataStore() interfaces.SessionDataStore { +func (portalProxy *portalProxy) GetSessionDataStore() api.SessionDataStore { return portalProxy.SessionDataStore } @@ -445,7 +440,7 @@ func initialiseConsoleConfiguration(portalProxy *portalProxy) error { return nil } -func showStratosConfig(portalProxy *portalProxy, config *interfaces.ConsoleConfig) { +func showStratosConfig(portalProxy *portalProxy, config *api.ConsoleConfig) { log.Infof("Stratos is initialized with the following setup:") log.Infof("... Auth Endpoint Type : %s", config.AuthEndpointType) @@ -464,7 +459,7 @@ func showSSOConfig(portalProxy *portalProxy) { log.Infof("... SSO Redirect Allow-list : %s", portalProxy.Config.SSOAllowList) } -func getEncryptionKey(pc interfaces.PortalConfig) ([]byte, error) { +func getEncryptionKey(pc api.PortalConfig) ([]byte, error) { log.Debug("getEncryptionKey") // If it exists in "EncryptionKey" we must be in compose; use it. @@ -479,7 +474,7 @@ func getEncryptionKey(pc interfaces.PortalConfig) ([]byte, error) { // Check we have volume and filename if len(pc.EncryptionKeyVolume) == 0 && len(pc.EncryptionKeyFilename) == 0 { - return nil, errors.New("You must configure either an Encryption key or the Encryption key filename") + return nil, errors.New("you must configure either an Encryption key or the Encryption key filename") } // Read the key from the shared volume @@ -492,13 +487,13 @@ func getEncryptionKey(pc interfaces.PortalConfig) ([]byte, error) { return key, nil } -func initConnPool(dc datastore.DatabaseConfig, env *env.VarSet) (*sql.DB, *goose.DBConf, error) { +func initConnPool(dc datastore.DatabaseConfig, env *env.VarSet) (*sql.DB, error) { log.Debug("initConnPool") // initialize the database connection pool - pool, conf, err := datastore.GetConnection(dc, env) + pool, err := datastore.GetConnection(dc, env) if err != nil { - return nil, nil, err + return nil, err } // Ensure that the database is responsive @@ -515,8 +510,8 @@ func initConnPool(dc datastore.DatabaseConfig, env *env.VarSet) (*sql.DB, *goose } // If our timeout boundary has been exceeded, bail out - if timeout.Sub(time.Now()) < 0 { - return nil, nil, fmt.Errorf("timeout boundary of %d minutes has been exceeded. Exiting", TimeoutBoundary) + if time.Until(timeout) < 0 { + return nil, fmt.Errorf("timeout boundary of %d minutes has been exceeded. Exiting", TimeoutBoundary) } // Circle back and try again @@ -524,10 +519,10 @@ func initConnPool(dc datastore.DatabaseConfig, env *env.VarSet) (*sql.DB, *goose time.Sleep(time.Second) } - return pool, conf, nil + return pool, nil } -func initSessionStore(db *sql.DB, databaseProvider string, pc interfaces.PortalConfig, sessionExpiry int, env *env.VarSet) (HttpSessionStore, *sessions.Options, error) { +func initSessionStore(db *sql.DB, databaseProvider string, pc api.PortalConfig, sessionExpiry int, env *env.VarSet) (HttpSessionStore, *sessions.Options, error) { log.Debug("initSessionStore") sessionsTable := "sessions" @@ -579,11 +574,11 @@ func initSessionStore(db *sql.DB, databaseProvider string, pc interfaces.PortalC return sessionStore, sessionStore.Options, err } -func loadPortalConfig(pc interfaces.PortalConfig, env *env.VarSet) (interfaces.PortalConfig, error) { +func loadPortalConfig(pc api.PortalConfig, env *env.VarSet) (api.PortalConfig, error) { log.Debug("loadPortalConfig") if err := config.Load(&pc, env.Lookup); err != nil { - return pc, fmt.Errorf("Unable to load configuration. %v", err) + return pc, fmt.Errorf("unable to load configuration. %v", err) } // Add custom properties @@ -598,9 +593,9 @@ func loadPortalConfig(pc interfaces.PortalConfig, env *env.VarSet) (interfaces.P if len(pc.AuthEndpointType) == 0 { //Default to "remote" if AUTH_ENDPOINT_TYPE is not set - pc.AuthEndpointType = string(interfaces.Remote) + pc.AuthEndpointType = string(api.Remote) } else { - val, endpointTypeSupported := interfaces.AuthEndpointTypes[pc.AuthEndpointType] + val, endpointTypeSupported := api.AuthEndpointTypes[pc.AuthEndpointType] if endpointTypeSupported { pc.AuthEndpointType = string(val) } else { @@ -617,24 +612,24 @@ func loadDatabaseConfig(dc datastore.DatabaseConfig, env *env.VarSet) (datastore parsedDBConfig, err := datastore.ParseCFEnvs(&dc, env) if err != nil { - return dc, errors.New("Could not parse Cloud Foundry Services environment") + return dc, errors.New("could not parse Cloud Foundry Services environment") } if parsedDBConfig { log.Info("Using Cloud Foundry DB service") } else if err := config.Load(&dc, env.Lookup); err != nil { - return dc, fmt.Errorf("Unable to load database configuration. %v", err) + return dc, fmt.Errorf("unable to load database configuration. %v", err) } dc, err = datastore.NewDatabaseConnectionParametersFromConfig(dc) if err != nil { - return dc, fmt.Errorf("Unable to load database configuration. %v", err) + return dc, fmt.Errorf("unable to load database configuration. %v", err) } return dc, nil } -func detectTLSCert(pc interfaces.PortalConfig) (string, string, error) { +func detectTLSCert(pc api.PortalConfig) (string, string, error) { log.Debug("detectTLSCert") certFilename := "pproxy.crt" certKeyFilename := "pproxy.key" @@ -660,19 +655,19 @@ func detectTLSCert(pc interfaces.PortalConfig) (string, string, error) { return pc.TLSCertPath, pc.TLSCertKeyPath, nil } - err := ioutil.WriteFile(certFilename, []byte(pc.TLSCert), 0600) + err := os.WriteFile(certFilename, []byte(pc.TLSCert), 0600) if err != nil { return "", "", err } - err = ioutil.WriteFile(certKeyFilename, []byte(pc.TLSCertKey), 0600) + err = os.WriteFile(certKeyFilename, []byte(pc.TLSCertKey), 0600) if err != nil { return "", "", err } return certFilename, certKeyFilename, nil } -func newPortalProxy(pc interfaces.PortalConfig, dcp *sql.DB, ss HttpSessionStore, sessionStoreOptions *sessions.Options, env *env.VarSet) *portalProxy { +func newPortalProxy(pc api.PortalConfig, dcp *sql.DB, ss HttpSessionStore, sessionStoreOptions *sessions.Options, env *env.VarSet) *portalProxy { log.Debug("newPortalProxy") // Generate cookie name - avoids issues if the cookie domain is changed @@ -706,30 +701,30 @@ func newPortalProxy(pc interfaces.PortalConfig, dcp *sql.DB, ss HttpSessionStore SessionStoreOptions: sessionStoreOptions, SessionCookieName: cookieName, EmptyCookieMatcher: regexp.MustCompile(cookieName + "=(?:;[ ]*|$)"), - AuthProviders: make(map[string]interfaces.AuthProvider), + AuthProviders: make(map[string]api.AuthProvider), env: env, } // Initialize built-in auth providers // Basic Auth - pp.AddAuthProvider(interfaces.AuthTypeHttpBasic, interfaces.AuthProvider{ + pp.AddAuthProvider(api.AuthTypeHttpBasic, api.AuthProvider{ Handler: pp.doHttpBasicFlowRequest, UserInfo: pp.GetCNSIUserFromBasicToken, }) // No authentication - pp.AddAuthProvider(interfaces.AuthConnectTypeNone, interfaces.AuthProvider{ + pp.AddAuthProvider(api.AuthConnectTypeNone, api.AuthProvider{ Handler: pp.doNoAuthFlowRequest, UserInfo: pp.getCNSIUserForNoAuth, }) // Generic Bearer Auth (HTTP Authorization header with 'bearer' prefix) - pp.AddAuthProvider(interfaces.AuthTypeBearer, interfaces.AuthProvider{ + pp.AddAuthProvider(api.AuthTypeBearer, api.AuthProvider{ Handler: pp.doBearerFlowRequest, - UserInfo: func(cnsiGUID string, cfTokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { + UserInfo: func(cnsiGUID string, cfTokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { // don't fetch user info for the generic token auth - return &interfaces.ConnectedUser{ + return &api.ConnectedUser{ Name: cfTokenRecord.RefreshToken, GUID: cfTokenRecord.RefreshToken, }, true @@ -737,11 +732,11 @@ func newPortalProxy(pc interfaces.PortalConfig, dcp *sql.DB, ss HttpSessionStore }) // Generic Token Auth (HTTP Authorization header with 'token' prefix) - pp.AddAuthProvider(interfaces.AuthTypeToken, interfaces.AuthProvider{ + pp.AddAuthProvider(api.AuthTypeToken, api.AuthProvider{ Handler: pp.doTokenFlowRequest, - UserInfo: func(cnsiGUID string, cfTokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { + UserInfo: func(cnsiGUID string, cfTokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { // don't fetch user info for the generic token auth - return &interfaces.ConnectedUser{ + return &api.ConnectedUser{ Name: cfTokenRecord.RefreshToken, GUID: cfTokenRecord.RefreshToken, }, true @@ -749,14 +744,14 @@ func newPortalProxy(pc interfaces.PortalConfig, dcp *sql.DB, ss HttpSessionStore }) // OIDC - pp.AddAuthProvider(interfaces.AuthTypeOIDC, interfaces.AuthProvider{ + pp.AddAuthProvider(api.AuthTypeOIDC, api.AuthProvider{ Handler: pp.DoOidcFlowRequest, }) var err error pp.APIKeysRepository, err = apikeys.NewPgsqlAPIKeysRepository(pp.DatabaseConnectionPool) if err != nil { - panic(fmt.Errorf("Can't initialize APIKeysRepository: %v", err)) + panic(fmt.Errorf("can't initialize APIKeysRepository: %v", err)) } return pp @@ -801,13 +796,10 @@ func initializeHTTPClients(timeout int64, timeoutMutating int64, connectionTimeo func echoShouldNotLog(ec echo.Context) bool { // Don't log readiness probes - if ec.Request().RequestURI == "/pp/v1/ping" { - return true - } - return false + return ec.Request().RequestURI == "/pp/v1/ping" } -func start(config interfaces.PortalConfig, p *portalProxy, needSetupMiddleware bool, isUpgrade bool, envLookup *env.VarSet) error { +func start(config api.PortalConfig, p *portalProxy, needSetupMiddleware bool, isUpgrade bool, envLookup *env.VarSet) error { log.Debug("start") e := echo.New() e.HideBanner = true @@ -884,7 +876,7 @@ func start(config interfaces.PortalConfig, p *portalProxy, needSetupMiddleware b return nil } -func (p *portalProxy) GetEndpointTypeSpec(typeName string) (interfaces.EndpointPlugin, error) { +func (p *portalProxy) GetEndpointTypeSpec(typeName string) (api.EndpointPlugin, error) { for _, plugin := range p.Plugins { endpointPlugin, err := plugin.GetEndpointPlugin() @@ -957,16 +949,16 @@ func (p *portalProxy) getHttpClient(skipSSLValidation bool, mutating bool) http. // @Param cnsi_client_id formData string false "Client ID" // @Param cnsi_client_secret formData string false "Client secret" // @Param sub_type formData string false "Endpoint subtype" -// @Success 200 {object} interfaces.CNSIRecord "Endpoint object" -// @Failure 400 {object} interfaces.ErrorResponseBody "Error response" -// @Failure 401 {object} interfaces.ErrorResponseBody "Error response" +// @Success 200 {object} api.CNSIRecord "Endpoint object" +// @Failure 400 {object} api.ErrorResponseBody "Error response" +// @Failure 401 {object} api.ErrorResponseBody "Error response" // @Security ApiKeyAuth // @Router /endpoints [post] func (p *portalProxy) pluginRegisterRouter(c echo.Context) error { log.Debug("pluginRegisterRouter") - params := new(interfaces.RegisterEndpointParams) - err := interfaces.BindOnce(params, c) + params := new(api.RegisterEndpointParams) + err := api.BindOnce(params, c) if err != nil { return err } @@ -980,7 +972,7 @@ func (p *portalProxy) pluginRegisterRouter(c echo.Context) error { return val(c) } - return fmt.Errorf("Unknown endpoint_type %s", params.EndpointType) + return fmt.Errorf("unknown endpoint_type %s", params.EndpointType) } func (p *portalProxy) registerRoutes(e *echo.Echo, needSetupMiddleware bool) { @@ -1154,8 +1146,8 @@ func (p *portalProxy) registerRoutes(e *echo.Echo, needSetupMiddleware bool) { } } -func (p *portalProxy) AddLoginHook(priority int, function interfaces.LoginHookFunc) error { - p.GetConfig().LoginHooks = append(p.GetConfig().LoginHooks, interfaces.LoginHook{ +func (p *portalProxy) AddLoginHook(priority int, function api.LoginHookFunc) error { + p.GetConfig().LoginHooks = append(p.GetConfig().LoginHooks, api.LoginHook{ Priority: priority, Function: function, }) @@ -1178,7 +1170,7 @@ func (p *portalProxy) ExecuteLoginHooks(c echo.Context) error { } if erred { - return fmt.Errorf("Failed to execute one or more login hooks") + return fmt.Errorf("failed to execute one or more login hooks") } return nil } @@ -1278,12 +1270,12 @@ func stopEchoWhenUpgraded(e *echo.Echo, env *env.VarSet) { } // GetStoreFactory gets the store factory -func (portalProxy *portalProxy) GetStoreFactory() interfaces.StoreFactory { +func (portalProxy *portalProxy) GetStoreFactory() api.StoreFactory { return portalProxy.StoreFactory } // SetStoreFactory sets the store factory -func (portalProxy *portalProxy) SetStoreFactory(f interfaces.StoreFactory) interfaces.StoreFactory { +func (portalProxy *portalProxy) SetStoreFactory(f api.StoreFactory) api.StoreFactory { old := portalProxy.StoreFactory portalProxy.StoreFactory = f return old diff --git a/src/jetstream/main_test.go b/src/jetstream/main_test.go index 1d0ff4e15f..2c9d8d6f1a 100644 --- a/src/jetstream/main_test.go +++ b/src/jetstream/main_test.go @@ -6,7 +6,7 @@ import ( "github.com/govau/cf-common/env" "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // DO NOT DELETE - this is necessary for thr HTTP Client used during unit tests @@ -60,7 +60,7 @@ func (e *echoContextMock) Reset(engine.Request, engine.Response) { */ func TestLoadPortalConfig(t *testing.T) { - var pc interfaces.PortalConfig + var pc api.PortalConfig result, err := loadPortalConfig(pc, env.NewVarSet(env.WithMapLookup(map[string]string{ "HTTP_CLIENT_TIMEOUT_IN_SECS": "10", diff --git a/src/jetstream/middleware.go b/src/jetstream/middleware.go index 846cb841fa..2b4cfdd48d 100644 --- a/src/jetstream/middleware.go +++ b/src/jetstream/middleware.go @@ -5,6 +5,7 @@ import ( "database/sql" "errors" "fmt" + "net" "net/http" "os" "strings" @@ -15,8 +16,8 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" ) const cfSessionCookieName = "JSESSIONID" @@ -36,19 +37,22 @@ const APIKeyHeader = "Authentication" // APIKeyAuthScheme - API key authentication scheme const APIKeyAuthScheme = "Bearer" -func handleSessionError(config interfaces.PortalConfig, c echo.Context, err error, doNotLog bool, msg string) error { +func handleSessionError(config api.PortalConfig, c echo.Context, err error, doNotLog bool, msg string) error { log.Debug("handleSessionError") - if strings.Contains(err.Error(), "dial tcp") { - return interfaces.NewHTTPShadowError( - http.StatusServiceUnavailable, - "Service is currently unavailable", - "Service is currently unavailable: %v", err, - ) + var netOpErr *net.OpError + if errors.As(err, &netOpErr) { + if netOpErr.Op == "dial" && netOpErr.Net == "tcp" { + return api.NewHTTPShadowError( + http.StatusServiceUnavailable, + "Service is currently unavailable", + "Service is currently unavailable: %v", err, + ) + } } if doNotLog { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusUnauthorized, msg, msg, ) @@ -56,7 +60,7 @@ func handleSessionError(config interfaces.PortalConfig, c echo.Context, err erro var logMessage = msg + ": %v" - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusUnauthorized, msg, logMessage, err, ) @@ -170,7 +174,7 @@ func (p *portalProxy) xsrfMiddlewareWithConfig(config MiddlewareConfig) echo.Mid errMsg = "XSRF Token was not supplied in the header" } } - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusUnauthorized, "XSRF Token could not be found or does not match", "XSRF Token error: %s", errMsg, @@ -204,7 +208,7 @@ func (p *portalProxy) urlCheckMiddleware(h echo.HandlerFunc) echo.HandlerFunc { requestPath := c.Request().URL.Path if strings.Contains(requestPath, "../") { err := "Invalid path" - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, err, err, @@ -243,7 +247,7 @@ func (p *portalProxy) adminMiddleware(h echo.HandlerFunc) echo.HandlerFunc { return c.NoContent(http.StatusUnauthorized) } - if u.Admin == true { + if u.Admin { return h(c) } } @@ -269,7 +273,7 @@ func (p *portalProxy) endpointAdminMiddleware(h echo.HandlerFunc) echo.HandlerFu endpointAdmin := strings.Contains(strings.Join(u.Scopes, ""), "stratos.endpointadmin") - if endpointAdmin == false && u.Admin == false { + if !endpointAdmin && !u.Admin { return handleSessionError(p.Config, c, errors.New("Unauthorized"), false, "You must be a Stratos admin or endpointAdmin to access this API") } @@ -317,12 +321,12 @@ func errorLoggingMiddleware(h echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { log.Debug("errorLoggingMiddleware") err := h(c) - if shadowError, ok := err.(interfaces.ErrHTTPShadow); ok { + if shadowError, ok := err.(api.ErrHTTPShadow); ok { if len(shadowError.LogMessage) > 0 { log.Error(shadowError.LogMessage) } return shadowError.HTTPError - } else if jetstreamError, ok := err.(interfaces.JetstreamError); ok { + } else if jetstreamError, ok := err.(api.JetstreamError); ok { return jetstreamError.HTTPErrorInContext(c) } @@ -366,7 +370,7 @@ func getAPIKeyFromHeader(c echo.Context) (string, error) { return header[l+1:], nil } - return "", errors.New("No API key in the header") + return "", errors.New("no API key in the header") } func (p *portalProxy) apiKeyMiddleware(h echo.HandlerFunc) echo.HandlerFunc { @@ -429,5 +433,5 @@ func (p *portalProxy) apiKeyMiddleware(h echo.HandlerFunc) echo.HandlerFunc { } func (p *portalProxy) apiKeySkipper(c echo.Context) bool { - return c.Get(APIKeySkipperContextKey) != nil && c.Get(APIKeySkipperContextKey).(bool) == true + return c.Get(APIKeySkipperContextKey) != nil && c.Get(APIKeySkipperContextKey).(bool) } diff --git a/src/jetstream/middleware_test.go b/src/jetstream/middleware_test.go index 70b5f3ebcd..0a48f69b30 100644 --- a/src/jetstream/middleware_test.go +++ b/src/jetstream/middleware_test.go @@ -8,10 +8,11 @@ import ( "net/http/httptest" "testing" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" + mock_api "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/mock" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/apikeys" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/mock_interfaces" + mock_apikeys "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/apikeys/mock" "github.com/golang/mock/gomock" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" @@ -19,7 +20,7 @@ import ( sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1" ) -func makeMockServer(apiKeysRepo apikeys.Repository, mockStratosAuth interfaces.StratosAuth) *portalProxy { +func makeMockServer(apiKeysRepo apikeys.Repository, mockStratosAuth api.StratosAuth) *portalProxy { db, _, dberr := sqlmock.New() if dberr != nil { log.Panicf("an error '%s' was not expected when opening a stub database connection", dberr) @@ -58,8 +59,8 @@ func Test_apiKeyMiddleware(t *testing.T) { log.SetLevel(log.PanicLevel) ctrl := gomock.NewController(t) - mockAPIRepo := apikeys.NewMockRepository(ctrl) - mockStratosAuth := mock_interfaces.NewMockStratosAuth(ctrl) + mockAPIRepo := mock_apikeys.NewMockRepository(ctrl) + mockStratosAuth := mock_api.NewMockStratosAuth(ctrl) pp := makeMockServer(mockAPIRepo, mockStratosAuth) defer ctrl.Finish() defer pp.DatabaseConnectionPool.Close() @@ -153,7 +154,7 @@ func Test_apiKeyMiddleware(t *testing.T) { ctx, rec := makeNewRequest() ctx.Request().Header.Add("Authentication", "Bearer "+apiKeySecret) - apiKey := &interfaces.APIKey{ + apiKey := &api.APIKey{ UserGUID: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", GUID: "00000000-0000-0000-0000-000000000000", } @@ -189,7 +190,7 @@ func Test_apiKeyMiddleware(t *testing.T) { ctx, rec := makeNewRequest() ctx.Request().Header.Add("Authentication", "Bearer "+apiKeySecret) - apiKey := &interfaces.APIKey{ + apiKey := &api.APIKey{ UserGUID: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", GUID: "00000000-0000-0000-0000-000000000000", } @@ -232,12 +233,12 @@ func Test_apiKeyMiddleware(t *testing.T) { ctx, rec := makeNewRequest() ctx.Request().Header.Add("Authentication", "Bearer "+apiKeySecret) - apiKey := &interfaces.APIKey{ + apiKey := &api.APIKey{ UserGUID: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", GUID: "00000000-0000-0000-0000-000000000000", } - connectedUser := &interfaces.ConnectedUser{ + connectedUser := &api.ConnectedUser{ GUID: apiKey.UserGUID, Admin: false, } @@ -273,12 +274,12 @@ func Test_apiKeyMiddleware(t *testing.T) { ctx, rec := makeNewRequest() ctx.Request().Header.Add("Authentication", "Bearer "+apiKeySecret) - apiKey := &interfaces.APIKey{ + apiKey := &api.APIKey{ UserGUID: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", GUID: "00000000-0000-0000-0000-000000000000", } - connectedUser := &interfaces.ConnectedUser{ + connectedUser := &api.ConnectedUser{ GUID: apiKey.UserGUID, Admin: true, } @@ -319,7 +320,7 @@ func Test_apiKeyMiddleware(t *testing.T) { ctx, rec := makeNewRequest() ctx.Request().Header.Add("Authentication", "Bearer "+apiKeySecret) - apiKey := &interfaces.APIKey{ + apiKey := &api.APIKey{ UserGUID: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", GUID: "00000000-0000-0000-0000-000000000000", } @@ -384,7 +385,7 @@ func TestEndpointAdminMiddleware(t *testing.T) { Convey("new request through endpointAdminMiddleware", t, func() { // mock StratosAuthService ctrl := gomock.NewController(t) - mockStratosAuth := mock_interfaces.NewMockStratosAuth(ctrl) + mockStratosAuth := mock_api.NewMockStratosAuth(ctrl) defer ctrl.Finish() // setup mock DB, PortalProxy and mock StratosAuthService @@ -472,7 +473,7 @@ func TestEndpointUpdateDeleteMiddleware(t *testing.T) { Convey("new request through endpointUpdateDeleteMiddleware", t, func() { // mock StratosAuthService ctrl := gomock.NewController(t) - mockStratosAuth := mock_interfaces.NewMockStratosAuth(ctrl) + mockStratosAuth := mock_api.NewMockStratosAuth(ctrl) defer ctrl.Finish() // setup mock DB, PortalProxy and mock StratosAuthService diff --git a/src/jetstream/mock_server_test.go b/src/jetstream/mock_server_test.go index 93d1fe8b48..ddf3ef2305 100644 --- a/src/jetstream/mock_server_test.go +++ b/src/jetstream/mock_server_test.go @@ -22,7 +22,7 @@ import ( "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" "github.com/cloudfoundry-incubator/stratos/src/jetstream/factory" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/tokens" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/cloudfoundry" @@ -52,7 +52,7 @@ type MockEndpointRequest struct { } type MockUser struct { - ConnectedUser *interfaces.ConnectedUser + ConnectedUser *api.ConnectedUser SessionValues map[string]interface{} } @@ -140,7 +140,7 @@ func setupMockPGStore(db *sql.DB) *mockPGStore { return pgs } -func initCFPlugin(pp *portalProxy) interfaces.StratosPlugin { +func initCFPlugin(pp *portalProxy) api.StratosPlugin { plugin, _ := cloudfoundry.Init(pp) return plugin @@ -151,8 +151,8 @@ func setupPortalProxy(db *sql.DB) *portalProxy { //_, _ = rand.Read(key) urlP, _ := url.Parse("https://login.52.38.188.107.nip.io:50450") - pc := interfaces.PortalConfig{ - ConsoleConfig: &interfaces.ConsoleConfig{ + pc := api.PortalConfig{ + ConsoleConfig: &api.ConsoleConfig{ ConsoleClient: "console", ConsoleClientSecret: "", UAAEndpoint: urlP, @@ -168,7 +168,7 @@ func setupPortalProxy(db *sql.DB) *portalProxy { pp := newPortalProxy(pc, db, nil, nil, env.NewVarSet()) pp.SessionStore = setupMockPGStore(db) initialisedEndpoint := initCFPlugin(pp) - pp.Plugins = make(map[string]interfaces.StratosPlugin) + pp.Plugins = make(map[string]api.StratosPlugin) pp.Plugins["cf"] = initialisedEndpoint pp.SessionStoreOptions = new(sessions.Options) @@ -183,36 +183,36 @@ func setupPortalProxy(db *sql.DB) *portalProxy { return pp } -func expectNoRows() sqlmock.Rows { +func expectNoRows() *sqlmock.Rows { return sqlmock.NewRows([]string{"COUNT(*)"}).AddRow("0") } -func expectOneRow() sqlmock.Rows { +func expectOneRow() *sqlmock.Rows { return sqlmock.NewRows([]string{"COUNT(*)"}).AddRow("1") } -func expectCFRow() sqlmock.Rows { +func expectCFRow() *sqlmock.Rows { return sqlmock.NewRows(rowFieldsForCNSI). AddRow(mockCFGUID, "Some fancy CF Cluster", "cf", mockAPIEndpoint, mockAuthEndpoint, mockAuthEndpoint, mockDopplerEndpoint, true, mockClientId, cipherClientSecret, true, "", "", "") } -func expectCERow() sqlmock.Rows { +func expectCERow() *sqlmock.Rows { return sqlmock.NewRows(rowFieldsForCNSI). AddRow(mockCEGUID, "Some fancy HCE Cluster", "hce", mockAPIEndpoint, mockAuthEndpoint, mockAuthEndpoint, "", true, mockClientId, cipherClientSecret, true, "", "", "") } -func expectCFAndCERows() sqlmock.Rows { +func expectCFAndCERows() *sqlmock.Rows { return sqlmock.NewRows(rowFieldsForCNSI). AddRow(mockCFGUID, "Some fancy CF Cluster", "cf", mockAPIEndpoint, mockAuthEndpoint, mockAuthEndpoint, mockDopplerEndpoint, true, mockClientId, cipherClientSecret, false, "", "", ""). AddRow(mockCEGUID, "Some fancy HCE Cluster", "hce", mockAPIEndpoint, mockAuthEndpoint, mockAuthEndpoint, "", true, mockClientId, cipherClientSecret, false, "", "", "") } -func expectTokenRow() sqlmock.Rows { +func expectTokenRow() *sqlmock.Rows { return sqlmock.NewRows([]string{"token_guid", "auth_token", "refresh_token", "token_expiry", "disconnected", "auth_type", "meta_data", "user_guid", "linked_token"}). AddRow(mockTokenGUID, mockUAAToken, mockUAAToken, mockTokenExpiry, false, "OAuth2", "", mockUserGUID, nil) } -func expectEncryptedTokenRow(mockEncryptionKey []byte) sqlmock.Rows { +func expectEncryptedTokenRow(mockEncryptionKey []byte) *sqlmock.Rows { encryptedUaaToken, _ := crypto.EncryptToken(mockEncryptionKey, mockUAAToken) return sqlmock.NewRows([]string{"token_guid", "auth_token", "refresh_token", "token_expiry", "disconnected", "auth_type", "meta_data", "user_guid", "linked_token"}). @@ -245,7 +245,7 @@ func setupHTTPTest(req *http.Request) (*httptest.ResponseRecorder, *echo.Echo, e return res, e, ctx, pp, db, mock } -func setupPortalProxyWithAuthService(mockStratosAuth interfaces.StratosAuth) (*portalProxy, *sql.DB, sqlmock.Sqlmock) { +func setupPortalProxyWithAuthService(mockStratosAuth api.StratosAuth) (*portalProxy, *sql.DB, sqlmock.Sqlmock) { db, mock, dberr := sqlmock.New() if dberr != nil { fmt.Printf("an error '%s' was not expected when opening a stub database connection", dberr) @@ -259,7 +259,7 @@ func setupPortalProxyWithAuthService(mockStratosAuth interfaces.StratosAuth) (*p func setupMockUser(guid string, admin bool, scopes []string) MockUser { mockUser := MockUser{nil, nil} - mockUser.ConnectedUser = &interfaces.ConnectedUser{ + mockUser.ConnectedUser = &api.ConnectedUser{ GUID: guid, Admin: admin, Scopes: scopes, @@ -272,7 +272,7 @@ func setupMockUser(guid string, admin bool, scopes []string) MockUser { } // mockV2Info needs to be closed -func setupMockEndpointRegisterRequest(t *testing.T, user *interfaces.ConnectedUser, mockV2Info *httptest.Server, endpointName string, createSystemEndpoint bool, generateAdminGUID bool) MockEndpointRequest { +func setupMockEndpointRegisterRequest(t *testing.T, user *api.ConnectedUser, mockV2Info *httptest.Server, endpointName string, createSystemEndpoint bool, generateAdminGUID bool) MockEndpointRequest { // create a request for each endpoint req := setupMockReq("POST", "", map[string]string{ @@ -358,7 +358,7 @@ const mockUAAToken = `eyJhbGciOiJSUzI1NiIsImtpZCI6ImxlZ2FjeS10b2tlbi1rZXkiLCJ0eX var mockTokenExpiry = time.Now().AddDate(0, 0, 1).Unix() -var mockUAAResponse = interfaces.UAAResponse{ +var mockUAAResponse = api.UAAResponse{ AccessToken: mockUAAToken, RefreshToken: mockUAAToken, } @@ -398,13 +398,13 @@ var mockEncryptionKey = make([]byte, 32) var cipherClientSecret, _ = crypto.EncryptToken(mockEncryptionKey, mockClientSecret) -var mockV2InfoResponse = interfaces.V2Info{ +var mockV2InfoResponse = api.V2Info{ AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockTokenEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, } -var mockInfoResponse = interfaces.V2Info{ +var mockInfoResponse = api.V2Info{ AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockTokenEndpoint, } diff --git a/src/jetstream/noauth_requests.go b/src/jetstream/noauth_requests.go index a324ec0aa2..4ff32b0618 100644 --- a/src/jetstream/noauth_requests.go +++ b/src/jetstream/noauth_requests.go @@ -3,14 +3,14 @@ package main import ( "net/http" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" ) -func (p *portalProxy) doNoAuthFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (p *portalProxy) doNoAuthFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("doNoAuthFlowRequest") - authHandler := func(tokenRec interfaces.TokenRecord, cnsi interfaces.CNSIRecord) (*http.Response, error) { + authHandler := func(tokenRec api.TokenRecord, cnsi api.CNSIRecord) (*http.Response, error) { // No need to add any headers or do any authentication client := p.GetHttpClientForRequest(req, cnsi.SkipSSLValidation) return client.Do(req) @@ -18,8 +18,8 @@ func (p *portalProxy) doNoAuthFlowRequest(cnsiRequest *interfaces.CNSIRequest, r return p.DoAuthFlowRequest(cnsiRequest, req, authHandler) } -func (p *portalProxy) getCNSIUserForNoAuth(cnsiGUID string, cfTokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { - return &interfaces.ConnectedUser{ +func (p *portalProxy) getCNSIUserForNoAuth(cnsiGUID string, cfTokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { + return &api.ConnectedUser{ GUID: "none", Name: "none", }, true diff --git a/src/jetstream/oauth_requests.go b/src/jetstream/oauth_requests.go index db1c8bc81d..d4b9b8f7de 100644 --- a/src/jetstream/oauth_requests.go +++ b/src/jetstream/oauth_requests.go @@ -6,13 +6,13 @@ import ( "net/http" "time" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" ) -func (p *portalProxy) OAuthHandlerFunc(cnsiRequest *interfaces.CNSIRequest, req *http.Request, refreshOAuthTokenFunc interfaces.RefreshOAuthTokenFunc) interfaces.AuthHandlerFunc { +func (p *portalProxy) OAuthHandlerFunc(cnsiRequest *api.CNSIRequest, req *http.Request, refreshOAuthTokenFunc api.RefreshOAuthTokenFunc) api.AuthHandlerFunc { - return func(tokenRec interfaces.TokenRecord, cnsi interfaces.CNSIRecord) (*http.Response, error) { + return func(tokenRec api.TokenRecord, cnsi api.CNSIRecord) (*http.Response, error) { got401 := false @@ -22,17 +22,16 @@ func (p *portalProxy) OAuthHandlerFunc(cnsiRequest *interfaces.CNSIRequest, req refreshedTokenRec, err := refreshOAuthTokenFunc(cnsi.SkipSSLValidation, cnsiRequest.GUID, cnsiRequest.UserGUID, cnsi.ClientId, cnsi.ClientSecret, cnsi.TokenEndpoint) if err != nil { log.Info(err) - return nil, fmt.Errorf("Couldn't refresh token for CNSI with GUID %s", cnsiRequest.GUID) + return nil, fmt.Errorf("couldn't refresh token for CNSI with GUID %s", cnsiRequest.GUID) } tokenRec = refreshedTokenRec } req.Header.Set("Authorization", "bearer "+tokenRec.AuthToken) - var client http.Client - client = p.GetHttpClientForRequest(req, cnsi.SkipSSLValidation) + var client http.Client = p.GetHttpClientForRequest(req, cnsi.SkipSSLValidation) res, err := client.Do(req) if err != nil { - return nil, fmt.Errorf("Request failed: %v", err) + return nil, fmt.Errorf("request failed: %v", err) } if res.StatusCode != 401 { @@ -40,21 +39,21 @@ func (p *portalProxy) OAuthHandlerFunc(cnsiRequest *interfaces.CNSIRequest, req } if got401 { - return res, errors.New("Failed to authorize") + return res, errors.New("failed to authorize") } got401 = true } } } -func (p *portalProxy) DoOAuthFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (p *portalProxy) DoOAuthFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("DoOAuthFlowRequest") authHandler := p.OAuthHandlerFunc(cnsiRequest, req, p.RefreshOAuthToken) return p.DoAuthFlowRequest(cnsiRequest, req, authHandler) } -func (p *portalProxy) getCNSIRequestRecords(r *interfaces.CNSIRequest) (t interfaces.TokenRecord, c interfaces.CNSIRecord, err error) { +func (p *portalProxy) getCNSIRequestRecords(r *api.CNSIRequest) (t api.TokenRecord, c api.CNSIRecord, err error) { log.Debug("getCNSIRequestRecords") var ok bool @@ -65,35 +64,35 @@ func (p *portalProxy) getCNSIRequestRecords(r *interfaces.CNSIRequest) (t interf // look up token t, ok = p.GetCNSITokenRecord(r.GUID, r.UserGUID) if !ok { - return t, c, fmt.Errorf("Could not find token for csni:user %s:%s", r.GUID, r.UserGUID) + return t, c, fmt.Errorf("could not find token for csni:user %s:%s", r.GUID, r.UserGUID) } } c, err = p.GetCNSIRecord(r.GUID) if err != nil { - return t, c, fmt.Errorf("Info could not be found for CNSI with GUID %s: %s", r.GUID, err) + return t, c, fmt.Errorf("info could not be found for CNSI with GUID %s: %s", r.GUID, err) } return t, c, nil } -func (p *portalProxy) RefreshOAuthToken(skipSSLValidation bool, cnsiGUID, userGUID, client, clientSecret, tokenEndpoint string) (t interfaces.TokenRecord, err error) { +func (p *portalProxy) RefreshOAuthToken(skipSSLValidation bool, cnsiGUID, userGUID, client, clientSecret, tokenEndpoint string) (t api.TokenRecord, err error) { log.Debug("refreshToken") userToken, ok := p.GetCNSITokenRecordWithDisconnected(cnsiGUID, userGUID) if !ok { - return t, fmt.Errorf("Info could not be found for user with GUID %s", userGUID) + return t, fmt.Errorf("info could not be found for user with GUID %s", userGUID) } tokenEndpointWithPath := fmt.Sprintf("%s/oauth/token", tokenEndpoint) uaaRes, err := p.getUAATokenWithRefreshToken(skipSSLValidation, userToken.RefreshToken, client, clientSecret, tokenEndpointWithPath, "") if err != nil { - return t, fmt.Errorf("Token refresh request failed: %v", err) + return t, fmt.Errorf("token refresh request failed: %v", err) } u, err := p.GetUserTokenInfo(uaaRes.AccessToken) if err != nil { - return t, fmt.Errorf("Could not get user token info from access token") + return t, fmt.Errorf("could not get user token info from access token") } u.UserGUID = userGUID @@ -102,7 +101,7 @@ func (p *portalProxy) RefreshOAuthToken(skipSSLValidation bool, cnsiGUID, userGU tokenRecord.TokenGUID = userToken.TokenGUID err = p.updateTokenAuth(userGUID, tokenRecord) if err != nil { - return t, fmt.Errorf("Couldn't update token: %v", err) + return t, fmt.Errorf("couldn't update token: %v", err) } return tokenRecord, nil diff --git a/src/jetstream/oauth_requests_test.go b/src/jetstream/oauth_requests_test.go index fe8e8c248a..6018001e50 100644 --- a/src/jetstream/oauth_requests_test.go +++ b/src/jetstream/oauth_requests_test.go @@ -10,7 +10,7 @@ import ( "time" "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" . "github.com/smartystreets/goconvey/convey" sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1" ) @@ -63,7 +63,7 @@ func TestDoOauthFlowRequestWithValidToken(t *testing.T) { var mockURL *url.URL var mockURLasString string - var mockCNSI = interfaces.CNSIRecord{ + var mockCNSI = api.CNSIRecord{ GUID: mockCNSIGUID, Name: "mockCF", CNSIType: "cf", @@ -76,7 +76,7 @@ func TestDoOauthFlowRequestWithValidToken(t *testing.T) { defer db.Close() encryptedToken, _ := crypto.EncryptToken(pp.Config.EncryptionKeyInBytes, mockUAAToken) - var mockTokenRecord = interfaces.TokenRecord{ + var mockTokenRecord = api.TokenRecord{ AuthToken: mockUAAToken, RefreshToken: mockUAAToken, TokenExpiry: tokenExpiration, @@ -113,7 +113,7 @@ func TestDoOauthFlowRequestWithValidToken(t *testing.T) { WithArgs(mockCNSIGUID). WillReturnRows(expectedCNSIRecordRow) - res, err := pp.DoOAuthFlowRequest(&interfaces.CNSIRequest{ + res, err := pp.DoOAuthFlowRequest(&api.CNSIRequest{ GUID: mockCNSIGUID, UserGUID: mockUserGUID, }, req) @@ -190,7 +190,7 @@ func TestDoOauthFlowRequestWithExpiredToken(t *testing.T) { var mockURL *url.URL var mockURLasString string - var mockCNSI = interfaces.CNSIRecord{ + var mockCNSI = api.CNSIRecord{ GUID: mockCNSIGUID, Name: "mockCF", CNSIType: "cf", @@ -200,7 +200,7 @@ func TestDoOauthFlowRequestWithExpiredToken(t *testing.T) { } // pp.CNSIs[mockCNSIGuid] = mockCNSI - var mockTokenRecord = interfaces.TokenRecord{ + var mockTokenRecord = api.TokenRecord{ AuthToken: mockUAAToken, RefreshToken: mockUAAToken, TokenExpiry: tokenExpiration, @@ -255,7 +255,7 @@ func TestDoOauthFlowRequestWithExpiredToken(t *testing.T) { WillReturnResult(sqlmock.NewResult(1, 1)) // - res, err := pp.DoOAuthFlowRequest(&interfaces.CNSIRequest{ + res, err := pp.DoOAuthFlowRequest(&api.CNSIRequest{ GUID: mockCNSIGUID, UserGUID: mockUserGUID, }, req) @@ -333,7 +333,7 @@ func TestDoOauthFlowRequestWithFailedRefreshMethod(t *testing.T) { var mockURL *url.URL var mockURLasString string - var mockCNSI = interfaces.CNSIRecord{ + var mockCNSI = api.CNSIRecord{ GUID: mockCNSIGUID, Name: "mockCF", CNSIType: "cf", @@ -343,7 +343,7 @@ func TestDoOauthFlowRequestWithFailedRefreshMethod(t *testing.T) { } // pp.CNSIs[mockCNSIGuid] = mockCNSI - var mockTokenRecord = interfaces.TokenRecord{ + var mockTokenRecord = api.TokenRecord{ AuthToken: mockUAAToken, RefreshToken: mockUAAToken, TokenExpiry: tokenExpiration, @@ -386,7 +386,7 @@ func TestDoOauthFlowRequestWithFailedRefreshMethod(t *testing.T) { WillReturnError(errors.New("Unknown Database Error")) // - _, err := pp.DoOAuthFlowRequest(&interfaces.CNSIRequest{ + _, err := pp.DoOAuthFlowRequest(&api.CNSIRequest{ GUID: mockCNSIGUID, UserGUID: mockUserGUID, }, req) @@ -424,13 +424,13 @@ func TestDoOauthFlowRequestWithMissingCNSITokenRecord(t *testing.T) { req, _ := http.NewRequest("GET", "/v2/info", nil) pp := setupPortalProxy(nil) - var mockTokenRecord = interfaces.TokenRecord{ + var mockTokenRecord = api.TokenRecord{ AuthToken: mockUAAToken, TokenExpiry: 0, } pp.setCNSITokenRecord("not-the-right-guid", mockUserGUID, mockTokenRecord) - _, err := pp.DoOAuthFlowRequest(&interfaces.CNSIRequest{ + _, err := pp.DoOAuthFlowRequest(&api.CNSIRequest{ GUID: mockCNSIGUID, UserGUID: mockUserGUID, }, req) @@ -471,7 +471,7 @@ func TestDoOauthFlowRequestWithInvalidCNSIRequest(t *testing.T) { pp := setupPortalProxy(nil) - invalidCNSIRequest := &interfaces.CNSIRequest{ + invalidCNSIRequest := &api.CNSIRequest{ GUID: "", UserGUID: "", } @@ -568,7 +568,7 @@ func TestRefreshTokenWithDatabaseErrorOnSave(t *testing.T) { var mockURL *url.URL var mockURLasString string - var mockCNSI = interfaces.CNSIRecord{ + var mockCNSI = api.CNSIRecord{ GUID: mockCNSIGUID, Name: "mockCF", CNSIType: "cf", @@ -578,7 +578,7 @@ func TestRefreshTokenWithDatabaseErrorOnSave(t *testing.T) { } // pp.CNSIs[mockCNSIGuid] = mockCNSI - var mockTokenRecord = interfaces.TokenRecord{ + var mockTokenRecord = api.TokenRecord{ AuthToken: mockUAAToken, RefreshToken: mockUAAToken, TokenExpiry: tokenExpiration, @@ -642,7 +642,7 @@ func TestRefreshTokenWithDatabaseErrorOnSave(t *testing.T) { mock.ExpectExec(updateTokens). WillReturnError(errors.New("Unknown Database Error")) // - _, err := pp.DoOAuthFlowRequest(&interfaces.CNSIRequest{ + _, err := pp.DoOAuthFlowRequest(&api.CNSIRequest{ GUID: mockCNSIGUID, UserGUID: mockUserGUID, }, req) diff --git a/src/jetstream/oidc_requests.go b/src/jetstream/oidc_requests.go index 67615548a7..e35d5c174f 100644 --- a/src/jetstream/oidc_requests.go +++ b/src/jetstream/oidc_requests.go @@ -5,22 +5,22 @@ import ( "fmt" "net/http" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" ) -func (p *portalProxy) DoOidcFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (p *portalProxy) DoOidcFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("DoOidcFlowRequest") authHandler := p.OAuthHandlerFunc(cnsiRequest, req, p.RefreshOidcToken) return p.DoAuthFlowRequest(cnsiRequest, req, authHandler) } -func (p *portalProxy) RefreshOidcToken(skipSSLValidation bool, cnsiGUID, userGUID, client, clientSecret, tokenEndpoint string) (t interfaces.TokenRecord, err error) { +func (p *portalProxy) RefreshOidcToken(skipSSLValidation bool, cnsiGUID, userGUID, client, clientSecret, tokenEndpoint string) (t api.TokenRecord, err error) { log.Debug("RefreshOidcToken") userToken, ok := p.GetCNSITokenRecordWithDisconnected(cnsiGUID, userGUID) if !ok { - return t, fmt.Errorf("Info could not be found for user with GUID %s", userGUID) + return t, fmt.Errorf("info could not be found for user with GUID %s", userGUID) } tokenEndpointWithPath := fmt.Sprintf("%s/oauth/token", tokenEndpoint) @@ -31,7 +31,7 @@ func (p *portalProxy) RefreshOidcToken(skipSSLValidation bool, cnsiGUID, userGUI log.Info(userToken.Metadata) if len(userToken.Metadata) > 0 { - metadata := &interfaces.OAuth2Metadata{} + metadata := &api.OAuth2Metadata{} if err := json.Unmarshal([]byte(userToken.Metadata), metadata); err == nil { log.Info(metadata) log.Info(metadata.ClientID) @@ -52,24 +52,24 @@ func (p *portalProxy) RefreshOidcToken(skipSSLValidation bool, cnsiGUID, userGUI uaaRes, err := p.getUAATokenWithRefreshToken(skipSSLValidation, userToken.RefreshToken, client, clientSecret, tokenEndpointWithPath, scopes) if err != nil { - return t, fmt.Errorf("Token refresh request failed: %v", err) + return t, fmt.Errorf("token refresh request failed: %v", err) } u, err := p.GetUserTokenInfo(uaaRes.IDToken) if err != nil { - return t, fmt.Errorf("Could not get user token info from id token") + return t, fmt.Errorf("could not get user token info from id token") } u.UserGUID = userGUID tokenRecord := p.InitEndpointTokenRecord(u.TokenExpiry, uaaRes.AccessToken, uaaRes.RefreshToken, userToken.Disconnected) - tokenRecord.AuthType = interfaces.AuthTypeOIDC + tokenRecord.AuthType = api.AuthTypeOIDC // Copy across the metadata from the original token tokenRecord.Metadata = userToken.Metadata err = p.setCNSITokenRecord(cnsiGUID, userGUID, tokenRecord) if err != nil { - return t, fmt.Errorf("Couldn't save new token: %v", err) + return t, fmt.Errorf("couldn't save new token: %v", err) } return tokenRecord, nil diff --git a/src/jetstream/passthrough.go b/src/jetstream/passthrough.go index 6a41385d00..3aae3597cc 100644 --- a/src/jetstream/passthrough.go +++ b/src/jetstream/passthrough.go @@ -6,7 +6,6 @@ import ( "errors" "fmt" "io" - "io/ioutil" "net/http" "net/url" "path" @@ -16,7 +15,7 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // API Host Prefix to replace if the custom header is supplied @@ -78,7 +77,7 @@ func getPortalUserGUID(c echo.Context) (string, error) { log.Debug("getPortalUserGUID") portalUserGUIDIntf := c.Get("user_id") if portalUserGUIDIntf == nil { - return "", errors.New("Corrupted session") + return "", errors.New("corrupted session") } return portalUserGUIDIntf.(string), nil } @@ -89,14 +88,14 @@ func getRequestParts(c echo.Context) (*http.Request, []byte, error) { var err error req := c.Request() if bodyReader := req.Body; bodyReader != nil { - if body, err = ioutil.ReadAll(bodyReader); err != nil { - return nil, nil, errors.New("Failed to read request body") + if body, err = io.ReadAll(bodyReader); err != nil { + return nil, nil, errors.New("failed to read request body") } } return req, body, nil } -func buildJSONResponse(cnsiList []string, responses map[string]*interfaces.CNSIRequest) map[string]*json.RawMessage { +func buildJSONResponse(cnsiList []string, responses map[string]*api.CNSIRequest) map[string]*json.RawMessage { log.Debug("buildJSONResponse") jsonResponse := make(map[string]*json.RawMessage) for _, guid := range cnsiList { @@ -157,9 +156,9 @@ func isValidJSON(data []byte) bool { return err == nil } -func (p *portalProxy) buildCNSIRequest(cnsiGUID string, userGUID string, method string, uri *url.URL, body []byte, header http.Header) (interfaces.CNSIRequest, error) { +func (p *portalProxy) buildCNSIRequest(cnsiGUID string, userGUID string, method string, uri *url.URL, body []byte, header http.Header) (api.CNSIRequest, error) { log.Debug("buildCNSIRequest") - cnsiRequest := interfaces.CNSIRequest{ + cnsiRequest := api.CNSIRequest{ GUID: cnsiGUID, UserGUID: userGUID, @@ -200,7 +199,7 @@ func (p *portalProxy) validateCNSIList(cnsiList []string) error { return nil } -func fwdCNSIStandardHeaders(cnsiRequest *interfaces.CNSIRequest, req *http.Request) { +func fwdCNSIStandardHeaders(cnsiRequest *api.CNSIRequest, req *http.Request) { log.Debug("fwdCNSIStandardHeaders") for k, v := range cnsiRequest.Header { switch { @@ -230,11 +229,11 @@ func (p *portalProxy) proxy(c echo.Context) error { return p.SendProxiedResponse(c, responses) } -func (p *portalProxy) ProxyRequest(c echo.Context, uri *url.URL) (map[string]*interfaces.CNSIRequest, error) { +func (p *portalProxy) ProxyRequest(c echo.Context, uri *url.URL) (map[string]*api.CNSIRequest, error) { log.Debug("ProxyRequest") cnsiList := strings.Split(c.Request().Header.Get("x-cap-cnsi-list"), ",") - shouldPassthrough := "true" == c.Request().Header.Get("x-cap-passthrough") - longRunning := "true" == c.Request().Header.Get(longRunningTimeoutHeader) + shouldPassthrough := c.Request().Header.Get("x-cap-passthrough") == "true" + longRunning := c.Request().Header.Get(longRunningTimeoutHeader) == "true" if err := p.validateCNSIList(cnsiList); err != nil { return nil, echo.NewHTTPError(http.StatusBadRequest, err.Error()) @@ -255,7 +254,7 @@ func (p *portalProxy) ProxyRequest(c echo.Context, uri *url.URL) (map[string]*in if shouldPassthrough { if len(cnsiList) > 1 { - err := errors.New("Requested passthrough to multiple CNSIs. Only single CNSI passthroughs are supported") + err := errors.New("requested passthrough to multiple CNSIs. Only single CNSI passthroughs are supported") return nil, echo.NewHTTPError(http.StatusBadRequest, err.Error()) } } @@ -263,13 +262,13 @@ func (p *portalProxy) ProxyRequest(c echo.Context, uri *url.URL) (map[string]*in // Only support one endpoint for long running operation (due to way we do timeout with the response channel) if longRunning { if len(cnsiList) > 1 { - err := errors.New("Requested long-running proxy to multiple CNSIs. Only single CNSI is supported for long running passthrough") + err := errors.New("requested long-running proxy to multiple CNSIs. Only single CNSI is supported for long running passthrough") return nil, echo.NewHTTPError(http.StatusBadRequest, err.Error()) } } // send the request to each CNSI - done := make(chan *interfaces.CNSIRequest) + done := make(chan *api.CNSIRequest) for _, cnsi := range cnsiList { cnsiRequest, buildErr := p.buildCNSIRequest(cnsi, portalUserGUID, req.Method, uri, body, header) if buildErr != nil { @@ -295,7 +294,7 @@ func (p *portalProxy) ProxyRequest(c echo.Context, uri *url.URL) (map[string]*in } // Wait for all responses - responses := make(map[string]*interfaces.CNSIRequest) + responses := make(map[string]*api.CNSIRequest) if !longRunning { for range cnsiList { @@ -313,7 +312,7 @@ func (p *portalProxy) ProxyRequest(c echo.Context, uri *url.URL) (map[string]*in for _, id := range cnsiList { if _, ok := responses[id]; !ok { // Did not get a response for the endpoint - responses[id] = &interfaces.CNSIRequest{ + responses[id] = &api.CNSIRequest{ GUID: id, UserGUID: portalUserGUID, Method: req.Method, @@ -325,7 +324,7 @@ func (p *portalProxy) ProxyRequest(c echo.Context, uri *url.URL) (map[string]*in } } } - break + return responses, nil } } } @@ -351,11 +350,11 @@ func makeLongRunningTimeoutError() []byte { } // TODO: This should be used by the function above -func (p *portalProxy) DoProxyRequest(requests []interfaces.ProxyRequestInfo) (map[string]*interfaces.CNSIRequest, error) { +func (p *portalProxy) DoProxyRequest(requests []api.ProxyRequestInfo) (map[string]*api.CNSIRequest, error) { log.Debug("DoProxyRequest") // send the request to each endpoint - done := make(chan *interfaces.CNSIRequest) + done := make(chan *api.CNSIRequest) for _, requestInfo := range requests { cnsiRequest, buildErr := p.buildCNSIRequest(requestInfo.EndpointGUID, requestInfo.UserGUID, requestInfo.Method, requestInfo.URI, requestInfo.Body, requestInfo.Headers) cnsiRequest.ResponseGUID = requestInfo.ResultGUID @@ -365,7 +364,7 @@ func (p *portalProxy) DoProxyRequest(requests []interfaces.ProxyRequestInfo) (ma go p.doRequest(&cnsiRequest, done) } - responses := make(map[string]*interfaces.CNSIRequest) + responses := make(map[string]*api.CNSIRequest) for range requests { res := <-done responses[res.ResponseGUID] = res @@ -375,15 +374,15 @@ func (p *portalProxy) DoProxyRequest(requests []interfaces.ProxyRequestInfo) (ma } // Convenience helper for a single request -func (p *portalProxy) DoProxySingleRequest(cnsiGUID, userGUID, method, requestUrl string, headers http.Header, body []byte) (*interfaces.CNSIRequest, error) { - requests := make([]interfaces.ProxyRequestInfo, 0) +func (p *portalProxy) DoProxySingleRequest(cnsiGUID, userGUID, method, requestUrl string, headers http.Header, body []byte) (*api.CNSIRequest, error) { + requests := make([]api.ProxyRequestInfo, 0) proxyURL, err := url.Parse(requestUrl) if err != nil { return nil, err } - req := interfaces.ProxyRequestInfo{} + req := api.ProxyRequestInfo{} req.UserGUID = userGUID req.ResultGUID = "REQ_" + cnsiGUID req.EndpointGUID = cnsiGUID @@ -409,13 +408,13 @@ func (p *portalProxy) DoProxySingleRequest(cnsiGUID, userGUID, method, requestUr } // Convenience helper for a single request using a token -func (p *portalProxy) DoProxySingleRequestWithToken(cnsiGUID string, token *interfaces.TokenRecord, method, requestURL string, headers http.Header, body []byte) (*interfaces.CNSIRequest, error) { +func (p *portalProxy) DoProxySingleRequestWithToken(cnsiGUID string, token *api.TokenRecord, method, requestURL string, headers http.Header, body []byte) (*api.CNSIRequest, error) { proxyURL, err := url.Parse(requestURL) if err != nil { return nil, err } - done := make(chan *interfaces.CNSIRequest) + done := make(chan *api.CNSIRequest) cnsiRequest, buildErr := p.buildCNSIRequest(cnsiGUID, "", method, proxyURL, body, headers) if buildErr != nil { return nil, echo.NewHTTPError(http.StatusBadRequest, buildErr.Error()) @@ -426,8 +425,8 @@ func (p *portalProxy) DoProxySingleRequestWithToken(cnsiGUID string, token *inte return res, nil } -func (p *portalProxy) SendProxiedResponse(c echo.Context, responses map[string]*interfaces.CNSIRequest) error { - shouldPassthrough := "true" == c.Request().Header.Get("x-cap-passthrough") +func (p *portalProxy) SendProxiedResponse(c echo.Context, responses map[string]*api.CNSIRequest) error { + shouldPassthrough := c.Request().Header.Get("x-cap-passthrough") == "true" var cnsiList []string for k := range responses { @@ -462,7 +461,7 @@ func (p *portalProxy) SendProxiedResponse(c echo.Context, responses map[string]* return err } -func (p *portalProxy) doRequest(cnsiRequest *interfaces.CNSIRequest, done chan<- *interfaces.CNSIRequest) { +func (p *portalProxy) doRequest(cnsiRequest *api.CNSIRequest, done chan<- *api.CNSIRequest) { log.Debugf("doRequest for URL: %s", cnsiRequest.URL.String()) var body io.Reader var res *http.Response @@ -484,7 +483,7 @@ func (p *portalProxy) doRequest(cnsiRequest *interfaces.CNSIRequest, done chan<- return } - var tokenRec interfaces.TokenRecord + var tokenRec api.TokenRecord if cnsiRequest.Token != nil { tokenRec = *cnsiRequest.Token } else { @@ -525,7 +524,7 @@ func (p *portalProxy) doRequest(cnsiRequest *interfaces.CNSIRequest, done chan<- } else if res.Body != nil { cnsiRequest.StatusCode = res.StatusCode cnsiRequest.Status = res.Status - cnsiRequest.Response, cnsiRequest.Error = ioutil.ReadAll(res.Body) + cnsiRequest.Response, cnsiRequest.Error = io.ReadAll(res.Body) defer res.Body.Close() } @@ -573,20 +572,20 @@ func (p *portalProxy) ProxySingleRequest(c echo.Context) error { return echo.NewHTTPError(http.StatusInternalServerError, err.Error()) } - done := make(chan *interfaces.CNSIRequest) + done := make(chan *api.CNSIRequest) cnsiRequest, buildErr := p.buildCNSIRequest(cnsi, portalUserGUID, req.Method, &uri, body, header) if buildErr != nil { return echo.NewHTTPError(http.StatusBadRequest, buildErr.Error()) } - longRunning := "true" == c.Request().Header.Get(longRunningTimeoutHeader) - noToken := "true" == c.Request().Header.Get(noTokenHeader) + longRunning := c.Request().Header.Get(longRunningTimeoutHeader) == "true" + noToken := c.Request().Header.Get(noTokenHeader) == "true" cnsiRequest.LongRunning = longRunning if noToken { // Fake a token record with no authentication - cnsiRequest.Token = &interfaces.TokenRecord{ - AuthType: interfaces.AuthConnectTypeNone, + cnsiRequest.Token = &api.TokenRecord{ + AuthType: api.AuthConnectTypeNone, } } diff --git a/src/jetstream/passthrough_test.go b/src/jetstream/passthrough_test.go index ddfaf48f8d..f69eb17ba3 100644 --- a/src/jetstream/passthrough_test.go +++ b/src/jetstream/passthrough_test.go @@ -9,7 +9,7 @@ import ( . "github.com/smartystreets/goconvey/convey" sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) func TestPassthroughDoRequest(t *testing.T) { @@ -26,14 +26,14 @@ func TestPassthroughDoRequest(t *testing.T) { uri, err := url.Parse(mockCFServer.URL + "/v2/info") So(err, ShouldBeNil) - mockCNSIRequest := interfaces.CNSIRequest{ + mockCNSIRequest := api.CNSIRequest{ GUID: mockCFGUID, UserGUID: mockUserGUID, Method: "GET", URL: uri, } - var mockTokenRecord = interfaces.TokenRecord{ + var mockTokenRecord = api.TokenRecord{ AuthToken: mockUAAToken, RefreshToken: mockUAAToken, TokenExpiry: mockTokenExpiry, @@ -65,7 +65,7 @@ func TestPassthroughDoRequest(t *testing.T) { }) // TODO(wchrisjohnson): document what is happening here for the sake of Golang newcomers - done := make(chan *interfaces.CNSIRequest) + done := make(chan *api.CNSIRequest) // Set up database expectation for pp.doOauthFlowRequest // p.getCNSIRequestRecords(cnsiRequest) -> @@ -215,7 +215,7 @@ func TestPassthroughBuildCNSIRequest(t *testing.T) { t.Parallel() Convey("Passthrough request should succeed", t, func() { - expectedCNSIRequest := interfaces.CNSIRequest{ + expectedCNSIRequest := api.CNSIRequest{ GUID: mockCFGUID, UserGUID: "user1", Method: "GET", @@ -223,7 +223,7 @@ func TestPassthroughBuildCNSIRequest(t *testing.T) { Header: nil, } - var cr interfaces.CNSIRequest + var cr api.CNSIRequest req := setupMockReq("GET", "", nil) _, _, ctx, pp, db, mock := setupHTTPTest(req) diff --git a/src/jetstream/plugins/analysis/20200210105400_Analysis.go b/src/jetstream/plugins/analysis/20200210105400_Analysis.go index ee69b41aef..dd4f7033de 100644 --- a/src/jetstream/plugins/analysis/20200210105400_Analysis.go +++ b/src/jetstream/plugins/analysis/20200210105400_Analysis.go @@ -2,51 +2,51 @@ package analysis import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" - - "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" + "github.com/pressly/goose" ) func init() { - datastore.RegisterMigration(20200210105400, "Analysis", func(txn *sql.Tx, conf *goose.DBConf) error { - - createAnalysisTabls := "CREATE TABLE IF NOT EXISTS analysis (" - createAnalysisTabls += "id VARCHAR(255) NOT NULL," - createAnalysisTabls += "endpoint VARCHAR(36) NOT NULL," - createAnalysisTabls += "endpoint_type VARCHAR(36) NOT NULL," - createAnalysisTabls += "name VARCHAR(255) NOT NULL," - - // `user` is a reserved keyword in postgres. For other DBs the column is renamed into - // `user_guid` in a subsequent `20201102132553_RenameUserColumn` migration - if strings.Contains(conf.Driver.Name, "postgres") { - createAnalysisTabls += "user_guid VARCHAR(36) NOT NULL," - } else { - createAnalysisTabls += "user VARCHAR(36) NOT NULL," - } - - createAnalysisTabls += "path VARCHAR(255) NOT NULL," - createAnalysisTabls += "type VARCHAR(64) NOT NULL," - createAnalysisTabls += "format VARCHAR(64) NOT NULL," - createAnalysisTabls += "created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," - createAnalysisTabls += "acknowledged BOOLEAN NOT NULL DEFAULT FALSE," - createAnalysisTabls += "status VARCHAR(16) NOT NULL," - createAnalysisTabls += "duration INT NOT NULL DEFAULT 0," - createAnalysisTabls += "result VARCHAR(255) NOT NULL," - createAnalysisTabls += "PRIMARY KEY (id) );" - - _, err := txn.Exec(createAnalysisTabls) - if err != nil { - return err - } - - // createIndex := "CREATE INDEX charts_id ON charts (id);" - // _, err = txn.Exec(createIndex) - // if err != nil { - // return err - // } - - return nil - }) + goose.AddMigration(Up20200210105400, nil) +} + +func Up20200210105400(txn *sql.Tx) error { + dialect := goose.GetDialect() + + createAnalysisTabls := "CREATE TABLE IF NOT EXISTS analysis (" + createAnalysisTabls += "id VARCHAR(255) NOT NULL," + createAnalysisTabls += "endpoint VARCHAR(36) NOT NULL," + createAnalysisTabls += "endpoint_type VARCHAR(36) NOT NULL," + createAnalysisTabls += "name VARCHAR(255) NOT NULL," + + // `user` is a reserved keyword in postgres. For other DBs the column is renamed into + // `user_guid` in a subsequent `20201102132553_RenameUserColumn` migration + if _, ok := dialect.(*goose.PostgresDialect); ok { + createAnalysisTabls += "user_guid VARCHAR(36) NOT NULL," + } else { + createAnalysisTabls += "user VARCHAR(36) NOT NULL," + } + + createAnalysisTabls += "path VARCHAR(255) NOT NULL," + createAnalysisTabls += "type VARCHAR(64) NOT NULL," + createAnalysisTabls += "format VARCHAR(64) NOT NULL," + createAnalysisTabls += "created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + createAnalysisTabls += "acknowledged BOOLEAN NOT NULL DEFAULT FALSE," + createAnalysisTabls += "status VARCHAR(16) NOT NULL," + createAnalysisTabls += "duration INT NOT NULL DEFAULT 0," + createAnalysisTabls += "result VARCHAR(255) NOT NULL," + createAnalysisTabls += "PRIMARY KEY (id) );" + + _, err := txn.Exec(createAnalysisTabls) + if err != nil { + return err + } + + // createIndex := "CREATE INDEX charts_id ON charts (id);" + // _, err = txn.Exec(createIndex) + // if err != nil { + // return err + // } + + return nil } diff --git a/src/jetstream/plugins/analysis/20201005105400_AnalysisUpstream.go b/src/jetstream/plugins/analysis/20201005105400_AnalysisUpstream.go index 170cb58038..78ab7c81ca 100644 --- a/src/jetstream/plugins/analysis/20201005105400_AnalysisUpstream.go +++ b/src/jetstream/plugins/analysis/20201005105400_AnalysisUpstream.go @@ -2,51 +2,50 @@ package analysis import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" - - "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" + "github.com/pressly/goose" ) func init() { - datastore.RegisterMigration(20201005105400, "AnalysisUpstream", func(txn *sql.Tx, conf *goose.DBConf) error { - - createAnalysisTabls := "CREATE TABLE IF NOT EXISTS analysis (" - createAnalysisTabls += "id VARCHAR(255) NOT NULL," - createAnalysisTabls += "endpoint VARCHAR(36) NOT NULL," - createAnalysisTabls += "endpoint_type VARCHAR(36) NOT NULL," - createAnalysisTabls += "name VARCHAR(255) NOT NULL," - - // `user` is a reserved word in postgres. For other DBs the column is renamed into - // `user_guid` in a subsequent `20201102132553_RenameUserColumn` migration - if strings.Contains(conf.Driver.Name, "postgres") { - createAnalysisTabls += "user_guid VARCHAR(36) NOT NULL," - } else { - createAnalysisTabls += "user VARCHAR(36) NOT NULL," - } - - createAnalysisTabls += "path VARCHAR(255) NOT NULL," - createAnalysisTabls += "type VARCHAR(64) NOT NULL," - createAnalysisTabls += "format VARCHAR(64) NOT NULL," - createAnalysisTabls += "created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," - createAnalysisTabls += "acknowledged BOOLEAN NOT NULL DEFAULT FALSE," - createAnalysisTabls += "status VARCHAR(16) NOT NULL," - createAnalysisTabls += "duration INT NOT NULL DEFAULT 0," - createAnalysisTabls += "result VARCHAR(255) NOT NULL," - createAnalysisTabls += "PRIMARY KEY (id) );" - - _, err := txn.Exec(createAnalysisTabls) - if err != nil { - return err - } - - // createIndex := "CREATE INDEX charts_id ON charts (id);" - // _, err = txn.Exec(createIndex) - // if err != nil { - // return err - // } - - return nil - }) + goose.AddMigration(Up20201005105400, nil) +} +func Up20201005105400(txn *sql.Tx) error { + dialect := goose.GetDialect() + + createAnalysisTabls := "CREATE TABLE IF NOT EXISTS analysis (" + createAnalysisTabls += "id VARCHAR(255) NOT NULL," + createAnalysisTabls += "endpoint VARCHAR(36) NOT NULL," + createAnalysisTabls += "endpoint_type VARCHAR(36) NOT NULL," + createAnalysisTabls += "name VARCHAR(255) NOT NULL," + + // `user` is a reserved word in postgres. For other DBs the column is renamed into + // `user_guid` in a subsequent `20201102132553_RenameUserColumn` migration + if _, ok := dialect.(*goose.PostgresDialect); ok { + createAnalysisTabls += "user_guid VARCHAR(36) NOT NULL," + } else { + createAnalysisTabls += "user VARCHAR(36) NOT NULL," + } + + createAnalysisTabls += "path VARCHAR(255) NOT NULL," + createAnalysisTabls += "type VARCHAR(64) NOT NULL," + createAnalysisTabls += "format VARCHAR(64) NOT NULL," + createAnalysisTabls += "created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + createAnalysisTabls += "acknowledged BOOLEAN NOT NULL DEFAULT FALSE," + createAnalysisTabls += "status VARCHAR(16) NOT NULL," + createAnalysisTabls += "duration INT NOT NULL DEFAULT 0," + createAnalysisTabls += "result VARCHAR(255) NOT NULL," + createAnalysisTabls += "PRIMARY KEY (id) );" + + _, err := txn.Exec(createAnalysisTabls) + if err != nil { + return err + } + + // createIndex := "CREATE INDEX charts_id ON charts (id);" + // _, err = txn.Exec(createIndex) + // if err != nil { + // return err + // } + + return nil } diff --git a/src/jetstream/plugins/analysis/20201102132553_RenameUserColumn.go b/src/jetstream/plugins/analysis/20201102132553_RenameUserColumn.go index 8fdd6fca38..d089cc91cc 100644 --- a/src/jetstream/plugins/analysis/20201102132553_RenameUserColumn.go +++ b/src/jetstream/plugins/analysis/20201102132553_RenameUserColumn.go @@ -2,34 +2,35 @@ package analysis import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" - - "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" + "github.com/pressly/goose" ) func init() { - datastore.RegisterMigration(20201102132553, "RenameUserColumn", func(txn *sql.Tx, conf *goose.DBConf) error { - // `user` is a reserved keyword in postgres, so for postgres the column - // was created as `user_guid` from the beginning -- skipping this migration. - if strings.Contains(conf.Driver.Name, "postgres") { - return nil - } - - var renameQuery string - - if strings.Contains(conf.Driver.Name, "mysql") { - renameQuery = `ALTER TABLE analysis CHANGE COLUMN user user_guid VARCHAR(36) NOT NULL` - } else { - renameQuery = `ALTER TABLE analysis RENAME user TO user_guid` - } - - _, err := txn.Exec(renameQuery) - if err != nil { - return err - } + goose.AddMigration(Up20201102132553, nil) +} +func Up20201102132553(txn *sql.Tx) error { + dialect := goose.GetDialect() + + // `user` is a reserved keyword in postgres, so for postgres the column + // was created as `user_guid` from the beginning -- skipping this migration. + if _, ok := dialect.(*goose.PostgresDialect); ok { return nil - }) + } + + var renameQuery string + + if _, ok := dialect.(*goose.MySQLDialect); ok { + renameQuery = `ALTER TABLE analysis CHANGE COLUMN user user_guid VARCHAR(36) NOT NULL` + } else { + renameQuery = `ALTER TABLE analysis RENAME user TO user_guid` + } + + _, err := txn.Exec(renameQuery) + if err != nil { + return err + } + + return nil } diff --git a/src/jetstream/plugins/analysis/main.go b/src/jetstream/plugins/analysis/main.go index 066a246476..0b82fafa36 100644 --- a/src/jetstream/plugins/analysis/main.go +++ b/src/jetstream/plugins/analysis/main.go @@ -8,7 +8,7 @@ import ( "time" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/analysis/store" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" @@ -29,32 +29,32 @@ const ( // Analysis - Plugin to allow analysers to run over an endpoint cluster type Analysis struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy analysisServer string } func init() { - interfaces.AddPlugin("analysis", []string{"kubernetes"}, Init) + api.AddPlugin("analysis", []string{"kubernetes"}, Init) } // Init creates a new Analysis -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { store.InitRepositoryProvider(portalProxy.GetConfig().DatabaseProviderName) return &Analysis{portalProxy: portalProxy}, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (analysis *Analysis) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (analysis *Analysis) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (analysis *Analysis) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (analysis *Analysis) GetEndpointPlugin() (api.EndpointPlugin, error) { return nil, errors.New("Not implemented") } // GetRoutePlugin gets the route plugin for this plugin -func (analysis *Analysis) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (analysis *Analysis) GetRoutePlugin() (api.RoutePlugin, error) { return analysis, nil } @@ -110,8 +110,8 @@ func (analysis *Analysis) Init() error { } // OnEndpointNotification called when for endpoint events -func (analysis *Analysis) OnEndpointNotification(action interfaces.EndpointAction, endpoint *interfaces.CNSIRecord) { - if action == interfaces.EndpointUnregisterAction { +func (analysis *Analysis) OnEndpointNotification(action api.EndpointAction, endpoint *api.CNSIRecord) { + if action == api.EndpointUnregisterAction { // An endpoint was unregistered, so remove all reports dbStore, err := store.NewAnalysisDBStore(analysis.portalProxy.GetDatabaseConnection()) if err == nil { diff --git a/src/jetstream/plugins/autoscaler/main.go b/src/jetstream/plugins/autoscaler/main.go index 8ec4fc70d1..935b9fb443 100644 --- a/src/jetstream/plugins/autoscaler/main.go +++ b/src/jetstream/plugins/autoscaler/main.go @@ -3,37 +3,37 @@ package autoscaler import ( "errors" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" ) // Module init will register plugin func init() { - interfaces.AddPlugin("autoscaler", []string{"cloudfoundry"}, Init) + api.AddPlugin("autoscaler", []string{"cloudfoundry"}, Init) } // Autoscaler is a plugin to allow applications to be pushed to Cloud Foundry from Stratos type Autoscaler struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // Init creates a new Autoscaler -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { return &Autoscaler{portalProxy: portalProxy}, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (a *Autoscaler) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (a *Autoscaler) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (a *Autoscaler) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (a *Autoscaler) GetEndpointPlugin() (api.EndpointPlugin, error) { return nil, errors.New("Not implemented") } // GetRoutePlugin gets the route plugin for this plugin -func (a *Autoscaler) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (a *Autoscaler) GetRoutePlugin() (api.RoutePlugin, error) { return a, nil } diff --git a/src/jetstream/plugins/backup/backup_restore.go b/src/jetstream/plugins/backup/backup_restore.go index 5e4f7291a4..f347057d6d 100644 --- a/src/jetstream/plugins/backup/backup_restore.go +++ b/src/jetstream/plugins/backup/backup_restore.go @@ -9,7 +9,7 @@ import ( "net/http" "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) @@ -19,7 +19,7 @@ type cnsiTokenBackup struct { encryptionKey []byte userID string dbVersion int64 - p interfaces.PortalProxy + p api.PortalProxy } // ConnectionType - Determine what kind of connection details are stored for an endpoint @@ -46,7 +46,7 @@ type BackupRequest struct { // BackupContentPayload - Encrypted part of the backup type BackupContentPayload struct { Endpoints []map[string]interface{} - Tokens []interfaces.BackupTokenRecord + Tokens []api.BackupTokenRecord } // BackupContent - Everything that's backed up and stored in a file client side @@ -69,16 +69,16 @@ func (ctb *cnsiTokenBackup) BackupEndpoints(c echo.Context) error { // Create the backup request struct from the body body, err := ioutil.ReadAll(c.Request().Body) if err != nil { - return interfaces.NewHTTPShadowError(http.StatusBadRequest, "Invalid request body", "Invalid request body: %+v", err) + return api.NewHTTPShadowError(http.StatusBadRequest, "Invalid request body", "Invalid request body: %+v", err) } data := &BackupRequest{} if err = json.Unmarshal(body, data); err != nil { - return interfaces.NewHTTPShadowError(http.StatusBadRequest, "Invalid request body - could not parse JSON", "Invalid request body - could not parse JSON: %+v", err) + return api.NewHTTPShadowError(http.StatusBadRequest, "Invalid request body - could not parse JSON", "Invalid request body - could not parse JSON: %+v", err) } if data.State == nil || len(data.State) == 0 { - return interfaces.NewHTTPError(http.StatusBadRequest, "Invalid request body - no endpoints to backup") + return api.NewHTTPError(http.StatusBadRequest, "Invalid request body - no endpoints to backup") } // Create backup @@ -90,7 +90,7 @@ func (ctb *cnsiTokenBackup) BackupEndpoints(c echo.Context) error { // Send the response back to the client jsonString, err := json.Marshal(response) if err != nil { - return interfaces.NewHTTPShadowError(http.StatusInternalServerError, "Failed to serialize response", "Failed to serialize response: %+v", err) + return api.NewHTTPShadowError(http.StatusInternalServerError, "Failed to serialize response", "Failed to serialize response: %+v", err) } c.Response().Header().Set("Content-Type", "application/json") @@ -102,12 +102,12 @@ func (ctb *cnsiTokenBackup) createBackup(data *BackupRequest) (*BackupContent, e log.Debug("createBackup") allEndpoints, err := ctb.p.ListEndpoints() if err != nil { - return nil, interfaces.NewHTTPShadowError(http.StatusBadGateway, "Failed to fetch endpoints", "Failed to fetch endpoints: %+v", err) + return nil, api.NewHTTPShadowError(http.StatusBadGateway, "Failed to fetch endpoints", "Failed to fetch endpoints: %+v", err) } // Fetch/Format required data endpoints := make([]map[string]interface{}, 0) - tokens := make([]interfaces.BackupTokenRecord, 0) + tokens := make([]api.BackupTokenRecord, 0) for endpointID, endpoint := range data.State { @@ -128,11 +128,11 @@ func (ctb *cnsiTokenBackup) createBackup(data *BackupRequest) (*BackupContent, e tokens = append(tokens, tokenRecords...) } else { text := fmt.Sprintf("Failed to fetch tokens for endpoint %+v", endpointID) - return nil, interfaces.NewHTTPError(http.StatusBadGateway, text) + return nil, api.NewHTTPError(http.StatusBadGateway, text) } case BACKUP_CONNECTION_CURRENT: if tokenRecord, ok := ctb.p.GetCNSITokenRecordWithDisconnected(endpointID, ctb.userID); ok { - var btr = interfaces.BackupTokenRecord{ + var btr = api.BackupTokenRecord{ TokenRecord: tokenRecord, EndpointGUID: endpointID, TokenType: "cnsi", @@ -141,7 +141,7 @@ func (ctb *cnsiTokenBackup) createBackup(data *BackupRequest) (*BackupContent, e tokens = append(tokens, btr) } else { text := fmt.Sprintf("Request to back up connected user's (%+v) token for endpoint (%+v) failed.", endpointID, ctb.userID) - return nil, interfaces.NewHTTPError(http.StatusBadGateway, text) + return nil, api.NewHTTPError(http.StatusBadGateway, text) } } } @@ -155,7 +155,7 @@ func (ctb *cnsiTokenBackup) createBackup(data *BackupRequest) (*BackupContent, e // Encrypt the entire payload encryptedPayload, err := encryptPayload(payload, data.Password) if err != nil { - return nil, interfaces.NewHTTPShadowError(http.StatusBadGateway, "Could not encrypt payload", "Could not encrypt payload: %+v", err) + return nil, api.NewHTTPShadowError(http.StatusBadGateway, "Could not encrypt payload", "Could not encrypt payload: %+v", err) } // Add the db version to the response, this will allow client side up front validation @@ -167,16 +167,16 @@ func (ctb *cnsiTokenBackup) createBackup(data *BackupRequest) (*BackupContent, e return response, nil } -func (ctb *cnsiTokenBackup) getCNSITokenRecordsBackup(endpointID string) ([]interfaces.BackupTokenRecord, bool) { +func (ctb *cnsiTokenBackup) getCNSITokenRecordsBackup(endpointID string) ([]api.BackupTokenRecord, bool) { log.Debug("getCNSITokenRecordsBackup") tokenRepo, err := ctb.p.GetStoreFactory().TokenStore() if err != nil { - return make([]interfaces.BackupTokenRecord, 0), false + return make([]api.BackupTokenRecord, 0), false } trs, err := tokenRepo.FindAllCNSITokenBackup(endpointID, ctb.encryptionKey) if err != nil { - return make([]interfaces.BackupTokenRecord, 0), false + return make([]api.BackupTokenRecord, 0), false } return trs, true @@ -188,12 +188,12 @@ func (ctb *cnsiTokenBackup) RestoreEndpoints(c echo.Context) error { // Create the restore request struct from the body body, err := ioutil.ReadAll(c.Request().Body) if err != nil { - return interfaces.NewHTTPShadowError(http.StatusBadRequest, "Invalid request body", "Invalid request body: %+v", err) + return api.NewHTTPShadowError(http.StatusBadRequest, "Invalid request body", "Invalid request body: %+v", err) } data := &RestoreRequest{} if err = json.Unmarshal(body, data); err != nil { - return interfaces.NewHTTPShadowError(http.StatusBadRequest, "Invalid request body - could not parse JSON", "Invalid request body - could not parse JSON: %+v", err) + return api.NewHTTPShadowError(http.StatusBadRequest, "Invalid request body - could not parse JSON", "Invalid request body - could not parse JSON: %+v", err) } err = ctb.restoreBackup(data) @@ -210,48 +210,48 @@ func (ctb *cnsiTokenBackup) restoreBackup(backup *RestoreRequest) error { data := &BackupContent{} if err := json.Unmarshal([]byte(backup.Data), data); err != nil { - return interfaces.NewHTTPShadowError(http.StatusBadRequest, "Invalid backup - could not parse JSON", "Invalid backup - could not parse JSON: %+v", err) + return api.NewHTTPShadowError(http.StatusBadRequest, "Invalid backup - could not parse JSON", "Invalid backup - could not parse JSON: %+v", err) } // Check that the db version of backup file matches the stratos db version if backup.IgnoreDbVersion == false { if ctb.dbVersion != data.DBVersion { errorStr := fmt.Sprintf("Incompatible database versions. Expected %+v but got %+v", ctb.dbVersion, data.DBVersion) - return interfaces.NewHTTPError(http.StatusBadRequest, errorStr) + return api.NewHTTPError(http.StatusBadRequest, errorStr) } } // Get the actual, unencrypted set of endpoints and tokens payloadString, err := decryptPayload(data.Payload, backup.Password) if err != nil { - return interfaces.NewHTTPShadowError(http.StatusInternalServerError, "Failed to decrypt payload", "Failed to decrypt payload: %+v", err) + return api.NewHTTPShadowError(http.StatusInternalServerError, "Failed to decrypt payload", "Failed to decrypt payload: %+v", err) } payload := &BackupContentPayload{} if err = json.Unmarshal([]byte(*payloadString), payload); err != nil { - return interfaces.NewHTTPShadowError(http.StatusBadRequest, "Failed to parse payload. This could be due to an incorrect password", "Failed to decrypt payload, possible incorrect password: %+v", err) + return api.NewHTTPShadowError(http.StatusBadRequest, "Failed to parse payload. This could be due to an incorrect password", "Failed to decrypt payload, possible incorrect password: %+v", err) } // Insert/Update the endpoints and tokens cnsiRepo, err := ctb.p.GetStoreFactory().EndpointStore() if err != nil { - return interfaces.NewHTTPShadowError(http.StatusInternalServerError, "Failed to connect to db", "Failed to connect to db: %+v", err) + return api.NewHTTPShadowError(http.StatusInternalServerError, "Failed to connect to db", "Failed to connect to db: %+v", err) } for _, endpoint := range payload.Endpoints { e := deSerializeEndpoint(endpoint) if err := cnsiRepo.SaveOrUpdate(e, ctb.encryptionKey); err != nil { - return interfaces.NewHTTPShadowError(http.StatusInternalServerError, "Failed to overwrite endpoints", "Failed to overwrite endpoint: %+v", e.Name) + return api.NewHTTPShadowError(http.StatusInternalServerError, "Failed to overwrite endpoints", "Failed to overwrite endpoint: %+v", e.Name) } } tokenRepo, err := ctb.p.GetStoreFactory().TokenStore() if err != nil { - return interfaces.NewHTTPShadowError(http.StatusInternalServerError, "Failed to connect to db", "Failed to connect to db: %+v", err) + return api.NewHTTPShadowError(http.StatusInternalServerError, "Failed to connect to db", "Failed to connect to db: %+v", err) } for _, tr := range payload.Tokens { if err := tokenRepo.SaveCNSIToken(tr.EndpointGUID, tr.UserGUID, tr.TokenRecord, ctb.encryptionKey); err != nil { - return interfaces.NewHTTPShadowError(http.StatusInternalServerError, "Failed to overwrite token", "Failed to overwrite token: %+v", tr.TokenRecord.TokenGUID) + return api.NewHTTPShadowError(http.StatusInternalServerError, "Failed to overwrite token", "Failed to overwrite token: %+v", tr.TokenRecord.TokenGUID) } } @@ -259,7 +259,7 @@ func (ctb *cnsiTokenBackup) restoreBackup(backup *RestoreRequest) error { } // Work around the omission of the client secret when serialising the cnsi record -func serializeEndpoint(endpoint *interfaces.CNSIRecord) map[string]interface{} { +func serializeEndpoint(endpoint *api.CNSIRecord) map[string]interface{} { // Convert struct to generic map m, _ := json.Marshal(endpoint) var a interface{} @@ -273,10 +273,10 @@ func serializeEndpoint(endpoint *interfaces.CNSIRecord) map[string]interface{} { } // Work around the omission of the client secret when serialising the cnsi record -func deSerializeEndpoint(endpoint map[string]interface{}) interfaces.CNSIRecord { +func deSerializeEndpoint(endpoint map[string]interface{}) api.CNSIRecord { // Convert struct to endpoint m, _ := json.Marshal(endpoint) - var cnsi interfaces.CNSIRecord + var cnsi api.CNSIRecord json.Unmarshal(m, &cnsi) // Apply the correct client secret diff --git a/src/jetstream/plugins/backup/main.go b/src/jetstream/plugins/backup/main.go index cf1032ea15..15c2bd1fa8 100644 --- a/src/jetstream/plugins/backup/main.go +++ b/src/jetstream/plugins/backup/main.go @@ -7,38 +7,38 @@ import ( "strconv" goosedbversion "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/goose-db-version" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) // Module init will register plugin func init() { - interfaces.AddPlugin("backup", nil, Init) + api.AddPlugin("backup", nil, Init) } // BackupRestore - Backup or restore endpoints and tokens type BackupRestore struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // Init creates a new backup/restore plugin -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { return &BackupRestore{portalProxy: portalProxy}, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (br *BackupRestore) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (br *BackupRestore) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (br *BackupRestore) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (br *BackupRestore) GetEndpointPlugin() (api.EndpointPlugin, error) { return nil, errors.New("Not implemented") } // GetRoutePlugin gets the route plugin for this plugin -func (br *BackupRestore) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (br *BackupRestore) GetRoutePlugin() (api.RoutePlugin, error) { return br, nil } @@ -73,7 +73,7 @@ func (br *BackupRestore) backupEndpoints(c echo.Context) error { version, err := getDBVersion(br.portalProxy.GetDatabaseConnection()) if err != nil { - return interfaces.NewHTTPShadowError(http.StatusBadGateway, "Could not find database version", "Could not find database version: %+v", err) + return api.NewHTTPShadowError(http.StatusBadGateway, "Could not find database version", "Could not find database version: %+v", err) } ctb := &cnsiTokenBackup{ @@ -97,7 +97,7 @@ func (br *BackupRestore) restoreEndpoints(c echo.Context) error { version, err := getDBVersion(br.portalProxy.GetDatabaseConnection()) if err != nil { - return interfaces.NewHTTPShadowError(http.StatusBadGateway, "Could not find database version", "Could not find database version: %+v", err) + return api.NewHTTPShadowError(http.StatusBadGateway, "Could not find database version", "Could not find database version: %+v", err) } ctb := &cnsiTokenBackup{ diff --git a/src/jetstream/plugins/cfapppush/connection_wrapper.go b/src/jetstream/plugins/cfapppush/connection_wrapper.go index 4d72c4425f..46593bc12b 100644 --- a/src/jetstream/plugins/cfapppush/connection_wrapper.go +++ b/src/jetstream/plugins/cfapppush/connection_wrapper.go @@ -6,14 +6,14 @@ import ( "code.cloudfoundry.org/cli/api/cloudcontroller" "code.cloudfoundry.org/cli/command" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // PushConnectionWrapper can wrap a given connection allowing the wrapper to modify // all requests going in and out of the given connection. type PushConnectionWrapper struct { inner cloudcontroller.Connection - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy config *CFPushAppConfig cmdConfig command.Config } diff --git a/src/jetstream/plugins/cfapppush/deploy.go b/src/jetstream/plugins/cfapppush/deploy.go index a0926de151..e4571e8338 100644 --- a/src/jetstream/plugins/cfapppush/deploy.go +++ b/src/jetstream/plugins/cfapppush/deploy.go @@ -5,14 +5,13 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "net/url" "os" "path/filepath" "strings" "time" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/gorilla/websocket" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" @@ -92,7 +91,7 @@ func (cfAppPush *CFAppPush) deploy(echoContext echo.Context) error { userGUID := echoContext.Get("user_id").(string) log.Debug("UpgradeToWebSocket") - clientWebSocket, pingTicker, err := interfaces.UpgradeToWebSocket(echoContext) + clientWebSocket, pingTicker, err := api.UpgradeToWebSocket(echoContext) log.Debug("UpgradeToWebSocket done") if err != nil { log.Errorf("Upgrade to websocket failed due to: %+v", err) @@ -120,7 +119,12 @@ func (cfAppPush *CFAppPush) deploy(echoContext echo.Context) error { log.Debugf("Source %v+", msg) // Temporary folder for the application source - tempDir, err := ioutil.TempDir("", "cf-push-") + tempDir, err := os.MkdirTemp("", "cf-push-") + if err != nil { + log.Errorf("Error creating temporary directory: %s", err) + return err + } + defer os.RemoveAll(tempDir) var appDir string @@ -137,7 +141,7 @@ func (cfAppPush *CFAppPush) deploy(echoContext echo.Context) error { case SOURCE_DOCKER_IMG: stratosProject, appDir, err = getDockerURLSource(clientWebSocket, tempDir, msg) default: - err = errors.New("Unsupported source type; don't know how to get the source for the application") + err = errors.New("unsupported source type; don't know how to get the source for the application") } if err != nil { @@ -159,7 +163,7 @@ func (cfAppPush *CFAppPush) deploy(echoContext echo.Context) error { if msgOverrides.Type != OVERRIDES_SUPPLIED { log.Errorf("Expected app deploy override but received event with type: %v", msgOverrides.Type) - return errors.New("Expected app deploy override message but received another type") + return errors.New("expected app deploy override message but received another type") } log.Debugf("Overrides: %v+", msgOverrides) @@ -243,7 +247,7 @@ func (cfAppPush *CFAppPush) deploy(echoContext echo.Context) error { } if msg.Type != CLOSE_ACK { - log.Errorf("Expected a close acknowledgement - got: %s", string(msg.Type)) + log.Errorf("Expected a close acknowledgement - got: %d", msg.Type) } else { log.Debug("Got close acknowledgement from the client") } @@ -269,7 +273,7 @@ func getFolderSource(clientWebSocket *websocket.Conn, tempDir string, msg Socket path := filepath.Join(tempDir, folder) err := os.Mkdir(path, 0700) if err != nil { - return StratosProject{}, tempDir, errors.New("Failed to create folder") + return StratosProject{}, tempDir, errors.New("failed to create folder") } } @@ -290,7 +294,7 @@ func getFolderSource(clientWebSocket *websocket.Conn, tempDir string, msg Socket // Expecting a file if msg.Type != SOURCE_FILE { - return StratosProject{}, tempDir, errors.New("Unexpected web socket message type") + return StratosProject{}, tempDir, errors.New("unexpected web socket message type") } log.Debugf("Transferring file: %s", msg.Message) @@ -303,12 +307,12 @@ func getFolderSource(clientWebSocket *websocket.Conn, tempDir string, msg Socket } if messageType != websocket.BinaryMessage { - return StratosProject{}, tempDir, errors.New("Expecting binary file data") + return StratosProject{}, tempDir, errors.New("expecting binary file data") } // Write the file path := filepath.Join(tempDir, msg.Message) - err = ioutil.WriteFile(path, p, 0644) + err = os.WriteFile(path, p, 0644) if err != nil { return StratosProject{}, tempDir, err } @@ -332,6 +336,9 @@ func getFolderSource(clientWebSocket *websocket.Conn, tempDir string, msg Socket log.Debug("Unpacking archive ......") unpackPath := filepath.Join(tempDir, "application") err := os.Mkdir(unpackPath, 0700) + if err != nil { + return StratosProject{}, tempDir, err + } err = archiver.Unarchive(lastFilePath, unpackPath) if err != nil { @@ -339,7 +346,7 @@ func getFolderSource(clientWebSocket *websocket.Conn, tempDir string, msg Socket } // Just check to see if we actually unpacked into a root folder - contents, err := ioutil.ReadDir(unpackPath) + contents, err := os.ReadDir(unpackPath) if err != nil { return StratosProject{}, tempDir, err } @@ -361,7 +368,7 @@ func getFolderSource(clientWebSocket *websocket.Conn, tempDir string, msg Socket } if msg.Type != SOURCE_WAIT_ACK { - return StratosProject{}, tempDir, errors.New("Expecting ACK message to begin deployment") + return StratosProject{}, tempDir, errors.New("expecting ACK message to begin deployment") } } @@ -396,12 +403,12 @@ func (cfAppPush *CFAppPush) getGitSCMSource(clientWebSocket *websocket.Conn, tem if len(info.EndpointGUID) != 0 { parsedURL, err := url.Parse(info.URL) if err != nil { - return StratosProject{}, tempDir, errors.New("Failed to parse SCM URL") + return StratosProject{}, tempDir, errors.New("failed to parse SCM URL") } cnsiRecord, err := cfAppPush.portalProxy.GetCNSIRecord(info.EndpointGUID) if err != nil { - return StratosProject{}, tempDir, errors.New("Failed to find endpoint with guid " + info.EndpointGUID) + return StratosProject{}, tempDir, errors.New("failed to find endpoint with guid " + info.EndpointGUID) } skipSLL = cnsiRecord.SkipSSLValidation @@ -410,7 +417,7 @@ func (cfAppPush *CFAppPush) getGitSCMSource(clientWebSocket *websocket.Conn, tem if isTokenFound { authTokenDecodedBytes, err := base64.StdEncoding.DecodeString(tokenRecord.AuthToken) if err != nil { - return StratosProject{}, tempDir, errors.New("Failed to decode auth token") + return StratosProject{}, tempDir, errors.New("failed to decode auth token") } var ( @@ -428,11 +435,11 @@ func (cfAppPush *CFAppPush) getGitSCMSource(clientWebSocket *websocket.Conn, tem username = tokenRecord.RefreshToken password = string(authTokenDecodedBytes) default: - return StratosProject{}, tempDir, fmt.Errorf("Unknown SCM type '%s'", info.SCM) + return StratosProject{}, tempDir, fmt.Errorf("unknown SCM type '%s'", info.SCM) } if len(username) == 0 { - return StratosProject{}, tempDir, errors.New("Username is empty") + return StratosProject{}, tempDir, errors.New("username is empty") } // mask the credentials for the logs and env var @@ -523,12 +530,19 @@ func getDockerURLSource(clientWebSocket *websocket.Conn, tempDir string, msg Soc applicationData := RawManifestApplication{ Name: info.ApplicationName, } + manifest := Applications{ Applications: []RawManifestApplication{applicationData}, } + marshalledYaml, err := yaml.Marshal(manifest) + if err != nil { + return StratosProject{}, tempDir, err + } + manifestPath := fmt.Sprintf("%s/manifest.yml", tempDir) - err = ioutil.WriteFile(manifestPath, marshalledYaml, 0600) + + err = os.WriteFile(manifestPath, marshalledYaml, 0600) if err != nil { log.Warnf("Failed to write manifest in path %s", manifestPath) return StratosProject{}, tempDir, err @@ -577,7 +591,7 @@ func (cfAppPush *CFAppPush) getConfigData(echoContext echo.Context, cnsiGUID str if !found { log.Warnf("Failed to retrieve record for CNSI %s", cnsiGUID) sendErrorMessage(clientWebSocket, err, CLOSE_NO_CNSI_USERTOKEN) - return nil, errors.New("Failed to find token record") + return nil, errors.New("failed to find token record") } config := &CFPushAppConfig{ @@ -602,7 +616,7 @@ func (cfAppPush *CFAppPush) getConfigData(echoContext echo.Context, cnsiGUID str func cloneRepository(cloneDetails CloneDetails, clientWebSocket *websocket.Conn, tempDir string) (string, error) { if len(cloneDetails.Branch) == 0 { - err := errors.New("No branch supplied") + err := errors.New("no branch supplied") log.Infof("Failed to checkout repo %s due to %+v", cloneDetails.LoggerUrl, err) sendErrorMessage(clientWebSocket, err, CLOSE_FAILED_NO_BRANCH) return "", err @@ -662,12 +676,12 @@ func fetchManifest(repoPath string, stratosProject StratosProject, clientWebSock if !fileExists(manifestPath) { manifestPath = filepath.Join(repoPath, "manifest.yaml") if !fileExists(manifestPath) { - return manifest, manifestPath, fmt.Errorf("Can not find manifest file") + return manifest, manifestPath, fmt.Errorf("can not find manifest file") } } // Read the manifest - data, err := ioutil.ReadFile(manifestPath) + data, err := os.ReadFile(manifestPath) if err != nil { log.Warnf("Failed to read manifest in path %s", manifestPath) sendErrorMessage(clientWebSocket, err, CLOSE_NO_MANIFEST) @@ -700,7 +714,7 @@ func fetchManifest(repoPath string, stratosProject StratosProject, clientWebSock sendErrorMessage(clientWebSocket, err, CLOSE_FAILURE) return manifest, manifestPath, err } - ioutil.WriteFile(manifestPath, marshalledYaml, 0600) + os.WriteFile(manifestPath, marshalledYaml, 0600) } return manifest, manifestPath, nil diff --git a/src/jetstream/plugins/cfapppush/go.mod b/src/jetstream/plugins/cfapppush/go.mod new file mode 100644 index 0000000000..8999963652 --- /dev/null +++ b/src/jetstream/plugins/cfapppush/go.mod @@ -0,0 +1,121 @@ +module github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/cfapppush + +go 1.21.0 + +replace ( + github.com/cloudfoundry-incubator/stratos/src/jetstream/api => ../../api + github.com/cloudfoundry/cli-plugin-repo => code.cloudfoundry.org/cli-plugin-repo v0.0.0-20230525012251-b9c89116786e + github.com/moby/moby => github.com/moby/moby v20.10.25+incompatible + github.com/vito/go-interact => github.com/vito/go-interact v1.0.0 + github.com/sabhiram/go-gitignore => github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 +) + +require ( + code.cloudfoundry.org/cli v0.0.0-20230912192837-efd1d03e7292 + github.com/cloudfoundry-incubator/stratos/src/jetstream/api v0.0.0-00010101000000-000000000000 + github.com/gorilla/websocket v1.5.0 + github.com/labstack/echo/v4 v4.11.1 + github.com/mholt/archiver v3.1.1+incompatible + github.com/sirupsen/logrus v1.9.3 + gopkg.in/yaml.v2 v2.4.0 +) + +require ( + code.cloudfoundry.org/bytefmt v0.0.0-20230612151507-41ef4d1f67a4 // indirect + code.cloudfoundry.org/cfnetworking-cli-api v0.0.0-20190103195135-4b04f26287a6 // indirect + code.cloudfoundry.org/cli-plugin-repo v0.0.0-20230525012251-b9c89116786e // indirect + code.cloudfoundry.org/clock v1.1.0 // indirect + code.cloudfoundry.org/diego-ssh v0.0.0-20230810200140-af9d79fe9c82 // indirect + code.cloudfoundry.org/go-log-cache v1.0.1-0.20230224210401-5e305670b626 // indirect + code.cloudfoundry.org/go-loggregator v7.4.0+incompatible // indirect + code.cloudfoundry.org/go-loggregator/v8 v8.0.5 // indirect + code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f // indirect + code.cloudfoundry.org/jsonry v1.1.4 // indirect + code.cloudfoundry.org/lager v2.0.0+incompatible // indirect + code.cloudfoundry.org/lager/v3 v3.0.2 // indirect + code.cloudfoundry.org/rfc5424 v0.0.0-20201103192249-000122071b78 // indirect + code.cloudfoundry.org/tlsconfig v0.0.0-20230612153104-23c0622de227 // indirect + code.cloudfoundry.org/ykk v0.0.0-20170424192843-e4df4ce2fd4d // indirect + github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/SermoDigital/jose v0.9.2-0.20161205224733-f6df55f235c2 // indirect + github.com/apoydence/eachers v0.0.0-20181020210610-23942921fe77 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/bmatcuk/doublestar v1.3.4 // indirect + github.com/bmizerany/pat v0.0.0-20210406213842-e4b6760bdd6f // indirect + github.com/charlievieth/fs v0.0.3 // indirect + github.com/cloudfoundry-community/go-cfenv v1.17.0 // indirect + github.com/cloudfoundry/bosh-cli v6.4.1+incompatible // indirect + github.com/cloudfoundry/bosh-utils v0.0.385 // indirect + github.com/cloudfoundry/noaa v2.1.0+incompatible // indirect + github.com/cloudfoundry/sonde-go v0.0.0-20230710164515-a0a43d1dbbf8 // indirect + github.com/cppforlife/go-patch v0.2.0 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/dsnet/compress v0.0.1 // indirect + github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a // indirect + github.com/elazarl/goproxy/ext v0.0.0-20230808193330-2592e75ae04a // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/frankban/quicktest v1.14.6 // indirect + github.com/go-logr/logr v1.2.4 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/gorilla/securecookie v1.1.1 // indirect + github.com/gorilla/sessions v1.2.1 // indirect + github.com/govau/cf-common v0.0.7 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/imdario/mergo v0.3.6 // indirect + github.com/jessevdk/go-flags v1.5.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kr/pty v1.1.8 // indirect + github.com/labstack/gommon v0.4.0 // indirect + github.com/lunixbochs/vtclean v1.0.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mitchellh/mapstructure v1.1.2 // indirect + github.com/moby/moby v20.10.25+incompatible // indirect + github.com/moby/term v0.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/nwaples/rardecode v1.1.3 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/rogpeppe/go-internal v1.10.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 // indirect + github.com/sajari/fuzzy v1.0.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/tedsuo/rata v1.0.1-0.20170830210128-07d200713958 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect + github.com/vito/go-interact v1.0.0 // indirect + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect + golang.org/x/crypto v0.13.0 // indirect + golang.org/x/net v0.15.0 // indirect + golang.org/x/oauth2 v0.11.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/term v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect + golang.org/x/time v0.3.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5 // indirect + google.golang.org/grpc v1.57.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect + gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + k8s.io/apimachinery v0.28.1 // indirect + k8s.io/client-go v0.28.1 // indirect + k8s.io/klog/v2 v2.100.1 // indirect + k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) diff --git a/src/jetstream/plugins/cfapppush/go.sum b/src/jetstream/plugins/cfapppush/go.sum new file mode 100644 index 0000000000..41f2554196 --- /dev/null +++ b/src/jetstream/plugins/cfapppush/go.sum @@ -0,0 +1,501 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +code.cloudfoundry.org/bytefmt v0.0.0-20230612151507-41ef4d1f67a4 h1:9G5F8zgma5v0GdDvNz6iZwwJp3RS/z0SY/aHGfVwvTo= +code.cloudfoundry.org/bytefmt v0.0.0-20230612151507-41ef4d1f67a4/go.mod h1:wYHCXH/gI19ujoFVuMkY48qPpPCoHLKBKXPkn67h/Yc= +code.cloudfoundry.org/cfnetworking-cli-api v0.0.0-20190103195135-4b04f26287a6 h1:Yc9r1p21kEpni9WlG4mwOZw87TB2QlyS9sAEebZ3+ak= +code.cloudfoundry.org/cfnetworking-cli-api v0.0.0-20190103195135-4b04f26287a6/go.mod h1:u5FovqC5GGAEbFPz+IdjycDA+gIjhUwqxnu0vbHwVeM= +code.cloudfoundry.org/cli v0.0.0-20230912192837-efd1d03e7292 h1:EeEDt9ZTdNoij6f30PFrlkCD6GY0epW9Q21sniKrdVs= +code.cloudfoundry.org/cli v0.0.0-20230912192837-efd1d03e7292/go.mod h1:ie2BbLGL7mXuhZTLpfT8QpQ4g5DdeYNUzia7ffeo838= +code.cloudfoundry.org/cli v7.1.0+incompatible h1:1Zn3I+epQBaBvnZAaTudCQQ0WdqcWtjtjEV9MBZP08Y= +code.cloudfoundry.org/cli v7.1.0+incompatible/go.mod h1:e4d+EpbwevNhyTZKybrLlyTvpH+W22vMsmdmcTxs/Fo= +code.cloudfoundry.org/cli-plugin-repo v0.0.0-20230525012251-b9c89116786e h1:S3mdVd/uTwYYtrf5j9feucRuTqb05SsO5D1H2Mj09ao= +code.cloudfoundry.org/cli-plugin-repo v0.0.0-20230525012251-b9c89116786e/go.mod h1:R1EiyOAr7lW0l/YkZNqItUNZ01Q/dYUfbTn4X4Z+82M= +code.cloudfoundry.org/clock v1.1.0 h1:XLzC6W3Ah/Y7ht1rmZ6+QfPdt1iGWEAAtIZXgiaj57c= +code.cloudfoundry.org/clock v1.1.0/go.mod h1:yA3fxddT9RINQL2XHS7PS+OXxKCGhfrZmlNUCIM6AKo= +code.cloudfoundry.org/diego-ssh v0.0.0-20230810200140-af9d79fe9c82 h1:Bns1y0jSlcvfP0u8ael+TUlnyNHsNX808zuo58bf5so= +code.cloudfoundry.org/diego-ssh v0.0.0-20230810200140-af9d79fe9c82/go.mod h1:L2/glHnSK+wKnsG8oZZqdV2sgYY9NDo/I1aDJGhcWaM= +code.cloudfoundry.org/go-diodes v0.0.0-20180905200951-72629b5276e3/go.mod h1:Jzi+ccHgo/V/PLQUaQ6hnZcC1c4BS790gx21LRRui4g= +code.cloudfoundry.org/go-envstruct v1.5.0/go.mod h1:E2S/gzRZpZ51PZnIv7Bo7QvcgH18yio19upkrRk0xLU= +code.cloudfoundry.org/go-log-cache v1.0.1-0.20200304231243-355ff60646f3 h1:JY4V3sP91I/FRy6h4Zi8dhVtntNfk1T/5y3GvqvvoHk= +code.cloudfoundry.org/go-log-cache v1.0.1-0.20200304231243-355ff60646f3/go.mod h1:0+5CSLZehiHLkrWCmwPt7mA/RlAa71idWz4SG4wfhOE= +code.cloudfoundry.org/go-loggregator v7.4.0+incompatible h1:KqZYloMQWM5Zg/BQKunOIA4OODh7djZbk48qqbowNFI= +code.cloudfoundry.org/go-loggregator v7.4.0+incompatible/go.mod h1:KPBTRqj+y738Nhf1+g4JHFaBU8j7dedirR5ETNHvMXU= +code.cloudfoundry.org/go-loggregator/v8 v8.0.5 h1:p1rrGxTwUqLjlUVtbjTAvKOSGNmPuBja8LeQOQgRrBc= +code.cloudfoundry.org/go-loggregator/v8 v8.0.5/go.mod h1:mLlJ1ZyG6gVvBEtYypvbztRvFeCtBsTxE9tt+85tS6Y= +code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f h1:UrKzEwTgeiff9vxdrfdqxibzpWjxLnuXDI5m6z3GJAk= +code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f/go.mod h1:sk5LnIjB/nIEU7yP5sDQExVm62wu0pBh3yrElngUisI= +code.cloudfoundry.org/jsonry v1.1.4 h1:P9N7IlH1/4aRCLcXLgLFj1hkcBmV7muijJzY+K6U4hE= +code.cloudfoundry.org/jsonry v1.1.4/go.mod h1:6aKilShQP7w/Ez76h1El2/n9y2OkHuU56nKSBB9Gp0A= +code.cloudfoundry.org/lager v2.0.0+incompatible h1:WZwDKDB2PLd/oL+USK4b4aEjUymIej9My2nUQ9oWEwQ= +code.cloudfoundry.org/lager v2.0.0+incompatible/go.mod h1:O2sS7gKP3HM2iemG+EnwvyNQK7pTSC6Foi4QiMp9sSk= +code.cloudfoundry.org/lager/v3 v3.0.2 h1:H0dcQY+814G1Ea0e5K/AMaMpcr+Pe5Iv+AALJEwrP9U= +code.cloudfoundry.org/lager/v3 v3.0.2/go.mod h1:zA6tOIWhr5uZUez+PGpdfBHDWQOfhOrr0cgKDagZPwk= +code.cloudfoundry.org/rfc5424 v0.0.0-20180905210152-236a6d29298a/go.mod h1:tkZo8GtzBjySJ7USvxm4E36lNQw1D3xM6oKHGqdaAJ4= +code.cloudfoundry.org/rfc5424 v0.0.0-20201103192249-000122071b78 h1:mrZQaZmuDIPhSp6b96b+CRKC2uH44ifa5cjDV2epKis= +code.cloudfoundry.org/rfc5424 v0.0.0-20201103192249-000122071b78/go.mod h1:tkZo8GtzBjySJ7USvxm4E36lNQw1D3xM6oKHGqdaAJ4= +code.cloudfoundry.org/tlsconfig v0.0.0-20200131000646-bbe0f8da39b3/go.mod h1:eTbFJpyXRGuFVyg5+oaj9B2eIbIc+0/kZjH8ftbtdew= +code.cloudfoundry.org/tlsconfig v0.0.0-20230612153104-23c0622de227 h1:QYyb6Ur0Ys6FciDB3+8zCW3eVk7AxAs2++Foa5DAdt0= +code.cloudfoundry.org/tlsconfig v0.0.0-20230612153104-23c0622de227/go.mod h1:C8SxvGRSutmgzV2FxH8Zwqz2Q8HsaAITQRQFKhlDzPw= +code.cloudfoundry.org/ykk v0.0.0-20170424192843-e4df4ce2fd4d h1:M+zXqtXJqcsmpL76aU0tdl1ho23eYa4axYoM4gD62UA= +code.cloudfoundry.org/ykk v0.0.0-20170424192843-e4df4ce2fd4d/go.mod h1:YUJiVOr5xl0N/RjMxM1tHmgSpBbi5UM+KoVR5AoejO0= +filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= +filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/SermoDigital/jose v0.9.2-0.20161205224733-f6df55f235c2 h1:koK7z0nSsRiRiBWwa+E714Puh+DO+ZRdIyAXiXzL+lg= +github.com/SermoDigital/jose v0.9.2-0.20161205224733-f6df55f235c2/go.mod h1:ARgCUhI1MHQH+ONky/PAtmVHQrP5JlGY0F3poXOp/fA= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apoydence/eachers v0.0.0-20181020210610-23942921fe77 h1:afT88tB6u9JCKQZVAAaa9ICz/uGn5Uw9ekn6P22mYKM= +github.com/apoydence/eachers v0.0.0-20181020210610-23942921fe77/go.mod h1:bXvGk6IkT1Agy7qzJ+DjIw/SJ1AaB3AvAuMDVV+Vkoo= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bmatcuk/doublestar v1.3.4 h1:gPypJ5xD31uhX6Tf54sDPUOBXTqKH4c9aPY66CyQrS0= +github.com/bmatcuk/doublestar v1.3.4/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE= +github.com/bmizerany/pat v0.0.0-20210406213842-e4b6760bdd6f h1:gOO/tNZMjjvTKZWpY7YnXC72ULNLErRtp94LountVE8= +github.com/bmizerany/pat v0.0.0-20210406213842-e4b6760bdd6f/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/charlievieth/fs v0.0.3 h1:3lZQXTj4PbE81CVPwALSn+JoyCNXkZgORHN6h2XHGlg= +github.com/charlievieth/fs v0.0.3/go.mod h1:hD4sRzto1Hw8zCua76tNVKZxaeZZr1RiKftjAJQRLLo= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudfoundry-community/go-cfenv v1.17.0 h1:qfxEfn8qKkaHY3ZEk/Y2noY79HBASvNgmtHK9x4+6GY= +github.com/cloudfoundry-community/go-cfenv v1.17.0/go.mod h1:2UgWvQTRXUuIZ/x3KnW6fk6CgPBhcV4UQb/UGIrUyyI= +github.com/cloudfoundry/bosh-cli v6.4.1+incompatible h1:n5/+NIF9QxvGINOrjh6DmO+GTen78MoCj5+LU9L8bR4= +github.com/cloudfoundry/bosh-cli v6.4.1+incompatible/go.mod h1:rzIB+e1sn7wQL/TJ54bl/FemPKRhXby5BIMS3tLuWFM= +github.com/cloudfoundry/bosh-utils v0.0.385 h1:rOgL4fKxeLNUAYoHSfycRro29ns9bhsEyBJ8DQ5W4Rc= +github.com/cloudfoundry/bosh-utils v0.0.385/go.mod h1:vYjxd5zpxGjBKC+8voohfdXZkVk0UMOOvlMlZfxyOLM= +github.com/cloudfoundry/dropsonde v1.0.0/go.mod h1:6zwvrWK5TpxBVYi1cdkE5WDsIO8E0n7qAJg3wR9B67c= +github.com/cloudfoundry/gosteno v0.0.0-20150423193413-0c8581caea35/go.mod h1:3YBPUR85RIrvaUTdA1dL38YSp6s3OHu1xrWLkGt2Mog= +github.com/cloudfoundry/loggregatorlib v0.0.0-20170823162133-36eddf15ef12/go.mod h1:ucj7+svyACshmxV3Zze2NAcEcdbBf9scZYR+QKCX9/w= +github.com/cloudfoundry/noaa v2.1.0+incompatible h1:hr6VnM5VlYRN3YD+NmAedQLW8686sUMknOSe0mFS2vo= +github.com/cloudfoundry/noaa v2.1.0+incompatible/go.mod h1:5LmacnptvxzrTvMfL9+EJhgkUfIgcwI61BVSTh47ECo= +github.com/cloudfoundry/sonde-go v0.0.0-20171206171820-b33733203bb4/go.mod h1:GS0pCHd7onIsewbw8Ue9qa9pZPv2V88cUZDttK6KzgI= +github.com/cloudfoundry/sonde-go v0.0.0-20230710164515-a0a43d1dbbf8 h1:IpMHKJul/Wr6Rae9VXO+1K0TuORVyhKFjpqkY5ClEAM= +github.com/cloudfoundry/sonde-go v0.0.0-20230710164515-a0a43d1dbbf8/go.mod h1:GiUWdcLKuM+RX4gSQBSHn3ADveMrRadWxuY6AFK5JNk= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/cppforlife/go-patch v0.2.0 h1:Y14MnCQjDlbw7WXT4k+u6DPAA9XnygN4BfrSpI/19RU= +github.com/cppforlife/go-patch v0.2.0/go.mod h1:67a7aIi94FHDZdoeGSJRRFDp66l9MhaAG1yGxpUoFD8= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= +github.com/elazarl/goproxy/ext v0.0.0-20230808193330-2592e75ae04a h1:6hp3+W5oJSkbk/m2XquFdhih2H4wxxR0Nl6GfPL8kss= +github.com/elazarl/goproxy/ext v0.0.0-20230808193330-2592e75ae04a/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20230811205829-9131a7e9cc17 h1:0h35ESZ02+hN/MFZb7XZOXg+Rl9+Rk8fBIf5YLws9gA= +github.com/google/pprof v0.0.0-20230811205829-9131a7e9cc17/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/govau/cf-common v0.0.7 h1:uhp1P6XM6GGzu1+A4C7LELLX/9mCmH6W5DpJZC0kWmo= +github.com/govau/cf-common v0.0.7/go.mod h1:5xL/OfE7wxeyHlXb7iei0rAbdQ/5v6dF18BZknPv7NQ= +github.com/grpc-ecosystem/grpc-gateway v1.14.0/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/jessevdk/go-flags v0.0.0-20170926144705-f88afde2fa19/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/labstack/echo/v4 v4.11.1 h1:dEpLU2FLg4UVmvCGPuk/APjlH6GDpbEPti61srUUUs4= +github.com/labstack/echo/v4 v4.11.1/go.mod h1:YuYRTSM3CHs2ybfrL8Px48bO6BAnYIN4l8wSTMP6BDQ= +github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/loggregator/go-bindata v0.0.0-20190422223605-5f11cfb2d7d9/go.mod h1:PvsJfK9t/8OdGvSanpYlwJ1EPoJ/hwT3c52txAzqooY= +github.com/lunixbochs/vtclean v1.0.0 h1:xu2sLAri4lGiovBDQKxl5mrXyESr3gUr5m5SM5+LVb8= +github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU= +github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/moby/moby v20.10.25+incompatible h1:if9KfjJADD9eVz2/f6g3jZlIAlO+iSFtqRMd32R0AwY= +github.com/moby/moby v20.10.25+incompatible/go.mod h1:fDXVQ6+S340veQPv35CzDahGBmHsiclFwfEygB/TWMc= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d h1:VhgPp6v9qf9Agr/56bj7Y/xa04UccTW04VP0Qed4vnQ= +github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d/go.mod h1:YUTz3bUH2ZwIWBy3CJBeOBEugqcmXREj14T+iG/4k4U= +github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= +github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/onsi/ginkgo v0.0.0-20171031171758-652e15c9a27e/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= +github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= +github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= +github.com/onsi/gomega v0.0.0-20171105031654-1eecca0ba8e6/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/openzipkin/zipkin-go v0.4.1 h1:kNd/ST2yLLWhaWrkgchya40TJabe8Hioj9udfPcEO5A= +github.com/openzipkin/zipkin-go v0.4.1/go.mod h1:qY0VqDSN1pOBN94dBc6w2GJlWLiovAyg7Qt6/I9HecM= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/poy/eachers v0.0.0-20181020210610-23942921fe77/go.mod h1:x1vqpbcMW9T/KRcQ4b48diSiSVtYgvwQ5xzDByEg4WE= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 h1:G04eS0JkAIVZfaJLjla9dNxkJCPiKIGZlw9AfOhzOD0= +github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ= +github.com/sajari/fuzzy v1.0.0 h1:+FmwVvJErsd0d0hAPlj4CxqxUtQY/fOoY0DwX4ykpRY= +github.com/sajari/fuzzy v1.0.0/go.mod h1:OjYR6KxoWOe9+dOlXeiCJd4dIbED4Oo8wpS89o0pwOo= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/square/certstrap v1.2.0/go.mod h1:CUHqV+fxJW0Y5UQFnnbYwQ7bpKXO1AKbic9g73799yw= +github.com/square/certstrap v1.3.0 h1:N9P0ZRA+DjT8pq5fGDj0z3FjafRKnBDypP0QHpMlaAk= +github.com/square/certstrap v1.3.0/go.mod h1:wGZo9eE1B7WX2GKBn0htJ+B3OuRl2UsdCFySNooy9hU= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tedsuo/rata v1.0.1-0.20170830210128-07d200713958 h1:mueRRuRjR35dEOkHdhpoRcruNgBz0ohG659HxxmcAwA= +github.com/tedsuo/rata v1.0.1-0.20170830210128-07d200713958/go.mod h1:X47ELzhOoLbfFIY0Cql9P6yo3Cdwf2CMX3FVZxRzJPc= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/unrolled/secure v0.0.0-20180416205222-a1cf62cc2159/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= +github.com/urfave/cli v1.21.0/go.mod h1:lxDj6qX9Q6lWQxIrbrT0nwecwUtRnhVZAJjJZrVUZZQ= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/vito/go-interact v1.0.0 h1:niLW3NjGoMWOayoR6iQ8AxWVM1Q4rR8VGZ1mt6uK3BM= +github.com/vito/go-interact v1.0.0/go.mod h1:W1mz+UVUZScRM3eUjQhEQiLDnQ+yLnXkB2rjBfGPrXg= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.step.sm/crypto v0.16.2 h1:Pr9aazTwWBBZNogUsOqhOrPSdwAa9pPs+lMB602lnDA= +go.step.sm/crypto v0.16.2/go.mod h1:1WkTOTY+fOX/RY4TnZREp6trQAsBHRQ7nu6QJBiNQF8= +golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/net v0.0.0-20180418062111-d41e8174641f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180419222023-a2a45943ae67/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= +golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20200304201815-d429ff31ee6c/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5 h1:L6iMMGrtzgHsWofoFcihmDEMYeDR9KN/ThbPWGrh++g= +google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5 h1:eSaPbMR4T7WfH9FvABk36NBMacoTUKdWCvV0dx+KfOg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.0.0-20171116090243-287cf08546ab/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.4.0-0.dev/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= +k8s.io/apimachinery v0.28.1 h1:EJD40og3GizBSV3mkIoXQBsws32okPOy+MkRyzh6nPY= +k8s.io/apimachinery v0.28.1/go.mod h1:X0xh/chESs2hP9koe+SdIAcXWcQ+RM5hy0ZynB+yEvw= +k8s.io/client-go v0.28.1 h1:pRhMzB8HyLfVwpngWKE8hDcXRqifh1ga2Z/PU9SXVK8= +k8s.io/client-go v0.28.1/go.mod h1:pEZA3FqOsVkCc07pFVzK076R+P/eXqsgx5zuuRWukNE= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/src/jetstream/plugins/cfapppush/info.go b/src/jetstream/plugins/cfapppush/info.go index e273385dce..f6e3561f85 100644 --- a/src/jetstream/plugins/cfapppush/info.go +++ b/src/jetstream/plugins/cfapppush/info.go @@ -3,7 +3,7 @@ package cfapppush import ( "errors" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "code.cloudfoundry.org/cli/util/configv3" log "github.com/sirupsen/logrus" @@ -26,13 +26,23 @@ func (c *CFPushApp) setEndpointInfo(config *configv3.Config) error { return err } - if info, ok := endpointInfo.(interfaces.V2Info); ok { + if info, ok := endpointInfo.(api.V2Info); ok { // Got the info we need - update the config with it - config.SetTargetInformation(apiEndpoint, info.APIVersion, info.AuthorizationEndpoint, info.MinCLIVersion, info.DopplerLoggingEndpoint, info.RoutingEndpoint, skipSSLValidation) + config.SetTargetInformation( + configv3.TargetInformationArgs{ + Api: apiEndpoint, + ApiVersion: info.APIVersion, + Auth: info.AuthorizationEndpoint, + MinCLIVersion: info.MinCLIVersion, + Doppler: info.DopplerLoggingEndpoint, + Routing: info.RoutingEndpoint, + SkipSSLValidation: skipSSLValidation, + }, + ) config.SetAccessToken("bearer " + c.config.AuthToken) // Note: We do not give the refresh token to the CLI code as we do NOT want it to refresh the token } else { - return errors.New("Did not get a CF /v2/info response") + return errors.New("did not get a CF /v2/info response") } return nil diff --git a/src/jetstream/plugins/cfapppush/main.go b/src/jetstream/plugins/cfapppush/main.go index 582fb85b70..08d1d4fff1 100644 --- a/src/jetstream/plugins/cfapppush/main.go +++ b/src/jetstream/plugins/cfapppush/main.go @@ -3,37 +3,37 @@ package cfapppush import ( "errors" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" ) // Module init will register plugin func init() { - interfaces.AddPlugin("cfapppush", []string{"cloudfoundry"}, Init) + api.AddPlugin("cfapppush", []string{"cloudfoundry"}, Init) } // CFAppPush is a plugin to allow applications to be pushed to Cloud Foundry from Stratos type CFAppPush struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // Init creates a new CFAppPush -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { return &CFAppPush{portalProxy: portalProxy}, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (cfAppPush *CFAppPush) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (cfAppPush *CFAppPush) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (cfAppPush *CFAppPush) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (cfAppPush *CFAppPush) GetEndpointPlugin() (api.EndpointPlugin, error) { return nil, errors.New("Not implemented") } // GetRoutePlugin gets the route plugin for this plugin -func (cfAppPush *CFAppPush) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (cfAppPush *CFAppPush) GetRoutePlugin() (api.RoutePlugin, error) { return cfAppPush, nil } diff --git a/src/jetstream/plugins/cfapppush/push_actor.go b/src/jetstream/plugins/cfapppush/push_actor.go deleted file mode 100644 index 3953f3c928..0000000000 --- a/src/jetstream/plugins/cfapppush/push_actor.go +++ /dev/null @@ -1,112 +0,0 @@ -package cfapppush - -import ( - "io" - - "code.cloudfoundry.org/cli/actor/pushaction" - "code.cloudfoundry.org/cli/actor/v2action" - "github.com/gorilla/websocket" -) - -type cfV2Actor struct { - wrapped pushaction.V2Actor - sent bool - msgSender DeployAppMessageSender - clientWebsocket *websocket.Conn -} - -func (r cfV2Actor) sendAppID(application v2action.Application) { - if !r.sent { - r.msgSender.SendEvent(r.clientWebsocket, APP_GUID_NOTIFY, application.GUID) - r.sent = true - } -} - -func (r cfV2Actor) MapRouteToApplication(routeGUID string, appGUID string) (v2action.Warnings, error) { - return r.wrapped.MapRouteToApplication(routeGUID, appGUID) -} - -func (r cfV2Actor) BindServiceByApplicationAndServiceInstance(appGUID string, serviceInstanceGUID string) (v2action.Warnings, error) { - return r.wrapped.BindServiceByApplicationAndServiceInstance(appGUID, serviceInstanceGUID) -} - -func (r cfV2Actor) CloudControllerAPIVersion() string { - return r.wrapped.CloudControllerAPIVersion() -} - -func (r cfV2Actor) CreateApplication(application v2action.Application) (v2action.Application, v2action.Warnings, error) { - app, warnings, err := r.wrapped.CreateApplication(application) - if err == nil { - r.sendAppID(app) - } - return app, warnings, err -} - -func (r cfV2Actor) CreateRoute(route v2action.Route, generatePort bool) (v2action.Route, v2action.Warnings, error) { - return r.wrapped.CreateRoute(route, generatePort) -} - -func (r cfV2Actor) FindRouteBoundToSpaceWithSettings(route v2action.Route) (v2action.Route, v2action.Warnings, error) { - return r.wrapped.FindRouteBoundToSpaceWithSettings(route) -} - -func (r cfV2Actor) GetApplicationByNameAndSpace(name string, spaceGUID string) (v2action.Application, v2action.Warnings, error) { - app, warnings, err := r.wrapped.GetApplicationByNameAndSpace(name, spaceGUID) - if err == nil { - r.sendAppID(app) - } - return app, warnings, err -} - -func (r cfV2Actor) GetApplicationRoutes(applicationGUID string) (v2action.Routes, v2action.Warnings, error) { - return r.wrapped.GetApplicationRoutes(applicationGUID) -} - -func (r cfV2Actor) GetDomainsByNameAndOrganization(domainNames []string, orgGUID string) ([]v2action.Domain, v2action.Warnings, error) { - return r.wrapped.GetDomainsByNameAndOrganization(domainNames, orgGUID) -} - -func (r cfV2Actor) GetOrganizationDomains(orgGUID string) ([]v2action.Domain, v2action.Warnings, error) { - return r.wrapped.GetOrganizationDomains(orgGUID) -} - -func (r cfV2Actor) GetServiceInstanceByNameAndSpace(name string, spaceGUID string) (v2action.ServiceInstance, v2action.Warnings, error) { - return r.wrapped.GetServiceInstanceByNameAndSpace(name, spaceGUID) -} - -func (r cfV2Actor) GetServiceInstancesByApplication(appGUID string) ([]v2action.ServiceInstance, v2action.Warnings, error) { - return r.wrapped.GetServiceInstancesByApplication(appGUID) -} - -func (r cfV2Actor) GetStack(guid string) (v2action.Stack, v2action.Warnings, error) { - return r.wrapped.GetStack(guid) -} - -func (r cfV2Actor) GetStackByName(stackName string) (v2action.Stack, v2action.Warnings, error) { - return r.wrapped.GetStackByName(stackName) -} - -func (r cfV2Actor) PollJob(job v2action.Job) (v2action.Warnings, error) { - return r.wrapped.PollJob(job) -} - -func (r cfV2Actor) ResourceMatch(allResources []v2action.Resource) ([]v2action.Resource, []v2action.Resource, v2action.Warnings, error) { - return r.wrapped.ResourceMatch(allResources) -} - -func (r cfV2Actor) UnmapRouteFromApplication(routeGUID string, appGUID string) (v2action.Warnings, error) { - return r.wrapped.UnmapRouteFromApplication(routeGUID, appGUID) -} - -func (r cfV2Actor) UpdateApplication(application v2action.Application) (v2action.Application, v2action.Warnings, error) { - r.sendAppID(application) - return r.wrapped.UpdateApplication(application) -} - -func (r cfV2Actor) UploadApplicationPackage(appGUID string, existingResources []v2action.Resource, newResources io.Reader, newResourcesLength int64) (v2action.Job, v2action.Warnings, error) { - return r.wrapped.UploadApplicationPackage(appGUID, existingResources, newResources, newResourcesLength) -} - -func (r cfV2Actor) UploadDroplet(appGUID string, droplet io.Reader, dropletLength int64) (v2action.Job, v2action.Warnings, error) { - return r.wrapped.UploadDroplet(appGUID, droplet, dropletLength) -} diff --git a/src/jetstream/plugins/cfapppush/pushapp.go b/src/jetstream/plugins/cfapppush/pushapp.go index 0b033e0247..ef0122832c 100644 --- a/src/jetstream/plugins/cfapppush/pushapp.go +++ b/src/jetstream/plugins/cfapppush/pushapp.go @@ -4,19 +4,18 @@ import ( "bytes" "encoding/json" "errors" - "fmt" "html/template" "io" + "strconv" "strings" - "code.cloudfoundry.org/cli/actor/pushaction" "code.cloudfoundry.org/cli/actor/sharedaction" - "code.cloudfoundry.org/cli/actor/v2action" - "code.cloudfoundry.org/cli/actor/v2v3action" - "code.cloudfoundry.org/cli/actor/v3action" + "code.cloudfoundry.org/cli/actor/v7action" + "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" "code.cloudfoundry.org/cli/cf/commandregistry" "code.cloudfoundry.org/cli/command" + "code.cloudfoundry.org/clock" "code.cloudfoundry.org/cli/util/configv3" "code.cloudfoundry.org/cli/util/progressbar" @@ -27,20 +26,19 @@ import ( "code.cloudfoundry.org/cli/command/flag" "code.cloudfoundry.org/cli/command/translatableerror" - v6 "code.cloudfoundry.org/cli/command/v6" - "code.cloudfoundry.org/cli/command/v6/shared" - sharedV3 "code.cloudfoundry.org/cli/command/v6/shared" + v7 "code.cloudfoundry.org/cli/command/v7" + "code.cloudfoundry.org/cli/command/v7/shared" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // CFPushApp abstracts the push functionality form the CLI library type CFPushApp struct { - pushCommand *v6.PushCommand + pushCommand *v7.PushCommand flagContext flags.FlagContext deps commandregistry.Dependency config *CFPushAppConfig - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // CFPushAppConfig is the configuration used @@ -116,9 +114,8 @@ func (p *PushError) Error() string { } // Constructor returns a CFPush based on the supplied config -func Constructor(config *CFPushAppConfig, portalProxy interfaces.PortalProxy) CFPush { - - pushCmd := &v6.PushCommand{} +func Constructor(config *CFPushAppConfig, portalProxy api.PortalProxy) CFPush { + pushCmd := &v7.PushCommand{} cfPush := &CFPushApp{ pushCommand: pushCmd, config: config, @@ -134,7 +131,6 @@ func (c *CFPushApp) init(config *CFPushAppConfig) error { // Init initializes the push operation with the specified application directory and manifest path func (c *CFPushApp) Init(appDir string, manifestPath string, overrides CFPushAppOverrides) error { - // App name if len(overrides.Name) > 0 { c.pushCommand.OptionalArgs = flag.OptionalAppName{ @@ -150,18 +146,13 @@ func (c *CFPushApp) Init(appDir string, manifestPath string, overrides CFPushApp // Start Command if len(overrides.StartCmd) > 0 { - c.pushCommand.Command = flag.Command{} - err := c.pushCommand.Command.UnmarshalFlag(overrides.StartCmd) + c.pushCommand.StartCommand = flag.Command{} + err := c.pushCommand.StartCommand.UnmarshalFlag(overrides.StartCmd) if err != nil { return err } } - // Domain - if len(overrides.Domain) > 0 { - c.pushCommand.Domain = overrides.Domain - } - // HealthCheckType if len(overrides.HealthCheckType) > 0 { err := c.pushCommand.HealthCheckType.UnmarshalFlag(overrides.HealthCheckType) @@ -170,11 +161,6 @@ func (c *CFPushApp) Init(appDir string, manifestPath string, overrides CFPushApp } } - // Hostname - if len(overrides.Host) > 0 { - c.pushCommand.Hostname = overrides.Host - } - // App instances if overrides.Instances != nil { c.pushCommand.Instances = flag.Instances{} @@ -183,20 +169,12 @@ func (c *CFPushApp) Init(appDir string, manifestPath string, overrides CFPushApp // Disk Quota if len(overrides.DiskQuota) > 0 { - c.pushCommand.DiskQuota = flag.Megabytes{} - err := c.pushCommand.DiskQuota.UnmarshalFlag(overrides.DiskQuota) - if err != nil { - return err - } + c.pushCommand.Disk = overrides.DiskQuota } // Memory Quota if len(overrides.MemQuota) > 0 { - c.pushCommand.Memory = flag.Megabytes{} - err := c.pushCommand.Memory.UnmarshalFlag(overrides.MemQuota) - if err != nil { - return err - } + c.pushCommand.Memory = overrides.MemQuota } // No Route @@ -210,21 +188,21 @@ func (c *CFPushApp) Init(appDir string, manifestPath string, overrides CFPushApp // Route path if len(overrides.Path) > 0 { - c.pushCommand.RoutePath = flag.V6RoutePath{} - err := c.pushCommand.RoutePath.UnmarshalFlag(overrides.Path) - if err != nil { - return err - } + c.pushCommand.AppPath = flag.PathWithExistenceCheck(overrides.Path) } // Stack if len(overrides.Stack) > 0 { - c.pushCommand.StackName = overrides.Stack + c.pushCommand.Stack = overrides.Stack } // Health check time if overrides.Time != nil { - c.pushCommand.HealthCheckTimeout = uint64(*overrides.Time) + c.pushCommand.HealthCheckTimeout = flag.PositiveInteger{} + err := c.pushCommand.HealthCheckTimeout.UnmarshalFlag(strconv.Itoa(int(*overrides.Time))) + if err != nil { + return err + } } // Docker image @@ -243,7 +221,7 @@ func (c *CFPushApp) Init(appDir string, manifestPath string, overrides CFPushApp } // Manifest path - c.pushCommand.PathToManifest = flag.PathWithExistenceCheck(manifestPath) + c.pushCommand.PathToManifest = flag.ManifestPathWithExistenceCheck(manifestPath) return nil } @@ -257,7 +235,6 @@ func (c *CFPushApp) setConfig(config *configv3.Config) error { // Run performs the actual push func (c *CFPushApp) Run(msgSender DeployAppMessageSender, clientWebsocket *websocket.Conn) error { - // Get a CF Config config, err := configv3.LoadConfig() if err != nil { @@ -285,7 +262,7 @@ func (c *CFPushApp) Run(msgSender DeployAppMessageSender, clientWebsocket *webso defer commandUI.FlushDeferred() err = c.setup(config, commandUI, msgSender, clientWebsocket) - //err = c.pushCommand.Setup(config, commandUI) + // err = c.pushCommand.Setup(config, commandUI) if err != nil { return handleError(err, *commandUI) } @@ -316,7 +293,7 @@ func (c *CFPushApp) setup(config command.Config, ui command.UI, msgSender Deploy sharedActor := sharedaction.NewActor(config) cmd.SharedActor = sharedActor - ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui) + ccClient, uaaClient, routingClient, err := shared.GetNewClientsAndConnectToCF(config, ui, ccversion.MinSupportedClientVersionV8) if err != nil { return err } @@ -330,26 +307,14 @@ func (c *CFPushApp) setup(config command.Config, ui command.UI, msgSender Deploy ccClient.WrapConnection(pushConnectionWrapper) - ccClientV3, _, err := sharedV3.NewV3BasedClients(config, ui, true) + ccClientV3 := shared.NewWrappedCloudControllerClient(config, ui, pushConnectionWrapper) if err != nil { return err } - v2Actor := v2action.NewActor(ccClient, uaaClient, config) - v3Actor := v3action.NewActor(ccClientV3, config, sharedActor, nil) - - stratosV2Actor := cfV2Actor{ - wrapped: v2Actor, - msgSender: msgSender, - clientWebsocket: clientWebsocket, - } - - cmd.RestartActor = v2Actor - cmd.Actor = pushaction.NewActor(stratosV2Actor, v3Actor, sharedActor) - - cmd.ApplicationSummaryActor = v2v3action.NewActor(v2Actor, v3Actor) + v7Actor := v7action.NewActor(ccClientV3, config, sharedActor, uaaClient, routingClient, clock.NewClock()) - cmd.NOAAClient = shared.NewNOAAClient(ccClient.DopplerEndpoint(), config, uaaClient, ui) + cmd.Actor = v7Actor cmd.ProgressBar = progressbar.NewProgressBar() return nil diff --git a/src/jetstream/plugins/cfappssh/app_ssh.go b/src/jetstream/plugins/cfappssh/app_ssh.go index e99e33ab05..fad31dd158 100644 --- a/src/jetstream/plugins/cfappssh/app_ssh.go +++ b/src/jetstream/plugins/cfappssh/app_ssh.go @@ -11,7 +11,7 @@ import ( "net/url" "time" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/gorilla/websocket" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" @@ -73,7 +73,7 @@ func (cfAppSsh *CFAppSSH) appSSH(c echo.Context) error { return sendSSHError("Can not get Cloud Foundry info") } - cfInfo, found := info.(interfaces.V2Info) + cfInfo, found := info.(api.V2Info) if !found { return sendSSHError("Can not get Cloud Foundry info") } @@ -123,7 +123,7 @@ func (cfAppSsh *CFAppSSH) appSSH(c echo.Context) error { defer connection.Close() // Upgrade the web socket - ws, pingTicker, err := interfaces.UpgradeToWebSocket(c) + ws, pingTicker, err := api.UpgradeToWebSocket(c) if err != nil { return err } diff --git a/src/jetstream/plugins/cfappssh/main.go b/src/jetstream/plugins/cfappssh/main.go index 807d86f63c..8afc6839f5 100644 --- a/src/jetstream/plugins/cfappssh/main.go +++ b/src/jetstream/plugins/cfappssh/main.go @@ -3,37 +3,37 @@ package cfappssh import ( "errors" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" ) // Module init will register plugin func init() { - interfaces.AddPlugin("cfappssh", []string{"cloudfoundry"}, Init) + api.AddPlugin("cfappssh", []string{"cloudfoundry"}, Init) } // CFAppSSH - Plugin to allow SSH into an application instance type CFAppSSH struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // Init creates a new CFAppSSH -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { return &CFAppSSH{portalProxy: portalProxy}, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (CFAppSSH *CFAppSSH) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (CFAppSSH *CFAppSSH) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (CFAppSSH *CFAppSSH) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (CFAppSSH *CFAppSSH) GetEndpointPlugin() (api.EndpointPlugin, error) { return nil, errors.New("Not implemented") } // GetRoutePlugin gets the route plugin for this plugin -func (CFAppSSH *CFAppSSH) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (CFAppSSH *CFAppSSH) GetRoutePlugin() (api.RoutePlugin, error) { return CFAppSSH, nil } diff --git a/src/jetstream/plugins/cloudfoundry/cf_websocket_streams.go b/src/jetstream/plugins/cloudfoundry/cf_websocket_streams.go index ba2ca95bd5..df7911eb32 100644 --- a/src/jetstream/plugins/cloudfoundry/cf_websocket_streams.go +++ b/src/jetstream/plugins/cloudfoundry/cf_websocket_streams.go @@ -1,17 +1,20 @@ package cloudfoundry import ( + "context" "crypto/tls" "encoding/json" "fmt" "net/http" "strconv" + "strings" "time" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry/noaa" - "github.com/cloudfoundry/noaa/consumer" - noaa_errors "github.com/cloudfoundry/noaa/errors" + logcache "code.cloudfoundry.org/go-log-cache" + "code.cloudfoundry.org/go-log-cache/rpc/logcache_v1" + "code.cloudfoundry.org/go-loggregator/v8/rpc/loggregator_v2" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry/noaa/v2/consumer" "github.com/cloudfoundry/sonde-go/events" "github.com/gorilla/websocket" "github.com/labstack/echo/v4" @@ -31,26 +34,26 @@ var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } -func (c CloudFoundrySpecification) appStream(echoContext echo.Context) error { +func (c *CloudFoundrySpecification) appStream(echoContext echo.Context) error { return c.commonStreamHandler(echoContext, appStreamHandler) } -func (c CloudFoundrySpecification) firehose(echoContext echo.Context) error { +func (c *CloudFoundrySpecification) firehose(echoContext echo.Context) error { return c.commonStreamHandler(echoContext, firehoseStreamHandler) } -func (c CloudFoundrySpecification) appFirehose(echoContext echo.Context) error { +func (c *CloudFoundrySpecification) appFirehose(echoContext echo.Context) error { return c.commonStreamHandler(echoContext, appFirehoseStreamHandler) } -func (c CloudFoundrySpecification) commonStreamHandler(echoContext echo.Context, bespokeStreamHandler func(echo.Context, *AuthorizedConsumer, *websocket.Conn) error) error { +func (c *CloudFoundrySpecification) commonStreamHandler(echoContext echo.Context, bespokeStreamHandler func(echo.Context, *AuthorizedConsumer, *websocket.Conn) error) error { ac, err := c.openNoaaConsumer(echoContext) if err != nil { return err } defer ac.consumer.Close() - clientWebSocket, pingTicker, err := interfaces.UpgradeToWebSocket(echoContext) + clientWebSocket, pingTicker, err := api.UpgradeToWebSocket(echoContext) if err != nil { return err } @@ -67,13 +70,14 @@ func (c CloudFoundrySpecification) commonStreamHandler(echoContext echo.Context, } type AuthorizedConsumer struct { - consumer *consumer.Consumer - authToken string - refreshToken func() error + consumer *consumer.Consumer + logCacheClient *logcache.Client + authToken string + refreshToken func() error } // Refresh the Authorization token if needed and create a new Noaa consumer -func (c CloudFoundrySpecification) openNoaaConsumer(echoContext echo.Context) (*AuthorizedConsumer, error) { +func (c *CloudFoundrySpecification) openNoaaConsumer(echoContext echo.Context) (*AuthorizedConsumer, error) { ac := &AuthorizedConsumer{} @@ -118,32 +122,75 @@ func (c CloudFoundrySpecification) openNoaaConsumer(echoContext echo.Context) (* log.Debugf("Creating Noaa consumer for Doppler endpoint %s", dopplerAddress) ac.consumer = consumer.New(dopplerAddress, &tls.Config{InsecureSkipVerify: true}, http.ProxyFromEnvironment) + //Open a LogCache client to the log cache endpoint + logCacheUrl := strings.Replace(cnsiRecord.APIEndpoint.String(), "api.sys.", "log-cache.sys.", 1) + log.Debugf("Creating LogCache client for endpoint %s", logCacheUrl) + ac.logCacheClient = logcache.NewClient(logCacheUrl, logcache.WithHTTPClient( + NewLogCacheHttpClient(func() string { + return ac.authToken + })), + ) + return ac, nil } -// Attempts to get the recent logs, if we get an unauthorized error we will refresh the auth token and retry once -func getRecentLogs(ac *AuthorizedConsumer, cnsiGUID, appGUID string) ([]*events.LogMessage, error) { - log.Debug("getRecentLogs") - messages, err := ac.consumer.RecentLogs(appGUID, ac.authToken) - if err != nil { - errorPattern := "Failed to get recent messages for App %s on CNSI %s [%v]" - if _, ok := err.(*noaa_errors.UnauthorizedError); ok { - // If unauthorized, we may need to refresh our Auth token - // Note: annoyingly, older versions of CF also send back "401 - Unauthorized" when the app doesn't exist... - // This means we sometimes end up here even when our token is legit - if err := ac.refreshToken(); err != nil { - return nil, fmt.Errorf(errorPattern, appGUID, cnsiGUID, err) - } - messages, err = ac.consumer.RecentLogs(appGUID, ac.authToken) +// Attempts to relay the recent logs, if we get an unauthorized error we will refresh the auth token and retry once +func relayRecentLogsFromCache(relay func(msg *events.LogMessage), ac *AuthorizedConsumer, appGUID string) error { + logLineRequestCount := 1000 + var envelopes []*loggregator_v2.Envelope + var err error + + for logLineRequestCount >= 1 { + envelopes, err = ac.logCacheClient.Read( + context.Background(), + appGUID, + time.Time{}, + logcache.WithEnvelopeTypes(logcache_v1.EnvelopeType_LOG), + logcache.WithLimit(logLineRequestCount), + ) + if err != nil && err.Error() == "unexpected status code 429" { + err = ac.refreshToken() if err != nil { - msg := fmt.Sprintf(errorPattern, appGUID, cnsiGUID, err) - return nil, echo.NewHTTPError(http.StatusUnauthorized, msg) + return fmt.Errorf("cannot refresh token when reading from cache again cause %v", err) } - } else { - return nil, fmt.Errorf(errorPattern, appGUID, cnsiGUID, err) + err = nil + continue } + if err == nil || err.Error() != "unexpected status code 429" { + break + } + logLineRequestCount /= 2 + } + if err != nil { + return fmt.Errorf("failed to retrieve logs from Log Cache: %s", err) } - return messages, nil + + for _, envelope := range envelopes { + logEnvelope, ok := envelope.GetMessage().(*loggregator_v2.Envelope_Log) + if !ok { + continue + } + log := logEnvelope.Log + relay(&events.LogMessage{ + Message: log.Payload, + MessageType: func(t loggregator_v2.Log_Type) *events.LogMessage_MessageType { + var r events.LogMessage_MessageType + switch t { + case loggregator_v2.Log_OUT: + r = events.LogMessage_OUT + case loggregator_v2.Log_ERR: + r = events.LogMessage_ERR + } + return &r + }(log.Type), + Timestamp: func(i int64) *int64 { return &i }(envelope.GetTimestamp()), + AppId: &appGUID, + SourceType: func(s string) *string { return &s }(envelope.GetTags()["source_type"]), + SourceInstance: &envelope.InstanceId, + }) + } + + return err } func drainErrors(errorChan <-chan error) { @@ -184,11 +231,6 @@ func appStreamHandler(echoContext echo.Context, ac *AuthorizedConsumer, clientWe appGUID := echoContext.Param("appGuid") log.Infof("Received request for log stream for App ID: %s - in CNSI: %s", appGUID, cnsiGUID) - - messages, err := getRecentLogs(ac, cnsiGUID, appGUID) - if err != nil { - return err - } // Reusable closure to pump messages from Noaa to the client WebSocket // N.B. We convert protobuf messages to JSON for ease of use in the frontend relayLogMsg := func(msg *events.LogMessage) { @@ -202,9 +244,15 @@ func appStreamHandler(echoContext echo.Context, ac *AuthorizedConsumer, clientWe } } - // Send the recent messages, sorted in Chronological order - for _, msg := range noaa.SortRecent(messages) { - relayLogMsg(msg) + /* + * Split into two parts… + * 1. LogCache Read for recent logs - inspired by CF CLI in order to replace noaa RecentLogs + * https://github.com/cloudfoundry/stratos/issues/5037 + * 2. Stream subsequent logs as before + */ + err := relayRecentLogsFromCache(relayLogMsg, ac, appGUID) + if err != nil { + log.Errorf("Cannot relay recent logs via cache cause %v", err) } msgChan, errorChan := ac.consumer.TailingLogs(appGUID, ac.authToken) diff --git a/src/jetstream/plugins/cloudfoundry/log_cache_client.go b/src/jetstream/plugins/cloudfoundry/log_cache_client.go new file mode 100644 index 0000000000..31d488530b --- /dev/null +++ b/src/jetstream/plugins/cloudfoundry/log_cache_client.go @@ -0,0 +1,20 @@ +package cloudfoundry + +import "net/http" + +type LogCacheHttpClient struct { + httpClient *http.Client + accessToken func() string +} + +func NewLogCacheHttpClient(accessToken func() string) *LogCacheHttpClient { + return &LogCacheHttpClient{ + httpClient: http.DefaultClient, + accessToken: accessToken, + } +} + +func (c *LogCacheHttpClient) Do(req *http.Request) (*http.Response, error) { + req.Header.Set("Authorization", c.accessToken()) + return c.httpClient.Do(req) +} diff --git a/src/jetstream/plugins/cloudfoundry/main.go b/src/jetstream/plugins/cloudfoundry/main.go index 8b78c9d780..e0c33341b1 100644 --- a/src/jetstream/plugins/cloudfoundry/main.go +++ b/src/jetstream/plugins/cloudfoundry/main.go @@ -10,19 +10,19 @@ import ( "errors" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) // Module init will register plugin func init() { - interfaces.AddPlugin("cloudfoundry", nil, Init) + api.AddPlugin("cloudfoundry", nil, Init) } // CloudFoundrySpecification - Plugin to support Cloud Foundry endpoint type type CloudFoundrySpecification struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy endpointType string } @@ -32,22 +32,22 @@ const ( ) // Init creates a new CloudFoundrySpecification -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { return &CloudFoundrySpecification{portalProxy: portalProxy, endpointType: EndpointType}, nil } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (c *CloudFoundrySpecification) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (c *CloudFoundrySpecification) GetEndpointPlugin() (api.EndpointPlugin, error) { return c, nil } // GetRoutePlugin gets the route plugin for this plugin -func (c *CloudFoundrySpecification) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (c *CloudFoundrySpecification) GetRoutePlugin() (api.RoutePlugin, error) { return c, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (c *CloudFoundrySpecification) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (c *CloudFoundrySpecification) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented!") } @@ -60,25 +60,25 @@ func (c *CloudFoundrySpecification) Register(echoContext echo.Context) error { return c.portalProxy.RegisterEndpoint(echoContext, c.Info) } -func (c *CloudFoundrySpecification) Validate(userGUID string, cnsiRecord interfaces.CNSIRecord, tokenRecord interfaces.TokenRecord) error { +func (c *CloudFoundrySpecification) Validate(userGUID string, cnsiRecord api.CNSIRecord, tokenRecord api.TokenRecord) error { return nil } -func (c *CloudFoundrySpecification) Connect(ec echo.Context, cnsiRecord interfaces.CNSIRecord, userId string) (*interfaces.TokenRecord, bool, error) { +func (c *CloudFoundrySpecification) Connect(ec echo.Context, cnsiRecord api.CNSIRecord, userId string) (*api.TokenRecord, bool, error) { log.Info("CloudFoundry Connect...") - params := new(interfaces.LoginToCNSIParams) - err := interfaces.BindOnce(params, ec) + params := new(api.LoginToCNSIParams) + err := api.BindOnce(params, ec) if err != nil { return nil, false, err } connectType := params.ConnectType if len(connectType) == 0 { - connectType = interfaces.AuthConnectTypeCreds + connectType = api.AuthConnectTypeCreds } - if connectType != interfaces.AuthConnectTypeCreds { + if connectType != api.AuthConnectTypeCreds { return nil, false, errors.New("Only username/password accepted for Cloud Foundry endpoints") } cfAdmin := false @@ -137,7 +137,7 @@ func (c *CloudFoundrySpecification) cfLoginHook(context echo.Context) error { } if c.portalProxy.GetConfig().CloudFoundryInfo == nil { - c.portalProxy.GetConfig().CloudFoundryInfo = &interfaces.CFInfo{} + c.portalProxy.GetConfig().CloudFoundryInfo = &api.CFInfo{} } c.portalProxy.GetConfig().CloudFoundryInfo.EndpointGUID = cfCnsi.GUID @@ -170,12 +170,12 @@ func (c *CloudFoundrySpecification) cfLoginHook(context echo.Context) error { return nil } -func (c *CloudFoundrySpecification) fetchAutoRegisterEndpoint() (string, interfaces.CNSIRecord, error) { +func (c *CloudFoundrySpecification) fetchAutoRegisterEndpoint() (string, api.CNSIRecord, error) { cfAPI := c.portalProxy.GetConfig().AutoRegisterCFUrl cfAPI = strings.TrimRight(cfAPI, "/") if cfAPI == "" { - return "", interfaces.CNSIRecord{}, nil + return "", api.CNSIRecord{}, nil } // Error is populated if there was an error OR there was no record cfCnsi, err := c.portalProxy.GetAdminCNSIRecordByEndpoint(cfAPI) @@ -199,10 +199,10 @@ func (c *CloudFoundrySpecification) AddSessionGroupRoutes(echoGroup *echo.Group) echoGroup.GET("/:cnsiGuid/apps/:appGuid/appFirehose", c.appFirehose) } -func (c *CloudFoundrySpecification) Info(apiEndpoint string, skipSSLValidation bool) (interfaces.CNSIRecord, interface{}, error) { +func (c *CloudFoundrySpecification) Info(apiEndpoint string, skipSSLValidation bool) (api.CNSIRecord, interface{}, error) { log.Debug("Info") - var v2InfoResponse interfaces.V2Info - var newCNSI interfaces.CNSIRecord + var v2InfoResponse api.V2Info + var newCNSI api.CNSIRecord newCNSI.CNSIType = EndpointType @@ -239,5 +239,5 @@ func (c *CloudFoundrySpecification) Info(apiEndpoint string, skipSSLValidation b return newCNSI, v2InfoResponse, nil } -func (c *CloudFoundrySpecification) UpdateMetadata(info *interfaces.Info, userGUID string, echoContext echo.Context) { +func (c *CloudFoundrySpecification) UpdateMetadata(info *api.Info, userGUID string, echoContext echo.Context) { } diff --git a/src/jetstream/plugins/cloudfoundryhosting/main.go b/src/jetstream/plugins/cloudfoundryhosting/main.go index 8b128ee9d3..46cf52fa31 100644 --- a/src/jetstream/plugins/cloudfoundryhosting/main.go +++ b/src/jetstream/plugins/cloudfoundryhosting/main.go @@ -15,7 +15,7 @@ import ( uuid "github.com/satori/go.uuid" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // Constants @@ -32,22 +32,22 @@ const ( // Module init will register plugin func init() { - interfaces.AddPlugin("cloudfoundryhosting", nil, Init) + api.AddPlugin("cloudfoundryhosting", nil, Init) } // CFHosting is a plugin to configure Stratos when hosted in Cloud Foundry type CFHosting struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy endpointType string } // Package initialization func init() { - interfaces.RegisterJetstreamConfigPlugin(ConfigInit) + api.RegisterJetstreamConfigPlugin(ConfigInit) } // ConfigInit updates the config if needed -func ConfigInit(envLookup *env.VarSet, jetstreamConfig *interfaces.PortalConfig) { +func ConfigInit(envLookup *env.VarSet, jetstreamConfig *api.PortalConfig) { // Check we are deployed in Cloud Foundry if !envLookup.IsSet(VCapApplication) { @@ -91,13 +91,13 @@ func ConfigInit(envLookup *env.VarSet, jetstreamConfig *interfaces.PortalConfig) } // Init creates a new CFHosting plugin -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { return &CFHosting{portalProxy: portalProxy}, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (ch *CFHosting) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (ch *CFHosting) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { if ch.portalProxy.Env().IsSet(VCapApplication) { return ch, nil } @@ -105,12 +105,12 @@ func (ch *CFHosting) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (ch *CFHosting) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (ch *CFHosting) GetEndpointPlugin() (api.EndpointPlugin, error) { return nil, errors.New("Not implemented") } // GetRoutePlugin gets the route plugin for this plugin -func (ch *CFHosting) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (ch *CFHosting) GetRoutePlugin() (api.RoutePlugin, error) { return nil, errors.New("Not implemented") } @@ -124,7 +124,7 @@ func (ch *CFHosting) Init() error { // Record that we are deployed in Cloud Foundry ch.portalProxy.GetConfig().IsCloudFoundry = true - ch.portalProxy.GetConfig().ConsoleConfig = new(interfaces.ConsoleConfig) + ch.portalProxy.GetConfig().ConsoleConfig = new(api.ConsoleConfig) // We are using the CF UAA - so the Console must use the same Client and Secret as CF ch.portalProxy.GetConfig().ConsoleConfig.ConsoleClient = ch.portalProxy.GetConfig().CFClient @@ -153,7 +153,7 @@ func (ch *CFHosting) Init() error { } // Get the cf_api value from the JSON - var appData interfaces.VCapApplicationData + var appData api.VCapApplicationData vCapApp, _ := ch.portalProxy.Env().Lookup(VCapApplication) data := []byte(vCapApp) err := json.Unmarshal(data, &appData) @@ -234,7 +234,7 @@ func (ch *CFHosting) Init() error { // Store the space and id of the Console application - we can use these to prevent stop/delete in the front-end if ch.portalProxy.GetConfig().CloudFoundryInfo == nil { - ch.portalProxy.GetConfig().CloudFoundryInfo = &interfaces.CFInfo{} + ch.portalProxy.GetConfig().CloudFoundryInfo = &api.CFInfo{} } ch.portalProxy.GetConfig().CloudFoundryInfo.SpaceGUID = appData.SpaceID ch.portalProxy.GetConfig().CloudFoundryInfo.AppGUID = appData.ApplicationID @@ -267,7 +267,7 @@ func (ch *CFHosting) EchoMiddleware(h echo.HandlerFunc) echo.HandlerFunc { return h(c) } - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "X-Forwarded-Proto not found and is required", "X-Forwarded-Proto not found and is required", diff --git a/src/jetstream/plugins/desktop/cloudfoundry.go b/src/jetstream/plugins/desktop/cloudfoundry.go index 797c1882c9..f15f6bf04a 100644 --- a/src/jetstream/plugins/desktop/cloudfoundry.go +++ b/src/jetstream/plugins/desktop/cloudfoundry.go @@ -9,7 +9,7 @@ import ( "os/user" "path/filepath" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // CFConfigFile represents the data we need for CF config file @@ -26,7 +26,7 @@ type CFConfigFile struct { } // ListCloudFoundry will list Cloud Foundry endpoints configured locally (can be only one) -func ListCloudFoundry() ([]*interfaces.CNSIRecord, error) { +func ListCloudFoundry() ([]*api.CNSIRecord, error) { cfg, apiEndpoint, err := readCFFile() if err != nil { return nil, err @@ -37,8 +37,8 @@ func ListCloudFoundry() ([]*interfaces.CNSIRecord, error) { return nil, nil } - eps := make([]*interfaces.CNSIRecord, 1) - eps[0] = &interfaces.CNSIRecord{ + eps := make([]*api.CNSIRecord, 1) + eps[0] = &api.CNSIRecord{ GUID: getEndpointGUID(cfg.APIEndpoint), Name: "CF", CNSIType: "cf", @@ -56,7 +56,7 @@ func ListCloudFoundry() ([]*interfaces.CNSIRecord, error) { } // ListConnectedCloudFoundry will list Cloud Foundry endpoints configured locally (can be only one) -func ListConnectedCloudFoundry() ([]*interfaces.ConnectedEndpoint, error) { +func ListConnectedCloudFoundry() ([]*api.ConnectedEndpoint, error) { cfg, apiEndpoint, err := readCFFile() if err != nil { return nil, err @@ -68,8 +68,8 @@ func ListConnectedCloudFoundry() ([]*interfaces.ConnectedEndpoint, error) { } //TODO: Token expiry - eps := make([]*interfaces.ConnectedEndpoint, 1) - eps[0] = &interfaces.ConnectedEndpoint{ + eps := make([]*api.ConnectedEndpoint, 1) + eps[0] = &api.ConnectedEndpoint{ GUID: getEndpointGUID(cfg.APIEndpoint), Name: "CF", CNSIType: "cf", @@ -161,7 +161,7 @@ func IsLocalCloudFoundry(cnsiGUID string) bool { return record != nil } -func FindLocalCloudFoundry(cnsiGUID string) (*interfaces.CNSIRecord, error) { +func FindLocalCloudFoundry(cnsiGUID string) (*api.CNSIRecord, error) { local, err := ListCloudFoundry() if err != nil { diff --git a/src/jetstream/plugins/desktop/endpoints.go b/src/jetstream/plugins/desktop/endpoints.go index b7feb96efa..ac267b5776 100644 --- a/src/jetstream/plugins/desktop/endpoints.go +++ b/src/jetstream/plugins/desktop/endpoints.go @@ -4,16 +4,16 @@ import ( "crypto/sha1" "encoding/base64" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" ) type DesktopEndpointStore struct { - portalProxy interfaces.PortalProxy - store interfaces.EndpointRepository + portalProxy api.PortalProxy + store api.EndpointRepository } -func (d *DesktopEndpointStore) List(encryptionKey []byte) ([]*interfaces.CNSIRecord, error) { +func (d *DesktopEndpointStore) List(encryptionKey []byte) ([]*api.CNSIRecord, error) { local, err := ListCloudFoundry() db, err := d.store.List(encryptionKey) @@ -21,14 +21,14 @@ func (d *DesktopEndpointStore) List(encryptionKey []byte) ([]*interfaces.CNSIRec return merged, err } -func (d *DesktopEndpointStore) ListByUser(userGUID string) ([]*interfaces.ConnectedEndpoint, error) { +func (d *DesktopEndpointStore) ListByUser(userGUID string) ([]*api.ConnectedEndpoint, error) { local, err := ListConnectedCloudFoundry() db, err := d.store.ListByUser(userGUID) merged := mergeConnectedEndpoints(db, local) return merged, err } -func (d *DesktopEndpointStore) Find(guid string, encryptionKey []byte) (interfaces.CNSIRecord, error) { +func (d *DesktopEndpointStore) Find(guid string, encryptionKey []byte) (api.CNSIRecord, error) { record, _ := FindLocalCloudFoundry(guid) if record != nil { return *record, nil @@ -37,18 +37,18 @@ func (d *DesktopEndpointStore) Find(guid string, encryptionKey []byte) (interfac return d.store.Find(guid, encryptionKey) } -func (d *DesktopEndpointStore) FindByAPIEndpoint(endpoint string, encryptionKey []byte) (interfaces.CNSIRecord, error) { +func (d *DesktopEndpointStore) FindByAPIEndpoint(endpoint string, encryptionKey []byte) (api.CNSIRecord, error) { return d.store.FindByAPIEndpoint(endpoint, encryptionKey) } -func (d *DesktopEndpointStore) ListByAPIEndpoint(endpoint string, encryptionKey []byte) ([]*interfaces.CNSIRecord, error) { +func (d *DesktopEndpointStore) ListByAPIEndpoint(endpoint string, encryptionKey []byte) ([]*api.CNSIRecord, error) { local, err := ListCloudFoundry() db, err := d.store.ListByAPIEndpoint(endpoint, encryptionKey) merged := mergeEndpoints(db, local) return merged, err } -func (d *DesktopEndpointStore) ListByCreator(userGUID string, encryptionKey []byte) ([]*interfaces.CNSIRecord, error) { +func (d *DesktopEndpointStore) ListByCreator(userGUID string, encryptionKey []byte) ([]*api.CNSIRecord, error) { local, err := ListCloudFoundry() db, err := d.store.ListByCreator(userGUID, encryptionKey) merged := mergeEndpoints(db, local) @@ -64,11 +64,11 @@ func (d *DesktopEndpointStore) Delete(guid string) error { return d.store.Delete(guid) } -func (d *DesktopEndpointStore) Save(guid string, cnsiRecord interfaces.CNSIRecord, encryptionKey []byte) error { +func (d *DesktopEndpointStore) Save(guid string, cnsiRecord api.CNSIRecord, encryptionKey []byte) error { return d.store.Save(guid, cnsiRecord, encryptionKey) } -func (d *DesktopEndpointStore) Update(endpoint interfaces.CNSIRecord, encryptionKey []byte) error { +func (d *DesktopEndpointStore) Update(endpoint api.CNSIRecord, encryptionKey []byte) error { return d.store.Update(endpoint, encryptionKey) } @@ -76,12 +76,12 @@ func (d *DesktopEndpointStore) UpdateMetadata(guid string, metadata string) erro return d.store.UpdateMetadata(guid, metadata) } -func (d *DesktopEndpointStore) SaveOrUpdate(endpoint interfaces.CNSIRecord, encryptionKey []byte) error { +func (d *DesktopEndpointStore) SaveOrUpdate(endpoint api.CNSIRecord, encryptionKey []byte) error { return d.store.SaveOrUpdate(endpoint, encryptionKey) } // Merge endpoints, over-riding any in first with those in second -func mergeEndpoints(first, second []*interfaces.CNSIRecord) []*interfaces.CNSIRecord { +func mergeEndpoints(first, second []*api.CNSIRecord) []*api.CNSIRecord { if first == nil { return second @@ -97,7 +97,7 @@ func mergeEndpoints(first, second []*interfaces.CNSIRecord) []*interfaces.CNSIRe } // Filter the first to remove entries in second - merged := make([]*interfaces.CNSIRecord, 0) + merged := make([]*api.CNSIRecord, 0) for _, endpoint := range first { if _, ok := urls[endpoint.APIEndpoint.String()]; !ok { merged = append(merged, endpoint) @@ -111,7 +111,7 @@ func mergeEndpoints(first, second []*interfaces.CNSIRecord) []*interfaces.CNSIRe } // Merge endpoints, over-riding any in first with those in second -func mergeConnectedEndpoints(first, second []*interfaces.ConnectedEndpoint) []*interfaces.ConnectedEndpoint { +func mergeConnectedEndpoints(first, second []*api.ConnectedEndpoint) []*api.ConnectedEndpoint { if first == nil { return second @@ -127,7 +127,7 @@ func mergeConnectedEndpoints(first, second []*interfaces.ConnectedEndpoint) []*i } // Filter the first to ermove entries in second - merged := make([]*interfaces.ConnectedEndpoint, 0) + merged := make([]*api.ConnectedEndpoint, 0) for _, endpoint := range first { if _, ok := urls[endpoint.APIEndpoint.String()]; !ok { merged = append(merged, endpoint) diff --git a/src/jetstream/plugins/desktop/helm/chart.go b/src/jetstream/plugins/desktop/helm/chart.go new file mode 100644 index 0000000000..5bfcc03649 --- /dev/null +++ b/src/jetstream/plugins/desktop/helm/chart.go @@ -0,0 +1,67 @@ +package helm + +import "time" + +type IndexFile struct { + APIVersion string `json:"apiVersion,omitempty"` + Entries map[string][]IndexFileMetadata `json:"entries,omitempty"` +} + +// ChartMaintainer describes a Chart maintainer. +type ChartMaintainer struct { + // Name is a user name or organization name + Name string `json:"name,omitempty"` + // Email is an optional email address to contact the named maintainer + Email string `json:"email,omitempty"` + // URL is an optional URL to an address for the named maintainer + URL string `json:"url,omitempty"` +} + +// ChartMetadata for a Chart file. This models the structure of a Chart.yaml file. +type ChartMetadata struct { + // The name of the chart + Name string `json:"name,omitempty"` + // The URL to a relevant project page, git repo, or contact person + Home string `json:"home,omitempty"` + // Source is the URL to the source code of this chart + Sources []string `json:"sources,omitempty"` + // A SemVer 2 conformant version string of the chart + Version string `json:"version,omitempty"` + // A one-sentence description of the chart + Description string `json:"description,omitempty"` + // A list of string keywords + Keywords []string `json:"keywords,omitempty"` + // A list of name and URL/email address combinations for the maintainer(s) + Maintainers []*ChartMaintainer `json:"maintainers,omitempty"` + // The URL to an icon file. + Icon string `json:"icon,omitempty"` + // The API Version of this chart. + APIVersion string `json:"apiVersion,omitempty"` + // The condition to check to enable chart + Condition string `json:"condition,omitempty"` + // The tags to check to enable chart + Tags string `json:"tags,omitempty"` + // The version of the application enclosed inside of this chart. + AppVersion string `json:"appVersion,omitempty"` + // Whether or not this chart is deprecated + Deprecated bool `json:"deprecated,omitempty"` + // Annotations are additional mappings uninterpreted by Helm, + // made available for inspection by other applications. + Annotations map[string]string `json:"annotations,omitempty"` + // KubeVersion is a SemVer constraint specifying the version of Kubernetes required. + KubeVersion string `json:"kubeVersion,omitempty"` + // Specifies the chart type: application or library + Type string `json:"type,omitempty"` +} + +type IndexFileMetadata struct { + Name string `json:"name,omitempty"` + AppVersion string `json:"appVersion" yaml:"appVersion"` + Description string `json:"description,omitempty"` + Digest string `json:"digest,omitempty"` + Version string `json:"version,omitempty"` + Created time.Time `json:"created"` + Icon string `json:"icon,omitempty"` + Repo Repo `json:"-"` + URLs []string `json:"-" yaml:"urls"` +} diff --git a/src/jetstream/plugins/desktop/helm/endpoints.go b/src/jetstream/plugins/desktop/helm/endpoints.go new file mode 100644 index 0000000000..790e1c63fe --- /dev/null +++ b/src/jetstream/plugins/desktop/helm/endpoints.go @@ -0,0 +1,140 @@ +package helm + +import ( + "crypto/sha1" + "encoding/base64" + "errors" + + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + log "github.com/sirupsen/logrus" +) + +type EndpointStore struct { + portalProxy api.PortalProxy + store api.EndpointRepository +} + +func (d *EndpointStore) List(encryptionKey []byte) ([]*api.CNSIRecord, error) { + local, local_err := ListHelmRepositories() + db, db_err := d.store.List(encryptionKey) + + err := errors.Join(local_err, db_err) + + merged := mergeEndpoints(db, local) + return merged, err +} + +func (d *EndpointStore) ListByUser(userGUID string) ([]*api.ConnectedEndpoint, error) { + local, local_err := ListConnectedKubernetes() + db, db_err := d.store.ListByUser(userGUID) + + err := errors.Join(local_err, db_err) + + merged := mergeConnectedEndpoints(db, local) + return merged, err +} + +func (d *EndpointStore) ListByCreator(userGUID string, encriptionKey []byte) ([]*api.CNSIRecord, error) { + local, list_err := ListHelmRepositories() + db, store_err := d.store.ListByCreator(userGUID, encriptionKey) + + err := errors.Join(list_err, store_err) + + merged := mergeEndpoints(db, local) + return merged, err +} + +func (d *EndpointStore) ListByAPIEndpoint(endpoint string, encriptionKey []byte) ([]*api.CNSIRecord, error) { + local, local_err := ListHelmRepositories() + db, db_err := d.store.ListByAPIEndpoint(endpoint, encriptionKey) + + err := errors.Join(local_err, db_err) + + merged := mergeEndpoints(db, local) + return merged, err +} + +func (d *EndpointStore) Find(guid string, encryptionKey []byte) (api.CNSIRecord, error) { + local, err := ListHelmRepositories() + if err == nil { + for _, ep := range local { + if ep.GUID == guid { + return *ep, nil + } + } + } + + return d.store.Find(guid, encryptionKey) +} + +func (d *EndpointStore) FindByAPIEndpoint(endpoint string, encryptionKey []byte) (api.CNSIRecord, error) { + return d.store.FindByAPIEndpoint(endpoint, encryptionKey) +} + +func (d *EndpointStore) Delete(guid string) error { + return d.store.Delete(guid) +} + +func (d *EndpointStore) Save(guid string, cnsiRecord api.CNSIRecord, encryptionKey []byte) error { + return d.store.Save(guid, cnsiRecord, encryptionKey) +} + +func (d *EndpointStore) Update(endpoint api.CNSIRecord, encryptionKey []byte) error { + return d.store.Update(endpoint, encryptionKey) +} + +func (d *EndpointStore) UpdateMetadata(guid string, metadata string) error { + return d.store.UpdateMetadata(guid, metadata) +} + +func (d *EndpointStore) SaveOrUpdate(endpoint api.CNSIRecord, encryptionKey []byte) error { + return d.store.SaveOrUpdate(endpoint, encryptionKey) +} + +// Merge endpoints, over-riding any in first with those in second +func mergeEndpoints(first, second []*api.CNSIRecord) []*api.CNSIRecord { + urls := make(map[string]bool, 0) + for _, endpoint := range second { + urls[endpoint.APIEndpoint.String()] = true + } + + // Filter the first to remove entries in second + merged := make([]*api.CNSIRecord, 0) + for _, endpoint := range first { + if _, ok := urls[endpoint.APIEndpoint.String()]; !ok { + merged = append(merged, endpoint) + } else { + log.Info("Removed endpoint: ", endpoint.APIEndpoint.String()) + } + } + + merged = append(merged, second...) + return merged +} + +// Merge endpoints, over-riding any in first with those in second +func mergeConnectedEndpoints(first, second []*api.ConnectedEndpoint) []*api.ConnectedEndpoint { + urls := make(map[string]bool, 0) + for _, endpoint := range second { + urls[endpoint.APIEndpoint.String()] = true + } + + // Filter the first to ermove entries in second + merged := make([]*api.ConnectedEndpoint, 0) + for _, endpoint := range first { + if _, ok := urls[endpoint.APIEndpoint.String()]; !ok { + merged = append(merged, endpoint) + } else { + log.Info("Removed endpoint: ", endpoint.APIEndpoint.String()) + } + } + + merged = append(merged, second...) + return merged +} + +func getEndpointGUID(url string) string { + h := sha1.New() + h.Write([]byte(url)) + return base64.RawURLEncoding.EncodeToString(h.Sum(nil)) +} diff --git a/src/jetstream/plugins/desktop/helm/main.go b/src/jetstream/plugins/desktop/helm/main.go new file mode 100644 index 0000000000..fe1e7b3a79 --- /dev/null +++ b/src/jetstream/plugins/desktop/helm/main.go @@ -0,0 +1,60 @@ +package helm + +import ( + "errors" + + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + + log "github.com/sirupsen/logrus" +) + +// Desktop - Desktop hosting for Helm Repositories +type Desktop struct { + portalProxy api.PortalProxy + factory api.StoreFactory + endpointStore EndpointStore + tokenStore TokenStore +} + +var br *Desktop + +// Init performs plugin initialization +func Init(portalProxy api.PortalProxy) error { + + // TODO: Check we are running in desktop environment + + br = &Desktop{ + portalProxy: portalProxy, + } + + // Add ourselves as the endpoint factory + br.factory = br.portalProxy.SetStoreFactory(br) + log.Info("Helm desktop endpoints initialized") + + eStore, endpointStoreError := br.factory.EndpointStore() + tStore, tokenStoreError := br.factory.TokenStore() + + // Use a custom endpoint store that can overlay local Kubernetes endpoints + br.endpointStore = EndpointStore{ + portalProxy: br.portalProxy, + store: eStore, + } + + // Use a custom endpoint store that can overlay local Kubernetes endpoints + br.tokenStore = TokenStore{ + portalProxy: br.portalProxy, + store: tStore, + } + + return errors.Join(endpointStoreError, tokenStoreError) +} + +// EndpointStore gets store for obtaining endpoint information +func (br *Desktop) EndpointStore() (api.EndpointRepository, error) { + return &br.endpointStore, nil +} + +// TokenStore gets store for obtaining endpoint information +func (br *Desktop) TokenStore() (api.TokenRepository, error) { + return &br.tokenStore, nil +} diff --git a/src/jetstream/plugins/desktop/helm/repositories.go b/src/jetstream/plugins/desktop/helm/repositories.go new file mode 100644 index 0000000000..2bcfa76502 --- /dev/null +++ b/src/jetstream/plugins/desktop/helm/repositories.go @@ -0,0 +1,518 @@ +package helm + +import ( + "archive/tar" + "compress/gzip" + b64 "encoding/base64" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "os" + "os/user" + "path/filepath" + "runtime" + "strconv" + "strings" + + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/labstack/echo/v4" + log "github.com/sirupsen/logrus" + + yaml "gopkg.in/yaml.v2" +) + +// CFConfigFile represents the data we need for CF config file +type CFConfigFile struct { + APIEndpoint string `json:"Target"` + AuthorizationEndpoint string `json:"AuthorizationEndpoint"` + TokenEndpoint string `json:"UaaEndpoint"` + DopplerLoggingEndpoint string `json:"DopplerEndPoint"` + SkipSSLValidation bool `json:"SSLDisabled"` + ClientID string `json:"UAAOAuthClient"` + ClientSecret string `json:"UAAOAuthClientSecret"` + AccessToken string `json:"AccessToken"` + RefreshToken string `json:"RefreshToken"` +} + +type helmRepositoryInfo struct { + Name string `yaml:"name"` + Insecure bool `yaml:"insecure_skip_tls_verify"` + URL string `yaml:"url"` +} + +type helmRepositoriesFile struct { + APIVersion string `yaml:"apiVersion"` + Repositories []helmRepositoryInfo `yaml:"repositories"` +} + +// ListHelmRepositories will list Helm Repositories configured locally +func ListHelmRepositories() ([]*api.CNSIRecord, error) { + + cfg, err := readHelmRepoFile() + if err != nil { + log.Errorf("Could not read helm repository config file: %s", err) + return nil, err + } + + // Add an endpoint for each cluster + var eps []*api.CNSIRecord + for _, repo := range cfg.Repositories { + apiEndpoint, err := url.Parse(repo.URL) + if err == nil { + eps = append(eps, &api.CNSIRecord{ + GUID: getEndpointGUID(repo.URL), + Name: repo.Name, + CNSIType: "helm", + APIEndpoint: apiEndpoint, + AuthorizationEndpoint: "", + DopplerLoggingEndpoint: "", + TokenEndpoint: "", + SkipSSLValidation: repo.Insecure, + SSOAllowed: false, + ClientId: "", + ClientSecret: "", + Local: true, + SubType: "repo", + }) + } + } + + u, _ := url.Parse("https://artifacthub.io") + + // Add Artifact Hub in + eps = append(eps, &api.CNSIRecord{ + GUID: getEndpointGUID("https://artifacthub.io"), + Name: "Artifact Hub", + CNSIType: "helm", + APIEndpoint: u, + AuthorizationEndpoint: "", + DopplerLoggingEndpoint: "", + TokenEndpoint: "", + SkipSSLValidation: false, + SSOAllowed: false, + ClientId: "", + ClientSecret: "", + Local: true, + SubType: "hub", + }) + + return eps, nil +} + +// ListConnectedCloudFoundry will list Cloud Foundry endpoints configured locally (can be only one) +func ListConnectedKubernetes() ([]*api.ConnectedEndpoint, error) { + + cfg, err := readHelmRepoFile() + if err != nil { + log.Errorf("Could not read kube config file: %s", err) + return nil, err + } + + // Add an endpoint for each cluster + var eps []*api.ConnectedEndpoint + for _, repo := range cfg.Repositories { + apiEndpoint, err := url.Parse(repo.URL) + if err == nil { + eps = append(eps, &api.ConnectedEndpoint{ + GUID: getEndpointGUID(repo.URL), + Name: repo.Name, + CNSIType: "helm", + APIEndpoint: apiEndpoint, + AuthorizationEndpoint: "", + DopplerLoggingEndpoint: "", + Account: "local", + TokenExpiry: 20000, + SkipSSLValidation: repo.Insecure, + Local: true, + }) + } + } + + return eps, nil +} + +func readHelmRepoFile() (*helmRepositoriesFile, error) { + + cfgFolder, err := getConfigFolder() + if err != nil { + return nil, err + } + helmFile := filepath.Join(cfgFolder, "repositories.yaml") + + // Check we can unmarshall the request + data, err := os.ReadFile(helmFile) + if err != nil { + return nil, fmt.Errorf("can not read Kubeconfig file: %s", err) + } + + // Parse as yaml + var repos helmRepositoriesFile + err = yaml.Unmarshal(data, &repos) + if err != nil { + return nil, fmt.Errorf("can not parse Helm Repositories file: %s", err) + } + + return &repos, nil +} + +func getConfigFolder() (string, error) { + + usr, err := user.Current() + if err != nil { + return "", err + } + + if runtime.GOOS == "darwin" { + return filepath.Join(usr.HomeDir, "Library", "Preferences", "helm"), nil + } + + // TODO: Windows + + return filepath.Join(usr.HomeDir, ".config", "helm"), nil +} + +func getCacheFolder() (string, error) { + + usr, err := user.Current() + if err != nil { + return "", err + } + + if runtime.GOOS == "darwin" { + return filepath.Join(usr.HomeDir, "Library", "Caches", "helm"), nil + } + + // TODO: Windows + + return filepath.Join(usr.HomeDir, ".cache", "helm"), nil +} + +func getAllCharts() ([]IndexFileMetadata, error) { + + folder, err := getCacheFolder() + if err != nil { + return nil, err + } + + repoCache := filepath.Join(folder, "repository") + // Process all .yaml files in the folder + + var allCharts []IndexFileMetadata + + repos, err := readHelmRepoFile() + if err != nil { + return nil, err + } + + for _, repo := range repos.Repositories { + indexFile := filepath.Join(repoCache, fmt.Sprintf("%s-index.yaml", repo.Name)) + charts, err := processIndexFile(indexFile, repo) + if err == nil { + allCharts = append(allCharts, charts...) + } else { + log.Errorf("%+v", err) + } + } + + log.Infof("GOT %d", len(allCharts)) + return allCharts, err +} + +func processIndexFile(path string, repo helmRepositoryInfo) ([]IndexFileMetadata, error) { + + // Check we can unmarshall the request + data, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("can not read repository index file: %s", err) + } + + // Parse as yaml + var repos IndexFile + err = yaml.Unmarshal(data, &repos) + if err != nil { + return nil, fmt.Errorf("can not parse repository index file: %s", err) + } + + var charts []IndexFileMetadata + for _, ch := range repos.Entries { + for _, chart := range ch { + chart.Repo = Repo{ + Name: repo.Name, + URL: repo.URL, + } + charts = append(charts, chart) + } + } + + return charts, nil +} + +func collateCharts(metadatas []IndexFileMetadata) ([]apiResponse, map[string]apiResponse) { + + var response []apiResponse + + latestVersion := make(map[string]chartVersion) + charts := make(map[string]apiResponse) + + for _, chart := range metadatas { + id := fmt.Sprintf("%s/%s", chart.Repo.Name, chart.Name) + + // Have we already procesed this chart? + if _, ok := charts[id]; !ok { + // New - so this must be the newest version + latestVersion[id] = getChartVersion(chart) + + // Attributes + attrs := getChartMetadata(chart) + + // Convert + charts[id] = apiResponse{ + ID: id, + Type: "Chart", + Attributes: attrs, + Relationships: make(map[string]rel), + } + charts[id].Relationships["latestChartVersion"] = rel{ + Data: latestVersion[id], + } + } else { + // Check the version number + if isNewerVersion(chart.Version, latestVersion[id].Version) { + latestVersion[id] = getChartVersion(chart) + charts[id].Relationships["latestChartVersion"] = rel{ + Data: latestVersion[id], + } + } + } + } + + for _, c := range charts { + response = append(response, c) + } + + return response, charts +} + +func isNewerVersion(newv, oldv string) bool { + + // If the old version is pre-release then always prefer the new version + if strings.Index(oldv, "-") > 0 { + return true + } + + nv, ok := parseVersion(newv) + if !ok { + return false + } + ov, ok := parseVersion(oldv) + if !ok { + return true + } + + if nv[0] > ov[0] { + return true + } else if nv[0] < ov[0] { + return false + } + + if nv[1] > ov[1] { + return true + } else if nv[1] < ov[1] { + return false + } + + if nv[2] > ov[2] { + return true + } + + return false +} + +func parseVersion(v string) ([]int, bool) { + + version := make([]int, 3) + + bits := strings.Split(v, ".") + i, ok := strconv.Atoi(bits[0]) + if ok != nil { + return version, false + } + version[0] = i + i, ok = strconv.Atoi(bits[1]) + if ok != nil { + return version, false + } + version[1] = i + i, ok = strconv.Atoi(bits[2]) + if ok != nil { + return version, false + } + version[2] = i + + return version, true +} + +func getChartMetadata(indexData IndexFileMetadata) chartAttributes { + + id := fmt.Sprintf("%s/%s", indexData.Repo.Name, indexData.Name) + icon := "" + if len(indexData.Icon) > 0 { + icon = fmt.Sprintf("/icon/%s", b64.StdEncoding.EncodeToString([]byte(indexData.Icon))) + } + + // Attributes + attrs := chartAttributes{ + ID: id, + Name: indexData.Name, + Description: indexData.Description, + Keywords: make([]string, 0), + Maintainers: make([]chartMaintainer, 0), + Icon: icon, + Repo: indexData.Repo, + Sources: make([]string, 0), + } + + return attrs +} + +func getChartVersion(indexData IndexFileMetadata) chartVersion { + return chartVersion{ + Version: indexData.Version, + AppVersion: indexData.AppVersion, + Digest: indexData.Digest, + //Description: chart.Description, + Created: indexData.Created, + Readme: fmt.Sprintf("/v1/charts/%s/%s/versions/%s/files/README.md", indexData.Repo.Name, indexData.Name, indexData.Version), + Values: fmt.Sprintf("/v1/charts/%s/%s/versions/%s/files/values.yaml", indexData.Repo.Name, indexData.Name, indexData.Version), + URLs: indexData.URLs, + } +} + +func collateChartVersions(metadatas []IndexFileMetadata, chartID string) []apiResponse { + + versions := make([]apiResponse, 0) + for _, chart := range metadatas { + id := fmt.Sprintf("%s/%s", chart.Repo.Name, chart.Name) + + if id == chartID { + // Got a version for the spcified chart + vers := getChartVersion(chart) + attrs := getChartMetadata(chart) + version := apiResponse{ + ID: fmt.Sprintf("%s-%s", id, vers.Version), + Type: "chartVersion", + Attributes: vers, + } + + version.Relationships = make(map[string]rel) + version.Relationships["chart"] = rel{ + Data: attrs, + } + + versions = append(versions, version) + } + } + + return versions +} + +func fileExists(filename string) bool { + info, err := os.Stat(filename) + if os.IsNotExist(err) { + return false + } + return !info.IsDir() +} + +func getLocalChartFilePath(urls []string) (string, error) { + + if len(urls) == 0 { + return "", errors.New("no chart download URLs") + } + + urlParts := strings.Split(urls[0], "/") + chartFile := urlParts[len(urlParts)-1] + + // Look to see if the file already exists + + cacheFilder, err := getCacheFolder() + if err != nil { + return "", errors.New("can not get cache folder") + } + + path := filepath.Join(cacheFilder, "repository", chartFile) + if fileExists(path) { + return path, nil + } + + // Download the file + err = downloadFile(path, urls[0]) + return path, err +} + +func downloadFile(filepath string, url string) error { + + // Get the data + resp, err := http.Get(url) + if err != nil { + return err + } + defer resp.Body.Close() + + // Create the file + out, err := os.Create(filepath) + if err != nil { + return err + } + defer out.Close() + + // Write the body to file + _, err = io.Copy(out, resp.Body) + return err +} + +func getArchiveFile(c echo.Context, archivePath, filename string) error { + + f, err := os.Open(archivePath) + if err != nil { + fmt.Println(err) + return err + } + defer f.Close() + + gzf, err := gzip.NewReader(f) + if err != nil { + fmt.Println(err) + os.Exit(1) + } + + tarReader := tar.NewReader(gzf) + + for { + header, err := tarReader.Next() + + if err == io.EOF { + break + } + + if err != nil { + fmt.Println(err) + return err + } + + name := header.Name + switch header.Typeflag { + case tar.TypeDir: + continue + case tar.TypeReg: + if name == filename { + io.Copy(c.Response().Writer, tarReader) + return nil + } + } + } + + return errors.New("can not find file in archive") +} diff --git a/src/jetstream/plugins/desktop/helm/routes.go b/src/jetstream/plugins/desktop/helm/routes.go new file mode 100644 index 0000000000..958e6e08ac --- /dev/null +++ b/src/jetstream/plugins/desktop/helm/routes.go @@ -0,0 +1,257 @@ +package helm + +import ( + b64 "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + + "github.com/labstack/echo/v4" + log "github.com/sirupsen/logrus" +) + +// RegisterRoutes adss the routes needed to serve chart info for the local Helm repositories +func RegisterRoutes(echoGroup *echo.Group) { + // echoGroup.Any("/chartsvc/*", m.handleAPI) + // echoGroup.POST("/chartrepos/status", m.GetRepoStatuses) + // echoGroup.POST("/chartrepos/:guid", m.SyncRepo) + + // Get specific chart version file (used for values.yaml) + echoGroup.GET("/chartsvc/v1/assets/:repo/:name/versions/:version/:filename", getChartAndVersionFile) + + // Get specific chart version file + echoGroup.GET("/chartsvc/v1/charts/:repo/:name/versions/:version/files/:filename", getChartAndVersionFile) + + // Get specific chart version + echoGroup.GET("/chartsvc/v1/charts/:repo/:name/versions/:version", getChartAndVersion) + + // Get chart versions + echoGroup.GET("/chartsvc/v1/charts/:repo/:name/versions", getChartVersions) + + // Get a chart + echoGroup.GET("/chartsvc/v1/charts/:repo/:name", getChart) + + // Get list of charts + echoGroup.GET("/chartsvc/v1/charts", listCharts) + echoGroup.GET("/chartsvc/icon/:icon", getIcon) + +} + +func listCharts(c echo.Context) error { + + log.Debug("List Charts called") + + charts, err := getAllCharts() + if err != nil { + return err + } + + list, _ := collateCharts(charts) + meta := metaData{ + TotalPages: 1, + } + + body := bodyAPIListResponse{ + Data: list, + Meta: meta, + } + + jsonString, err := json.Marshal(body) + if err != nil { + return err + } + + c.Response().Header().Set("Content-Type", "application/json") + c.Response().Write(jsonString) + + return nil +} + +func getChart(c echo.Context) error { + + log.Debug("Get Chart") + + repoName := c.Param("repo") + name := c.Param("name") + id := fmt.Sprintf("%s/%s", repoName, name) + + charts, err := getAllCharts() + if err != nil { + return err + } + + _, chartMap := collateCharts(charts) + + data, ok := chartMap[id] + + if !ok { + return errors.New("can not find chart") + } + + // Find the latest version for the chart + + body := bodyAPIResponse{ + Data: data, + } + + jsonString, err := json.Marshal(body) + if err != nil { + return err + } + + c.Response().Header().Set("Content-Type", "application/json") + c.Response().Write(jsonString) + + return nil +} + +func getChartVersions(c echo.Context) error { + + log.Debug("Get Chart Versions") + + repoName := c.Param("repo") + name := c.Param("name") + id := fmt.Sprintf("%s/%s", repoName, name) + + charts, err := getAllCharts() + if err != nil { + return err + } + + vers := collateChartVersions(charts, id) + + body := bodyAPIListResponse{ + Data: vers, + } + + jsonString, err := json.Marshal(body) + if err != nil { + return err + } + + c.Response().Header().Set("Content-Type", "application/json") + c.Response().Write(jsonString) + + return nil +} + +func getChartAndVersion(c echo.Context) error { + + log.Error("Get Chart Version") + + repoName := c.Param("repo") + name := c.Param("name") + version := c.Param("version") + id := fmt.Sprintf("%s/%s", repoName, name) + + charts, err := getAllCharts() + if err != nil { + return err + } + + vers := collateChartVersions(charts, id) + + versionID := fmt.Sprintf("%s/%s-%s", repoName, name, version) + + // Find the version + for _, v := range vers { + log.Info(v.ID) + if v.ID == versionID { + body := bodyAPIResponse{ + Data: v, + } + + jsonString, err := json.Marshal(body) + if err != nil { + return err + } + + c.Response().Header().Set("Content-Type", "application/json") + c.Response().Write(jsonString) + + return nil + } + } + + return errors.New("chart version not found") +} + +func getIcon(c echo.Context) error { + + log.Debug("Get Icon called") + + id := c.Param("icon") + icon, _ := b64.StdEncoding.DecodeString(id) + + resp, err := http.Get(string(icon)) + if err != nil { + return err + } + + defer resp.Body.Close() + + if resp.StatusCode == 404 { + http.Redirect(c.Response().Writer, c.Request(), "/core/assets/custom/placeholder.png", http.StatusTemporaryRedirect) + return nil + } + + c.Response().Status = resp.StatusCode + body, err := io.ReadAll(resp.Body) + if err != nil { + return err + } + + for name, value := range resp.Header { + for _, v := range value { + c.Response().Header().Add(name, v) + } + } + + c.Response().Write(body) + + return nil + +} + +func getChartAndVersionFile(ec echo.Context) error { + + //echoGroup.GET("/chartsvc/v1/charts/:repo/:name/versions/:version/files/:filename", getChartAndVersionFile) + + log.Debug("Get Chart Version File") + + repoName := ec.Param("repo") + name := ec.Param("name") + version := ec.Param("version") + filename := ec.Param("filename") + id := fmt.Sprintf("%s/%s", repoName, name) + + // Find the chart for this version + charts, err := getAllCharts() + if err != nil { + return err + } + + vers := collateChartVersions(charts, id) + versionID := fmt.Sprintf("%s/%s-%s", repoName, name, version) + + // Find the version + for _, v := range vers { + log.Info(v.ID) + if v.ID == versionID { + // Got chart version + if c, ok := v.Attributes.(chartVersion); ok { + path, err := getLocalChartFilePath(c.URLs) + if err == nil { + err = getArchiveFile(ec, path, fmt.Sprintf("%s/%s", name, filename)) + return err + + } + } + return nil + } + } + + return errors.New("file not found") +} diff --git a/src/jetstream/plugins/desktop/helm/tokens.go b/src/jetstream/plugins/desktop/helm/tokens.go new file mode 100644 index 0000000000..41f06cb682 --- /dev/null +++ b/src/jetstream/plugins/desktop/helm/tokens.go @@ -0,0 +1,60 @@ +package helm + +import ( + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" +) + +// TokenStore is a token store that combines local tokens with the usual database stored tokens +type TokenStore struct { + portalProxy api.PortalProxy + store api.TokenRepository +} + +func (d *TokenStore) FindAuthToken(userGUID string, encryptionKey []byte) (api.TokenRecord, error) { + return d.store.FindAuthToken(userGUID, encryptionKey) +} + +func (d *TokenStore) SaveAuthToken(userGUID string, tokenRecord api.TokenRecord, encryptionKey []byte) error { + return d.store.SaveAuthToken(userGUID, tokenRecord, encryptionKey) +} + +func (d *TokenStore) FindCNSIToken(cnsiGUID string, userGUID string, encryptionKey []byte) (api.TokenRecord, error) { + return d.store.FindCNSIToken(cnsiGUID, userGUID, encryptionKey) +} + +func (d *TokenStore) FindCNSITokenIncludeDisconnected(cnsiGUID string, userGUID string, encryptionKey []byte) (api.TokenRecord, error) { + + token, err := d.FindCNSIToken(cnsiGUID, userGUID, encryptionKey) + if err == nil { + return token, err + } + + return d.store.FindCNSITokenIncludeDisconnected(cnsiGUID, userGUID, encryptionKey) +} + +func (d *TokenStore) FindAllCNSITokenBackup(cnsiGUID string, encryptionKey []byte) ([]api.BackupTokenRecord, error) { + return d.store.FindAllCNSITokenBackup(cnsiGUID, encryptionKey) +} + +func (d *TokenStore) DeleteCNSIToken(cnsiGUID string, userGUID string) error { + return d.store.DeleteCNSIToken(cnsiGUID, userGUID) +} + +func (d *TokenStore) DeleteCNSITokens(cnsiGUID string) error { + return d.store.DeleteCNSITokens(cnsiGUID) +} + +func (d *TokenStore) SaveCNSIToken(cnsiGUID string, userGUID string, tokenRecord api.TokenRecord, encryptionKey []byte) error { + return d.store.SaveCNSIToken(cnsiGUID, userGUID, tokenRecord, encryptionKey) +} + +// UpdateTokenAuth will update a token's auth data +func (d *TokenStore) UpdateTokenAuth(userGUID string, tokenRecord api.TokenRecord, encryptionKey []byte) error { + // if isLocalCloudFoundry(tokenRecord.TokenGUID) { + // updates := make(map[string]string) + // updates["AccessToken"] = fmt.Sprintf("bearer %s", tokenRecord.AuthToken) + // updates["RefreshToken"] = tokenRecord.RefreshToken + // return updateCFFIle(updates) + // } + return d.store.UpdateTokenAuth(userGUID, tokenRecord, encryptionKey) +} diff --git a/src/jetstream/plugins/desktop/helm/types.go b/src/jetstream/plugins/desktop/helm/types.go new file mode 100644 index 0000000000..7312421713 --- /dev/null +++ b/src/jetstream/plugins/desktop/helm/types.go @@ -0,0 +1,77 @@ +package helm + +import ( + "time" +) + +type apiResponse struct { + ID string `json:"id"` + Type string `json:"type"` + Attributes interface{} `json:"attributes"` + Links interface{} `json:"links"` + Relationships relMap `json:"relationships"` +} + +type apiListResponse []apiResponse + +type relMap map[string]rel +type rel struct { + Data interface{} `json:"data"` + Links selfLink `json:"links"` +} + +type selfLink struct { + Self string `json:"self"` +} + +type metaData struct { + TotalPages int `json:"totalPages"` +} + +type bodyAPIListResponse struct { + Data apiListResponse `json:"data"` + Meta metaData `json:"meta,omitempty"` +} + +type bodyAPIResponse struct { + Data apiResponse `json:"data"` +} + +// Repo holds the App repository details +type Repo struct { + Name string `json:"name"` + URL string `json:"url"` +} + +type chartAttributes struct { + ID string `json:"id"` + Name string `json:"name"` + Repo Repo `json:"repo"` + Description string `json:"description"` + Home string `json:"home"` + Keywords []string `json:"keywords"` + Maintainers []chartMaintainer `json:"maintainers"` + Sources []string `json:"sources"` + Icon string `json:"icon"` +} + +type chartVersion struct { + Version string `json:"version"` + AppVersion string `json:"app_version"` + Created time.Time `json:"created"` + Digest string `json:"digest"` + URLs []string `json:"urls"` + Readme string `json:"readme" bson:"-"` + Values string `json:"values" bson:"-"` + Schema string `json:"schema" bson:"-"` +} + +// Maintainer describes a Chart maintainer. +type chartMaintainer struct { + // Name is a user name or organization name + Name string `json:"name,omitempty"` + // Email is an optional email address to contact the named maintainer + Email string `json:"email,omitempty"` + // URL is an optional URL to an address for the named maintainer + URL string `json:"url,omitempty"` +} diff --git a/src/jetstream/plugins/desktop/kubernetes/auth.go b/src/jetstream/plugins/desktop/kubernetes/auth.go index 5830ab1995..2d42fc3638 100644 --- a/src/jetstream/plugins/desktop/kubernetes/auth.go +++ b/src/jetstream/plugins/desktop/kubernetes/auth.go @@ -7,11 +7,11 @@ import ( "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/auth" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) -func getTokenFromAuthInfo(jetstream interfaces.PortalProxy, authInfo *clientcmdapi.AuthInfo) (*interfaces.TokenRecord, error) { +func getTokenFromAuthInfo(jetstream api.PortalProxy, authInfo *clientcmdapi.AuthInfo) (*api.TokenRecord, error) { if len(authInfo.ClientCertificateData) > 0 && len(authInfo.ClientKeyData) > 0 { return getTokenFromCert(jetstream, authInfo) @@ -25,7 +25,7 @@ func getTokenFromAuthInfo(jetstream interfaces.PortalProxy, authInfo *clientcmda } -func getTokenFromCert(jetstream interfaces.PortalProxy, authInfo *clientcmdapi.AuthInfo) (*interfaces.TokenRecord, error) { +func getTokenFromCert(jetstream api.PortalProxy, authInfo *clientcmdapi.AuthInfo) (*api.TokenRecord, error) { kubeCertAuth := auth.KubeCertificate{ Certificate: string(authInfo.ClientCertificateData), @@ -35,7 +35,7 @@ func getTokenFromCert(jetstream interfaces.PortalProxy, authInfo *clientcmdapi.A return handleCert(jetstream, kubeCertAuth) } -func getTokenFromCertFiles(jetstream interfaces.PortalProxy, authInfo *clientcmdapi.AuthInfo) (*interfaces.TokenRecord, error) { +func getTokenFromCertFiles(jetstream api.PortalProxy, authInfo *clientcmdapi.AuthInfo) (*api.TokenRecord, error) { cert, err := ioutil.ReadFile(authInfo.ClientCertificate) if err != nil { @@ -55,7 +55,7 @@ func getTokenFromCertFiles(jetstream interfaces.PortalProxy, authInfo *clientcmd return handleCert(jetstream, kubeCertAuth) } -func handleCert(jetstream interfaces.PortalProxy, kubeCertAuth auth.KubeCertificate) (*interfaces.TokenRecord, error) { +func handleCert(jetstream api.PortalProxy, kubeCertAuth auth.KubeCertificate) (*api.TokenRecord, error) { jsonString, err := kubeCertAuth.GetJSON() if err != nil { @@ -82,7 +82,7 @@ func handleCert(jetstream interfaces.PortalProxy, kubeCertAuth auth.KubeCertific // } -// func (c *CertKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Context) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +// func (c *CertKubeAuth) FetchToken(cnsiRecord api.CNSIRecord, ec echo.Context) (*api.TokenRecord, *api.CNSIRecord, error) { // log.Debug("Kube Certs - FetchToken") // kubeCertAuth, err := c.extractCerts(ec) diff --git a/src/jetstream/plugins/desktop/kubernetes/endpoints.go b/src/jetstream/plugins/desktop/kubernetes/endpoints.go index 3994c77713..3152f4e1ca 100644 --- a/src/jetstream/plugins/desktop/kubernetes/endpoints.go +++ b/src/jetstream/plugins/desktop/kubernetes/endpoints.go @@ -4,16 +4,16 @@ import ( "crypto/sha1" "encoding/base64" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" ) type EndpointStore struct { - portalProxy interfaces.PortalProxy - store interfaces.EndpointRepository + portalProxy api.PortalProxy + store api.EndpointRepository } -func (d *EndpointStore) List(encryptionKey []byte) ([]*interfaces.CNSIRecord, error) { +func (d *EndpointStore) List(encryptionKey []byte) ([]*api.CNSIRecord, error) { local, _, err := ListKubernetes() db, err := d.store.List(encryptionKey) @@ -21,7 +21,7 @@ func (d *EndpointStore) List(encryptionKey []byte) ([]*interfaces.CNSIRecord, er return merged, err } -func (d *EndpointStore) ListByUser(userGUID string) ([]*interfaces.ConnectedEndpoint, error) { +func (d *EndpointStore) ListByUser(userGUID string) ([]*api.ConnectedEndpoint, error) { local, err := ListConnectedKubernetes() db, err := d.store.ListByUser(userGUID) @@ -29,7 +29,7 @@ func (d *EndpointStore) ListByUser(userGUID string) ([]*interfaces.ConnectedEndp return merged, err } -func (d *EndpointStore) Find(guid string, encryptionKey []byte) (interfaces.CNSIRecord, error) { +func (d *EndpointStore) Find(guid string, encryptionKey []byte) (api.CNSIRecord, error) { local, _, err := ListKubernetes() if err == nil { for _, ep := range local { @@ -42,18 +42,18 @@ func (d *EndpointStore) Find(guid string, encryptionKey []byte) (interfaces.CNSI return d.store.Find(guid, encryptionKey) } -func (d *EndpointStore) FindByAPIEndpoint(endpoint string, encryptionKey []byte) (interfaces.CNSIRecord, error) { +func (d *EndpointStore) FindByAPIEndpoint(endpoint string, encryptionKey []byte) (api.CNSIRecord, error) { return d.store.FindByAPIEndpoint(endpoint, encryptionKey) } -func (d *EndpointStore) ListByAPIEndpoint(endpoint string, encryptionKey []byte) ([]*interfaces.CNSIRecord, error) { +func (d *EndpointStore) ListByAPIEndpoint(endpoint string, encryptionKey []byte) ([]*api.CNSIRecord, error) { local, _, err := ListKubernetes() db, err := d.store.ListByAPIEndpoint(endpoint, encryptionKey) merged := mergeEndpoints(db, local) return merged, err } -func (d *EndpointStore) ListByCreator(userGUID string, encryptionKey []byte) ([]*interfaces.CNSIRecord, error) { +func (d *EndpointStore) ListByCreator(userGUID string, encryptionKey []byte) ([]*api.CNSIRecord, error) { local, _, err := ListKubernetes() db, err := d.store.ListByCreator(userGUID, encryptionKey) merged := mergeEndpoints(db, local) @@ -64,11 +64,11 @@ func (d *EndpointStore) Delete(guid string) error { return d.store.Delete(guid) } -func (d *EndpointStore) Save(guid string, cnsiRecord interfaces.CNSIRecord, encryptionKey []byte) error { +func (d *EndpointStore) Save(guid string, cnsiRecord api.CNSIRecord, encryptionKey []byte) error { return d.store.Save(guid, cnsiRecord, encryptionKey) } -func (d *EndpointStore) Update(endpoint interfaces.CNSIRecord, encryptionKey []byte) error { +func (d *EndpointStore) Update(endpoint api.CNSIRecord, encryptionKey []byte) error { return d.store.Update(endpoint, encryptionKey) } @@ -76,19 +76,19 @@ func (d *EndpointStore) UpdateMetadata(guid string, metadata string) error { return d.store.UpdateMetadata(guid, metadata) } -func (d *EndpointStore) SaveOrUpdate(endpoint interfaces.CNSIRecord, encryptionKey []byte) error { +func (d *EndpointStore) SaveOrUpdate(endpoint api.CNSIRecord, encryptionKey []byte) error { return d.store.SaveOrUpdate(endpoint, encryptionKey) } // Merge endpoints, over-riding any in first with those in second -func mergeEndpoints(first, second []*interfaces.CNSIRecord) []*interfaces.CNSIRecord { +func mergeEndpoints(first, second []*api.CNSIRecord) []*api.CNSIRecord { urls := make(map[string]bool, 0) for _, endpoint := range second { urls[endpoint.APIEndpoint.String()] = true } // Filter the first to remove entries in second - merged := make([]*interfaces.CNSIRecord, 0) + merged := make([]*api.CNSIRecord, 0) for _, endpoint := range first { if _, ok := urls[endpoint.APIEndpoint.String()]; !ok { merged = append(merged, endpoint) @@ -102,14 +102,14 @@ func mergeEndpoints(first, second []*interfaces.CNSIRecord) []*interfaces.CNSIRe } // Merge endpoints, over-riding any in first with those in second -func mergeConnectedEndpoints(first, second []*interfaces.ConnectedEndpoint) []*interfaces.ConnectedEndpoint { +func mergeConnectedEndpoints(first, second []*api.ConnectedEndpoint) []*api.ConnectedEndpoint { urls := make(map[string]bool, 0) for _, endpoint := range second { urls[endpoint.APIEndpoint.String()] = true } // Filter the first to ermove entries in second - merged := make([]*interfaces.ConnectedEndpoint, 0) + merged := make([]*api.ConnectedEndpoint, 0) for _, endpoint := range first { if _, ok := urls[endpoint.APIEndpoint.String()]; !ok { merged = append(merged, endpoint) diff --git a/src/jetstream/plugins/desktop/kubernetes/kubeconfig.go b/src/jetstream/plugins/desktop/kubernetes/kubeconfig.go index ebc7dc4393..c4d924754e 100644 --- a/src/jetstream/plugins/desktop/kubernetes/kubeconfig.go +++ b/src/jetstream/plugins/desktop/kubernetes/kubeconfig.go @@ -9,7 +9,7 @@ import ( "os/user" "path/filepath" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" "k8s.io/client-go/tools/clientcmd" @@ -30,7 +30,7 @@ type CFConfigFile struct { } // ListKubernetes will list Cloud Foundry endpoints configured locally (can be only one) -func ListKubernetes() ([]*interfaces.CNSIRecord, *clientcmdapi.Config, error) { +func ListKubernetes() ([]*api.CNSIRecord, *clientcmdapi.Config, error) { cfg, err := readKubeConfigFile() if err != nil { @@ -39,11 +39,11 @@ func ListKubernetes() ([]*interfaces.CNSIRecord, *clientcmdapi.Config, error) { } // Add an endpoint for each cluster - var eps []*interfaces.CNSIRecord + var eps []*api.CNSIRecord for name, cluster := range cfg.Clusters { apiEndpoint, err := url.Parse(cluster.Server) if err == nil { - eps = append(eps, &interfaces.CNSIRecord{ + eps = append(eps, &api.CNSIRecord{ GUID: getEndpointGUID(cluster.Server), Name: name, CNSIType: "k8s", @@ -64,7 +64,7 @@ func ListKubernetes() ([]*interfaces.CNSIRecord, *clientcmdapi.Config, error) { } // ListConnectedCloudFoundry will list Cloud Foundry endpoints configured locally (can be only one) -func ListConnectedKubernetes() ([]*interfaces.ConnectedEndpoint, error) { +func ListConnectedKubernetes() ([]*api.ConnectedEndpoint, error) { cfg, err := readKubeConfigFile() if err != nil { @@ -73,11 +73,11 @@ func ListConnectedKubernetes() ([]*interfaces.ConnectedEndpoint, error) { } // Add an endpoint for each cluster - var eps []*interfaces.ConnectedEndpoint + var eps []*api.ConnectedEndpoint for name, cluster := range cfg.Clusters { apiEndpoint, err := url.Parse(cluster.Server) if err == nil { - eps = append(eps, &interfaces.ConnectedEndpoint{ + eps = append(eps, &api.ConnectedEndpoint{ GUID: getEndpointGUID(cluster.Server), Name: name, CNSIType: "k8s", @@ -95,7 +95,7 @@ func ListConnectedKubernetes() ([]*interfaces.ConnectedEndpoint, error) { return eps, nil } -func getKubeConfigUser(config *clientcmdapi.Config, endpoint *interfaces.CNSIRecord) (*clientcmdapi.AuthInfo, bool) { +func getKubeConfigUser(config *clientcmdapi.Config, endpoint *api.CNSIRecord) (*clientcmdapi.AuthInfo, bool) { // Find the first context for this endpoint for _, context := range config.Contexts { diff --git a/src/jetstream/plugins/desktop/kubernetes/main.go b/src/jetstream/plugins/desktop/kubernetes/main.go index 2a26b74911..b17863d504 100644 --- a/src/jetstream/plugins/desktop/kubernetes/main.go +++ b/src/jetstream/plugins/desktop/kubernetes/main.go @@ -1,15 +1,15 @@ package kubernetes import ( - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" ) // Desktop - Desktop hosting for Kubernetes type Desktop struct { - portalProxy interfaces.PortalProxy - factory interfaces.StoreFactory + portalProxy api.PortalProxy + factory api.StoreFactory endpointStore EndpointStore tokenStore TokenStore } @@ -17,7 +17,7 @@ type Desktop struct { var br *Desktop // Init performs plugin initialization -func Init(portalProxy interfaces.PortalProxy) error { +func Init(portalProxy api.PortalProxy) error { // TODO: Check we are running in desktop environment @@ -48,11 +48,11 @@ func Init(portalProxy interfaces.PortalProxy) error { } // EndpointStore gets store for obtaining endpoint information -func (br *Desktop) EndpointStore() (interfaces.EndpointRepository, error) { +func (br *Desktop) EndpointStore() (api.EndpointRepository, error) { return &br.endpointStore, nil } // TokenStore gets store for obtaining endpoint information -func (br *Desktop) TokenStore() (interfaces.TokenRepository, error) { +func (br *Desktop) TokenStore() (api.TokenRepository, error) { return &br.tokenStore, nil } diff --git a/src/jetstream/plugins/desktop/kubernetes/tokens.go b/src/jetstream/plugins/desktop/kubernetes/tokens.go index c2df81029a..5eb794c2c6 100644 --- a/src/jetstream/plugins/desktop/kubernetes/tokens.go +++ b/src/jetstream/plugins/desktop/kubernetes/tokens.go @@ -1,24 +1,24 @@ package kubernetes import ( - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // TokenStore is a token store that combines local tokens with the usual database stored tokens type TokenStore struct { - portalProxy interfaces.PortalProxy - store interfaces.TokenRepository + portalProxy api.PortalProxy + store api.TokenRepository } -func (d *TokenStore) FindAuthToken(userGUID string, encryptionKey []byte) (interfaces.TokenRecord, error) { +func (d *TokenStore) FindAuthToken(userGUID string, encryptionKey []byte) (api.TokenRecord, error) { return d.store.FindAuthToken(userGUID, encryptionKey) } -func (d *TokenStore) SaveAuthToken(userGUID string, tokenRecord interfaces.TokenRecord, encryptionKey []byte) error { +func (d *TokenStore) SaveAuthToken(userGUID string, tokenRecord api.TokenRecord, encryptionKey []byte) error { return d.store.SaveAuthToken(userGUID, tokenRecord, encryptionKey) } -func (d *TokenStore) FindCNSIToken(cnsiGUID string, userGUID string, encryptionKey []byte) (interfaces.TokenRecord, error) { +func (d *TokenStore) FindCNSIToken(cnsiGUID string, userGUID string, encryptionKey []byte) (api.TokenRecord, error) { local, cfg, err := ListKubernetes() if err == nil { @@ -38,7 +38,7 @@ func (d *TokenStore) FindCNSIToken(cnsiGUID string, userGUID string, encryptionK return d.store.FindCNSIToken(cnsiGUID, userGUID, encryptionKey) } -func (d *TokenStore) FindCNSITokenIncludeDisconnected(cnsiGUID string, userGUID string, encryptionKey []byte) (interfaces.TokenRecord, error) { +func (d *TokenStore) FindCNSITokenIncludeDisconnected(cnsiGUID string, userGUID string, encryptionKey []byte) (api.TokenRecord, error) { token, err := d.FindCNSIToken(cnsiGUID, userGUID, encryptionKey) if err == nil { @@ -48,7 +48,7 @@ func (d *TokenStore) FindCNSITokenIncludeDisconnected(cnsiGUID string, userGUID return d.store.FindCNSITokenIncludeDisconnected(cnsiGUID, userGUID, encryptionKey) } -func (d *TokenStore) FindAllCNSITokenBackup(cnsiGUID string, encryptionKey []byte) ([]interfaces.BackupTokenRecord, error) { +func (d *TokenStore) FindAllCNSITokenBackup(cnsiGUID string, encryptionKey []byte) ([]api.BackupTokenRecord, error) { return d.store.FindAllCNSITokenBackup(cnsiGUID, encryptionKey) } @@ -60,12 +60,12 @@ func (d *TokenStore) DeleteCNSITokens(cnsiGUID string) error { return d.store.DeleteCNSITokens(cnsiGUID) } -func (d *TokenStore) SaveCNSIToken(cnsiGUID string, userGUID string, tokenRecord interfaces.TokenRecord, encryptionKey []byte) error { +func (d *TokenStore) SaveCNSIToken(cnsiGUID string, userGUID string, tokenRecord api.TokenRecord, encryptionKey []byte) error { return d.store.SaveCNSIToken(cnsiGUID, userGUID, tokenRecord, encryptionKey) } // UpdateTokenAuth will update a token's auth data -func (d *TokenStore) UpdateTokenAuth(userGUID string, tokenRecord interfaces.TokenRecord, encryptionKey []byte) error { +func (d *TokenStore) UpdateTokenAuth(userGUID string, tokenRecord api.TokenRecord, encryptionKey []byte) error { // if isLocalCloudFoundry(tokenRecord.TokenGUID) { // updates := make(map[string]string) // updates["AccessToken"] = fmt.Sprintf("bearer %s", tokenRecord.AuthToken) diff --git a/src/jetstream/plugins/desktop/main.go b/src/jetstream/plugins/desktop/main.go index 004678252d..f41843c8df 100644 --- a/src/jetstream/plugins/desktop/main.go +++ b/src/jetstream/plugins/desktop/main.go @@ -3,8 +3,9 @@ package desktop import ( "errors" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/desktop/helm" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/desktop/kubernetes" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" @@ -12,34 +13,34 @@ import ( // Module init will register plugin func init() { - interfaces.AddPlugin("desktop", nil, Init) + api.AddPlugin("desktop", nil, Init) } // Desktop - Desktop hosting plugin type Desktop struct { - portalProxy interfaces.PortalProxy - factory interfaces.StoreFactory + portalProxy api.PortalProxy + factory api.StoreFactory endpointStore DesktopEndpointStore tokenStore TokenStore } // Init creates a new Autoscaler -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { return &Desktop{portalProxy: portalProxy}, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (br *Desktop) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (br *Desktop) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (br *Desktop) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (br *Desktop) GetEndpointPlugin() (api.EndpointPlugin, error) { return nil, errors.New("Not implemented") } // GetRoutePlugin gets the route plugin for this plugin -func (br *Desktop) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (br *Desktop) GetRoutePlugin() (api.RoutePlugin, error) { return br, nil } @@ -77,16 +78,19 @@ func (br *Desktop) Init() error { // Now add the Kubernetes Desktop support in kubernetes.Init(br.portalProxy) + // Add the Helm Desktop support in + helm.Init(br.portalProxy) + return nil } // EndpointStore gets store for obtaining endpoint information -func (br *Desktop) EndpointStore() (interfaces.EndpointRepository, error) { +func (br *Desktop) EndpointStore() (api.EndpointRepository, error) { return &br.endpointStore, nil } // TokenStore gets store for obtaining endpoint information -func (br *Desktop) TokenStore() (interfaces.TokenRepository, error) { +func (br *Desktop) TokenStore() (api.TokenRepository, error) { return &br.tokenStore, nil //return br.factory.TokenStore() } diff --git a/src/jetstream/plugins/desktop/tokens.go b/src/jetstream/plugins/desktop/tokens.go index 5063b912d1..096d5480ff 100644 --- a/src/jetstream/plugins/desktop/tokens.go +++ b/src/jetstream/plugins/desktop/tokens.go @@ -4,24 +4,24 @@ import ( "fmt" "strings" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // TokenStore is a token store that combines local tokens with the usual database stored tokens type TokenStore struct { - portalProxy interfaces.PortalProxy - store interfaces.TokenRepository + portalProxy api.PortalProxy + store api.TokenRepository } -func (d *TokenStore) FindAuthToken(userGUID string, encryptionKey []byte) (interfaces.TokenRecord, error) { +func (d *TokenStore) FindAuthToken(userGUID string, encryptionKey []byte) (api.TokenRecord, error) { return d.store.FindAuthToken(userGUID, encryptionKey) } -func (d *TokenStore) SaveAuthToken(userGUID string, tokenRecord interfaces.TokenRecord, encryptionKey []byte) error { +func (d *TokenStore) SaveAuthToken(userGUID string, tokenRecord api.TokenRecord, encryptionKey []byte) error { return d.store.SaveAuthToken(userGUID, tokenRecord, encryptionKey) } -func (d *TokenStore) FindCNSIToken(cnsiGUID string, userGUID string, encryptionKey []byte) (interfaces.TokenRecord, error) { +func (d *TokenStore) FindCNSIToken(cnsiGUID string, userGUID string, encryptionKey []byte) (api.TokenRecord, error) { // Main method that we need to override to get the token for the given endpoint local, err := ListCloudFoundry() @@ -35,7 +35,7 @@ func (d *TokenStore) FindCNSIToken(cnsiGUID string, userGUID string, encryptionK if strings.HasPrefix(authToken, "bearer ") { authToken = authToken[7:] } - return interfaces.TokenRecord{ + return api.TokenRecord{ TokenGUID: cnsiGUID, AuthToken: authToken, RefreshToken: cfg.RefreshToken, @@ -56,7 +56,7 @@ func (d *TokenStore) FindCNSIToken(cnsiGUID string, userGUID string, encryptionK return d.store.FindCNSIToken(cnsiGUID, userGUID, encryptionKey) } -func (d *TokenStore) FindCNSITokenIncludeDisconnected(cnsiGUID string, userGUID string, encryptionKey []byte) (interfaces.TokenRecord, error) { +func (d *TokenStore) FindCNSITokenIncludeDisconnected(cnsiGUID string, userGUID string, encryptionKey []byte) (api.TokenRecord, error) { // Main method that we need to override to get the token for the given endpoint if IsLocalCloudFoundry(cnsiGUID) { return d.FindCNSIToken(cnsiGUID, userGUID, encryptionKey) @@ -65,7 +65,7 @@ func (d *TokenStore) FindCNSITokenIncludeDisconnected(cnsiGUID string, userGUID return d.store.FindCNSITokenIncludeDisconnected(cnsiGUID, userGUID, encryptionKey) } -func (d *TokenStore) FindAllCNSITokenBackup(cnsiGUID string, encryptionKey []byte) ([]interfaces.BackupTokenRecord, error) { +func (d *TokenStore) FindAllCNSITokenBackup(cnsiGUID string, encryptionKey []byte) ([]api.BackupTokenRecord, error) { return d.store.FindAllCNSITokenBackup(cnsiGUID, encryptionKey) } @@ -83,12 +83,12 @@ func (d *TokenStore) DeleteCNSITokens(cnsiGUID string) error { return d.store.DeleteCNSITokens(cnsiGUID) } -func (d *TokenStore) SaveCNSIToken(cnsiGUID string, userGUID string, tokenRecord interfaces.TokenRecord, encryptionKey []byte) error { +func (d *TokenStore) SaveCNSIToken(cnsiGUID string, userGUID string, tokenRecord api.TokenRecord, encryptionKey []byte) error { return d.store.SaveCNSIToken(cnsiGUID, userGUID, tokenRecord, encryptionKey) } // UpdateTokenAuth will update a token's auth data -func (d *TokenStore) UpdateTokenAuth(userGUID string, tokenRecord interfaces.TokenRecord, encryptionKey []byte) error { +func (d *TokenStore) UpdateTokenAuth(userGUID string, tokenRecord api.TokenRecord, encryptionKey []byte) error { if IsLocalCloudFoundry(tokenRecord.TokenGUID) { updates := make(map[string]string) updates["AccessToken"] = fmt.Sprintf("bearer %s", tokenRecord.AuthToken) diff --git a/src/jetstream/plugins/kubernetes/api/api.go b/src/jetstream/plugins/kubernetes/api/api.go index b15fc1b3c3..b88439827f 100644 --- a/src/jetstream/plugins/kubernetes/api/api.go +++ b/src/jetstream/plugins/kubernetes/api/api.go @@ -1,12 +1,12 @@ package api import ( - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" restclient "k8s.io/client-go/rest" ) type Kubernetes interface { - GetConfigForEndpoint(masterURL string, token interfaces.TokenRecord) (*restclient.Config, error) - GetKubeConfigForEndpoint(masterURL string, token interfaces.TokenRecord, namespace string) (string, error) + GetConfigForEndpoint(masterURL string, token api.TokenRecord) (*restclient.Config, error) + GetKubeConfigForEndpoint(masterURL string, token api.TokenRecord, namespace string) (string, error) } diff --git a/src/jetstream/plugins/kubernetes/api_proxy.go b/src/jetstream/plugins/kubernetes/api_proxy.go index 74d285d399..f7784c5938 100644 --- a/src/jetstream/plugins/kubernetes/api_proxy.go +++ b/src/jetstream/plugins/kubernetes/api_proxy.go @@ -7,7 +7,7 @@ import ( // Import the OIDC auth plugin _ "k8s.io/client-go/plugin/pkg/client/auth/oidc" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // KubeProxyError represents error when a proxied request to the Kube API failes @@ -16,7 +16,7 @@ type KubeProxyError struct { } // KubeProxyFunc represents a function to proxy to the Kube API -type KubeProxyFunc func(*interfaces.ConnectedEndpoint, chan KubeProxyResponse) +type KubeProxyFunc func(*api.ConnectedEndpoint, chan KubeProxyResponse) // KubeProxyResponse represents a response from a proxy request to the Kube API type KubeProxyResponse struct { @@ -32,7 +32,7 @@ type KubeProxyResponses map[string]interface{} func (c *KubernetesSpecification) ProxyKubernetesAPI(userID string, f KubeProxyFunc) (KubeProxyResponses, error) { var p = c.portalProxy - k8sList := make([]*interfaces.ConnectedEndpoint, 0) + k8sList := make([]*api.ConnectedEndpoint, 0) eps, err := p.ListEndpointsByUser(userID) if err != nil { return nil, fmt.Errorf("Could not get endpints Client for endpoint: %v+", err) diff --git a/src/jetstream/plugins/kubernetes/auth/awsiam.go b/src/jetstream/plugins/kubernetes/auth/awsiam.go index 06c733bb9e..14902a7dad 100644 --- a/src/jetstream/plugins/kubernetes/auth/awsiam.go +++ b/src/jetstream/plugins/kubernetes/auth/awsiam.go @@ -8,7 +8,7 @@ import ( "time" // "github.com/SermoDigital/jose/jws" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -17,7 +17,7 @@ import ( "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/sts" - "github.com/kubernetes-sigs/aws-iam-authenticator/pkg/token" + "sigs.k8s.io/aws-iam-authenticator/pkg/token" ) // AWSIAMUserInfo is the user info needed to connect to AWS Kubernetes @@ -29,13 +29,13 @@ type AWSIAMUserInfo struct { // AWSKubeAuth is AWS IAM Authentication for Kubernetes type AWSKubeAuth struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } const authConnectTypeAWSIAM = "aws-iam" // InitAWSKubeAuth creates a GKEKubeAuth -func InitAWSKubeAuth(portalProxy interfaces.PortalProxy) KubeAuthProvider { +func InitAWSKubeAuth(portalProxy api.PortalProxy) KubeAuthProvider { return &AWSKubeAuth{portalProxy: portalProxy} } @@ -44,7 +44,7 @@ func (c *AWSKubeAuth) GetName() string { return authConnectTypeAWSIAM } -func (c *AWSKubeAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interfaces.TokenRecord) error { +func (c *AWSKubeAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec api.TokenRecord) error { awsInfo := &AWSIAMUserInfo{} err := json.Unmarshal([]byte(tokenRec.RefreshToken), &awsInfo) if err != nil { @@ -74,7 +74,7 @@ func (c *AWSIAMUserInfo) IsExpired() bool { return true } -func (c *AWSKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Context) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +func (c *AWSKubeAuth) FetchToken(cnsiRecord api.CNSIRecord, ec echo.Context) (*api.TokenRecord, *api.CNSIRecord, error) { log.Debug("FetchIAMToken") // Place the IAM properties into a JSON Struct and store that in the Refresh Token @@ -111,15 +111,15 @@ func (c *AWSKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Conte return &tokenRecord, &cnsiRecord, nil } -func (c *AWSKubeAuth) GetUserFromToken(cnsiGUID string, cfTokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { - return &interfaces.ConnectedUser{ +func (c *AWSKubeAuth) GetUserFromToken(cnsiGUID string, cfTokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { + return &api.ConnectedUser{ GUID: "AWS IAM", Name: "IAM", }, true } func (c *AWSKubeAuth) getTokenIAM(info AWSIAMUserInfo) (string, error) { - generator, err := token.NewGenerator(false) + generator, err := token.NewGenerator(false, false) if err != nil { return "", fmt.Errorf("AWS IAM: Failed to create generator due to %+v", err) } @@ -143,22 +143,22 @@ func (c *AWSKubeAuth) getTokenIAM(info AWSIAMUserInfo) (string, error) { return tok.Token, nil } -func (c *AWSKubeAuth) RegisterJetstreamAuthType(portal interfaces.PortalProxy) { +func (c *AWSKubeAuth) RegisterJetstreamAuthType(portal api.PortalProxy) { // Register auth type with Jetstream - c.portalProxy.AddAuthProvider(c.GetName(), interfaces.AuthProvider{ + c.portalProxy.AddAuthProvider(c.GetName(), api.AuthProvider{ Handler: c.DoFlowRequest, UserInfo: c.GetUserFromToken, }) } -func (c *AWSKubeAuth) DoFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (c *AWSKubeAuth) DoFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("doAWSIAMFlowRequest") authHandler := c.portalProxy.OAuthHandlerFunc(cnsiRequest, req, c.RefreshIAMToken) return c.portalProxy.DoAuthFlowRequest(cnsiRequest, req, authHandler) } -func (c *AWSKubeAuth) RefreshIAMToken(skipSSLValidation bool, cnsiGUID, userGUID, client, clientSecret, tokenEndpoint string) (t interfaces.TokenRecord, err error) { +func (c *AWSKubeAuth) RefreshIAMToken(skipSSLValidation bool, cnsiGUID, userGUID, client, clientSecret, tokenEndpoint string) (t api.TokenRecord, err error) { log.Debug("RefreshIAMToken") userToken, ok := c.portalProxy.GetCNSITokenRecordWithDisconnected(cnsiGUID, userGUID) diff --git a/src/jetstream/plugins/kubernetes/auth/azure.go b/src/jetstream/plugins/kubernetes/auth/azure.go index ee49f2d0ee..1537445e93 100644 --- a/src/jetstream/plugins/kubernetes/auth/azure.go +++ b/src/jetstream/plugins/kubernetes/auth/azure.go @@ -7,7 +7,7 @@ import ( "time" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/config" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" ) @@ -20,7 +20,7 @@ type AzureKubeAuth struct { } // InitAzureKubeAuth creates a AzureKubeAuth -func InitAzureKubeAuth(portalProxy interfaces.PortalProxy) KubeAuthProvider { +func InitAzureKubeAuth(portalProxy api.PortalProxy) KubeAuthProvider { return &AzureKubeAuth{*InitCertKubeAuth(portalProxy)} } @@ -29,7 +29,7 @@ func (c *AzureKubeAuth) GetName() string { return authConnectTypeKubeConfigAz } -func (p *AzureKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Context) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +func (p *AzureKubeAuth) FetchToken(cnsiRecord api.CNSIRecord, ec echo.Context) (*api.TokenRecord, *api.CNSIRecord, error) { req := ec.Request() // Need to extract the parameters from the request body @@ -99,9 +99,9 @@ func isAKSAuth(k *config.KubeConfigUser) bool { return true } -func (c *AzureKubeAuth) RegisterJetstreamAuthType(portal interfaces.PortalProxy) { +func (c *AzureKubeAuth) RegisterJetstreamAuthType(portal api.PortalProxy) { // Register auth type with Jetstream - c.portalProxy.AddAuthProvider(c.GetName(), interfaces.AuthProvider{ + c.portalProxy.AddAuthProvider(c.GetName(), api.AuthProvider{ Handler: c.DoFlowRequest, UserInfo: c.GetUserFromToken, }) diff --git a/src/jetstream/plugins/kubernetes/auth/basic_auth.go b/src/jetstream/plugins/kubernetes/auth/basic_auth.go index d8ee9b98cf..c79656bac3 100644 --- a/src/jetstream/plugins/kubernetes/auth/basic_auth.go +++ b/src/jetstream/plugins/kubernetes/auth/basic_auth.go @@ -5,7 +5,7 @@ import ( "errors" "fmt" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -16,11 +16,11 @@ const authTypeHttpBasic = "HttpBasic" // KubeBasicAuth is HTTP Basic Authentication type KubeBasicAuth struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // InitKubeBasicAuth creates a GKEKubeAuth -func InitKubeBasicAuth(portalProxy interfaces.PortalProxy) *KubeBasicAuth { +func InitKubeBasicAuth(portalProxy api.PortalProxy) *KubeBasicAuth { return &KubeBasicAuth{portalProxy: portalProxy} } @@ -29,7 +29,7 @@ func (c *KubeBasicAuth) GetName() string { return authConnectTypeBasicAuth } -func (c *KubeBasicAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interfaces.TokenRecord) error { +func (c *KubeBasicAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec api.TokenRecord) error { // Decode the token authString, err := base64.StdEncoding.DecodeString(tokenRec.AuthToken) if err != nil { @@ -44,7 +44,7 @@ func (c *KubeBasicAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interf return nil } -func (c *KubeBasicAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Context) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +func (c *KubeBasicAuth) FetchToken(cnsiRecord api.CNSIRecord, ec echo.Context) (*api.TokenRecord, *api.CNSIRecord, error) { log.Info("FetchToken") @@ -58,7 +58,7 @@ func (c *KubeBasicAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Con authString := fmt.Sprintf("%s:%s", username, password) base64EncodedAuthString := base64.StdEncoding.EncodeToString([]byte(authString)) - tr := &interfaces.TokenRecord{ + tr := &api.TokenRecord{ AuthType: authConnectTypeBasicAuth, AuthToken: base64EncodedAuthString, RefreshToken: username, @@ -67,20 +67,20 @@ func (c *KubeBasicAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Con return tr, &cnsiRecord, nil } -func (c *KubeBasicAuth) GetUserFromToken(cnsiGUID string, cfTokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { - return &interfaces.ConnectedUser{ +func (c *KubeBasicAuth) GetUserFromToken(cnsiGUID string, cfTokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { + return &api.ConnectedUser{ // RefreshjToken is the username GUID: fmt.Sprintf("%s-%s", cnsiGUID, cfTokenRecord.RefreshToken), Name: cfTokenRecord.RefreshToken, }, true } -func (c *KubeBasicAuth) RegisterJetstreamAuthType(portal interfaces.PortalProxy) { +func (c *KubeBasicAuth) RegisterJetstreamAuthType(portal api.PortalProxy) { // Register auth type with Jetstream - use the same as the HttpBasic auth auth := c.portalProxy.GetAuthProvider(authTypeHttpBasic) if auth.Handler != nil { - c.portalProxy.AddAuthProvider(c.GetName(), interfaces.AuthProvider{ + c.portalProxy.AddAuthProvider(c.GetName(), api.AuthProvider{ Handler: auth.Handler, UserInfo: auth.UserInfo, }) diff --git a/src/jetstream/plugins/kubernetes/auth/cert.go b/src/jetstream/plugins/kubernetes/auth/cert.go index 7deb13b622..392d3e5f5f 100644 --- a/src/jetstream/plugins/kubernetes/auth/cert.go +++ b/src/jetstream/plugins/kubernetes/auth/cert.go @@ -13,7 +13,7 @@ import ( "time" // "github.com/SermoDigital/jose/jws" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -23,11 +23,11 @@ const authConnectTypeCertAuth = "kube-cert-auth" // CertKubeAuth is GKE Authentication with Certificates type CertKubeAuth struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // InitCertKubeAuth creates a GKEKubeAuth -func InitCertKubeAuth(portalProxy interfaces.PortalProxy) *CertKubeAuth { +func InitCertKubeAuth(portalProxy api.PortalProxy) *CertKubeAuth { return &CertKubeAuth{portalProxy: portalProxy} } @@ -36,7 +36,7 @@ func (c *CertKubeAuth) GetName() string { return authConnectTypeCertAuth } -func (c *CertKubeAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interfaces.TokenRecord) error { +func (c *CertKubeAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec api.TokenRecord) error { kubeAuthToken := &KubeCertificate{} err := json.NewDecoder(strings.NewReader(tokenRec.AuthToken)).Decode(kubeAuthToken) if err != nil { @@ -76,7 +76,7 @@ func (c *CertKubeAuth) extractCerts(ec echo.Context) (*KubeCertificate, error) { } -func (c *CertKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Context) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +func (c *CertKubeAuth) FetchToken(cnsiRecord api.CNSIRecord, ec echo.Context) (*api.TokenRecord, *api.CNSIRecord, error) { log.Debug("Kube Certs - FetchToken") kubeCertAuth, err := c.extractCerts(ec) @@ -102,17 +102,17 @@ func (c *CertKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Cont return &tokenRecord, &cnsiRecord, nil } -func (c *CertKubeAuth) GetUserFromToken(cnsiGUID string, cfTokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { - return &interfaces.ConnectedUser{ +func (c *CertKubeAuth) GetUserFromToken(cnsiGUID string, cfTokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { + return &api.ConnectedUser{ GUID: "Kube Cert Auth", Name: "Cert Auth", }, true } -func (c *CertKubeAuth) DoFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (c *CertKubeAuth) DoFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("doCertAuthFlowRequest") - authHandler := func(tokenRec interfaces.TokenRecord, cnsi interfaces.CNSIRecord) (*http.Response, error) { + authHandler := func(tokenRec api.TokenRecord, cnsi api.CNSIRecord) (*http.Response, error) { kubeAuthToken := &KubeCertificate{} err := json.NewDecoder(strings.NewReader(tokenRec.AuthToken)).Decode(kubeAuthToken) @@ -164,7 +164,7 @@ func (c *CertKubeAuth) DoFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *h return c.portalProxy.DoAuthFlowRequest(cnsiRequest, req, authHandler) } -func (c *CertKubeAuth) RefreshCertAuth(skipSSLValidation bool, cnsiGUID, userGUID, client, clientSecret, tokenEndpoint string) (t interfaces.TokenRecord, err error) { +func (c *CertKubeAuth) RefreshCertAuth(skipSSLValidation bool, cnsiGUID, userGUID, client, clientSecret, tokenEndpoint string) (t api.TokenRecord, err error) { log.Debug("RefreshCertAuth") // This shouldn't be called since cert-auth K8S shouldn't expire @@ -176,9 +176,9 @@ func (c *CertKubeAuth) RefreshCertAuth(skipSSLValidation bool, cnsiGUID, userGUI return userToken, nil } -func (c *CertKubeAuth) RegisterJetstreamAuthType(portal interfaces.PortalProxy) { +func (c *CertKubeAuth) RegisterJetstreamAuthType(portal api.PortalProxy) { // Register auth type with Jetstream - c.portalProxy.AddAuthProvider(c.GetName(), interfaces.AuthProvider{ + c.portalProxy.AddAuthProvider(c.GetName(), api.AuthProvider{ Handler: c.DoFlowRequest, UserInfo: c.GetUserFromToken, }) diff --git a/src/jetstream/plugins/kubernetes/auth/gke.go b/src/jetstream/plugins/kubernetes/auth/gke.go index 573f192f08..3268597989 100644 --- a/src/jetstream/plugins/kubernetes/auth/gke.go +++ b/src/jetstream/plugins/kubernetes/auth/gke.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -34,13 +34,13 @@ type GKEConfig struct { // GKEKubeAuth is GKE Authentication for Kubernetes type GKEKubeAuth struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } const authConnectTypeGKE = "gke-auth" // InitGKEKubeAuth creates a GKEKubeAuth -func InitGKEKubeAuth(portalProxy interfaces.PortalProxy) KubeAuthProvider { +func InitGKEKubeAuth(portalProxy api.PortalProxy) KubeAuthProvider { return &GKEKubeAuth{portalProxy: portalProxy} } @@ -49,7 +49,7 @@ func (c *GKEKubeAuth) GetName() string { return authConnectTypeGKE } -func (c *GKEKubeAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interfaces.TokenRecord) error { +func (c *GKEKubeAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec api.TokenRecord) error { gkeInfo := &GKEConfig{} err := json.Unmarshal([]byte(tokenRec.RefreshToken), &gkeInfo) if err != nil { @@ -61,7 +61,7 @@ func (c *GKEKubeAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interfac } // FetchToken will create a token for the GKE Authentication using the POSTed data -func (c *GKEKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Context) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +func (c *GKEKubeAuth) FetchToken(cnsiRecord api.CNSIRecord, ec echo.Context) (*api.TokenRecord, *api.CNSIRecord, error) { log.Debug("FetchToken (GKE)") // We should already have the refresh token in the body sent to us @@ -113,7 +113,7 @@ func (c *GKEKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Conte } // GetUserFromToken gets the username from the GKE Token -func (c *GKEKubeAuth) GetUserFromToken(cnsiGUID string, tokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { +func (c *GKEKubeAuth) GetUserFromToken(cnsiGUID string, tokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { log.Debug("GetUserFromToken (GKE)") gkeInfo := &GKEConfig{} @@ -122,13 +122,13 @@ func (c *GKEKubeAuth) GetUserFromToken(cnsiGUID string, tokenRecord *interfaces. return nil, false } - return &interfaces.ConnectedUser{ + return &api.ConnectedUser{ GUID: gkeInfo.Email, Name: gkeInfo.Email, }, true } -func (c *GKEKubeAuth) DoFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (c *GKEKubeAuth) DoFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("doGKEFlowRequest") authHandler := c.portalProxy.OAuthHandlerFunc(cnsiRequest, req, c.RefreshGKEToken) @@ -136,7 +136,7 @@ func (c *GKEKubeAuth) DoFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *ht } // RefreshGKEToken will refresh a GKE token -func (c *GKEKubeAuth) RefreshGKEToken(skipSSLValidation bool, cnsiGUID, userGUID, client, clientSecret, tokenEndpoint string) (t interfaces.TokenRecord, err error) { +func (c *GKEKubeAuth) RefreshGKEToken(skipSSLValidation bool, cnsiGUID, userGUID, client, clientSecret, tokenEndpoint string) (t api.TokenRecord, err error) { log.Debug("RefreshGKEToken") now := time.Now() @@ -166,9 +166,9 @@ func (c *GKEKubeAuth) RefreshGKEToken(skipSSLValidation bool, cnsiGUID, userGUID return userToken, nil } -func (c *GKEKubeAuth) refreshGKEToken(skipSSLValidation bool, clientID, clientSecret, refreshToken string) (u interfaces.UAAResponse, err error) { +func (c *GKEKubeAuth) refreshGKEToken(skipSSLValidation bool, clientID, clientSecret, refreshToken string) (u api.UAAResponse, err error) { log.Debug("refreshGKEToken") - tokenInfo := interfaces.UAAResponse{} + tokenInfo := api.UAAResponse{} // Go and get a new access token httpClient := c.portalProxy.GetHttpClient(skipSSLValidation) @@ -194,9 +194,9 @@ func (c *GKEKubeAuth) refreshGKEToken(skipSSLValidation bool, clientID, clientSe return tokenInfo, err } -func (c *GKEKubeAuth) RegisterJetstreamAuthType(portal interfaces.PortalProxy) { +func (c *GKEKubeAuth) RegisterJetstreamAuthType(portal api.PortalProxy) { // Register auth type with Jetstream - c.portalProxy.AddAuthProvider(c.GetName(), interfaces.AuthProvider{ + c.portalProxy.AddAuthProvider(c.GetName(), api.AuthProvider{ Handler: c.DoFlowRequest, UserInfo: c.GetUserFromToken, }) diff --git a/src/jetstream/plugins/kubernetes/auth/go.mod b/src/jetstream/plugins/kubernetes/auth/go.mod new file mode 100644 index 0000000000..bd0baccae3 --- /dev/null +++ b/src/jetstream/plugins/kubernetes/auth/go.mod @@ -0,0 +1,56 @@ +module github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/auth + +go 1.21.0 + +replace ( + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes => ../../kubernetes + github.com/kubernetes-sigs/aws-iam-authenticator => github.com/kubernetes-sigs/aws-iam-authenticator v0.3.1-0.20190111160901-390d9087a4bc + k8s.io/client-go => k8s.io/client-go v0.23.17 +) + +require ( + github.com/SermoDigital/jose v0.9.1 + github.com/aws/aws-sdk-go v1.44.324 + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes v0.0.0-00010101000000-000000000000 + github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces v0.0.0-20191015083202-4c24d26ae1ec + sigs.k8s.io/aws-iam-authenticator v0.6.11 + github.com/labstack/echo/v4 v4.11.1 + github.com/sirupsen/logrus v1.9.3 + k8s.io/client-go v0.23.17 +) + +require ( + github.com/cloudfoundry-community/go-cfenv v1.17.0 // indirect + github.com/go-logr/logr v1.2.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/google/go-cmp v0.5.5 // indirect + github.com/google/gofuzz v1.1.0 // indirect + github.com/gorilla/context v1.1.1 // indirect + github.com/gorilla/securecookie v1.1.1 // indirect + github.com/gorilla/sessions v1.1.3 // indirect + github.com/gorilla/websocket v1.4.0 // indirect + github.com/govau/cf-common v0.0.7 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/labstack/echo v3.3.10+incompatible // indirect + github.com/labstack/gommon v0.4.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mitchellh/mapstructure v1.1.2 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect + golang.org/x/crypto v0.11.0 // indirect + golang.org/x/net v0.12.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + k8s.io/apimachinery v0.23.17 // indirect + k8s.io/klog/v2 v2.30.0 // indirect + k8s.io/utils v0.0.0-20211116205334-6203023598ed // indirect + sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect +) diff --git a/src/jetstream/plugins/kubernetes/auth/go.sum b/src/jetstream/plugins/kubernetes/auth/go.sum new file mode 100644 index 0000000000..ae1376def4 --- /dev/null +++ b/src/jetstream/plugins/kubernetes/auth/go.sum @@ -0,0 +1,192 @@ +github.com/SermoDigital/jose v0.9.1 h1:atYaHPD3lPICcbK1owly3aPm0iaJGSGPi0WD4vLznv8= +github.com/SermoDigital/jose v0.9.1/go.mod h1:ARgCUhI1MHQH+ONky/PAtmVHQrP5JlGY0F3poXOp/fA= +github.com/aws/aws-sdk-go v1.44.324 h1:/uja9PtgeeqrZCPOJTenjMLNpciIMuzaRKooq+erG4A= +github.com/aws/aws-sdk-go v1.44.324/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/cloudfoundry-community/go-cfenv v1.17.0 h1:qfxEfn8qKkaHY3ZEk/Y2noY79HBASvNgmtHK9x4+6GY= +github.com/cloudfoundry-community/go-cfenv v1.17.0/go.mod h1:2UgWvQTRXUuIZ/x3KnW6fk6CgPBhcV4UQb/UGIrUyyI= +github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces v0.0.0-20191015083202-4c24d26ae1ec h1:tqPgLDgcslmjOxR5vKMmO/C3saEnxPgLJ04GRkGWtjQ= +github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces v0.0.0-20191015083202-4c24d26ae1ec/go.mod h1:iHH60YxCMwZHKbsAokvNrWvvrhyrWosFpDLtQ1R1zYE= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.1.3 h1:uXoZdcdA5XdXF3QzuSlheVRUvjl+1rKY7zBXL68L9RU= +github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/govau/cf-common v0.0.7 h1:uhp1P6XM6GGzu1+A4C7LELLX/9mCmH6W5DpJZC0kWmo= +github.com/govau/cf-common v0.0.7/go.mod h1:5xL/OfE7wxeyHlXb7iei0rAbdQ/5v6dF18BZknPv7NQ= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kubernetes-sigs/aws-iam-authenticator v0.3.1-0.20190111160901-390d9087a4bc h1:Ttr4Z3ZrMv4rAXn10UAqOC8ACx+F1omvcyV1a3hRArE= +github.com/kubernetes-sigs/aws-iam-authenticator v0.3.1-0.20190111160901-390d9087a4bc/go.mod h1:ItxiN33Ho7Di8wiC4S4XqbH1NLF0DNdDWOd/5MI9gJU= +github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg= +github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= +github.com/labstack/echo/v4 v4.11.1 h1:dEpLU2FLg4UVmvCGPuk/APjlH6GDpbEPti61srUUUs4= +github.com/labstack/echo/v4 v4.11.1/go.mod h1:YuYRTSM3CHs2ybfrL8Px48bO6BAnYIN4l8wSTMP6BDQ= +github.com/labstack/gommon v0.2.8/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4= +github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.6/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v0.0.0-20170224212429-dcecefd839c4/go.mod h1:50wTf68f99/Zt14pr046Tgt3Lp2vLyFZKzbFXTOabXw= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +k8s.io/apimachinery v0.23.17 h1:ipJ0SrpI6EzH8zVw0WhCBldgJhzIamiYIumSGTdFExY= +k8s.io/apimachinery v0.23.17/go.mod h1:87v5Wl9qpHbnapX1PSNgln4oO3dlyjAU3NSIwNhT4Lo= +k8s.io/client-go v0.23.17 h1:MbW05RO5sy+TFw2ds36SDdNSkJbr8DFVaaVrClSA8Vs= +k8s.io/client-go v0.23.17/go.mod h1:X5yz7nbJHS7q8977AKn8BWKgxeAXjl1sFsgstczUsCM= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= +k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/utils v0.0.0-20211116205334-6203023598ed h1:ck1fRPWPJWsMd8ZRFsWc6mh/zHp5fZ/shhbrgPUxDAE= +k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 h1:fD1pz4yfdADVNfFmcP2aBEtudwUQ1AlLnRBALr33v3s= +sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/src/jetstream/plugins/kubernetes/auth/kubeconfig.go b/src/jetstream/plugins/kubernetes/auth/kubeconfig.go index 82f973ee21..b4e218466e 100644 --- a/src/jetstream/plugins/kubernetes/auth/kubeconfig.go +++ b/src/jetstream/plugins/kubernetes/auth/kubeconfig.go @@ -7,7 +7,7 @@ import ( "time" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/config" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -23,7 +23,7 @@ type KubeConfigAuth struct { } // InitKubeConfigAuth -func InitKubeConfigAuth(portalProxy interfaces.PortalProxy) KubeAuthProvider { +func InitKubeConfigAuth(portalProxy api.PortalProxy) KubeAuthProvider { return &KubeConfigAuth{*InitOIDCKubeAuth(portalProxy)} } @@ -31,12 +31,12 @@ func (c *KubeConfigAuth) GetName() string { return AuthConnectTypeKubeConfig } -func (c *KubeConfigAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interfaces.TokenRecord) error { +func (c *KubeConfigAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec api.TokenRecord) error { log.Error("KubeConfigAuth: AddAuthInfo: Not supported") return fmt.Errorf("Not supported: %s", tokenRec.AuthType) } -func (c *KubeConfigAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Context) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +func (c *KubeConfigAuth) FetchToken(cnsiRecord api.CNSIRecord, ec echo.Context) (*api.TokenRecord, *api.CNSIRecord, error) { log.Debug("FetchToken (KubeConfigAuth)") req := ec.Request() @@ -76,7 +76,7 @@ func (c *KubeConfigAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Co return nil, nil, fmt.Errorf("OIDC: Unsupported authentication provider for user: %s", kubeConfigUser.User.AuthProvider.Name) } -func (c *KubeConfigAuth) GetCertAuth(cnsiRecord interfaces.CNSIRecord, user *config.KubeConfigUser) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +func (c *KubeConfigAuth) GetCertAuth(cnsiRecord api.CNSIRecord, user *config.KubeConfigUser) (*api.TokenRecord, *api.CNSIRecord, error) { kubeCertAuth := &KubeCertificate{} @@ -110,9 +110,9 @@ func (c *KubeConfigAuth) GetCertAuth(cnsiRecord interfaces.CNSIRecord, user *con return &tokenRecord, &cnsiRecord, nil } -func (c *KubeConfigAuth) RegisterJetstreamAuthType(portal interfaces.PortalProxy) { +func (c *KubeConfigAuth) RegisterJetstreamAuthType(portal api.PortalProxy) { // Register auth type with Jetstream - c.portalProxy.AddAuthProvider(c.GetName(), interfaces.AuthProvider{ + c.portalProxy.AddAuthProvider(c.GetName(), api.AuthProvider{ Handler: c.portalProxy.DoOidcFlowRequest, UserInfo: nil, }) diff --git a/src/jetstream/plugins/kubernetes/auth/oidc.go b/src/jetstream/plugins/kubernetes/auth/oidc.go index dea26fa43f..5a59275385 100644 --- a/src/jetstream/plugins/kubernetes/auth/oidc.go +++ b/src/jetstream/plugins/kubernetes/auth/oidc.go @@ -4,12 +4,12 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" + "io" "net/http" "time" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/config" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/SermoDigital/jose/jws" "github.com/labstack/echo/v4" @@ -30,11 +30,11 @@ const authConnectTypeOIDC = "OIDC" // OIDCKubeAuth type OIDCKubeAuth struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // InitOIDCKubeAuth -func InitOIDCKubeAuth(portalProxy interfaces.PortalProxy) *OIDCKubeAuth { +func InitOIDCKubeAuth(portalProxy api.PortalProxy) *OIDCKubeAuth { return &OIDCKubeAuth{portalProxy: portalProxy} } @@ -43,8 +43,8 @@ func (c *OIDCKubeAuth) GetName() string { return authConnectTypeOIDC } -func (c *OIDCKubeAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interfaces.TokenRecord) error { - authInfo := &interfaces.OAuth2Metadata{} +func (c *OIDCKubeAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec api.TokenRecord) error { + authInfo := &api.OAuth2Metadata{} err := json.Unmarshal([]byte(tokenRec.Metadata), &authInfo) if err != nil { return err @@ -64,14 +64,14 @@ func (c *OIDCKubeAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interfa return nil } -func (c *OIDCKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Context) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +func (c *OIDCKubeAuth) FetchToken(cnsiRecord api.CNSIRecord, ec echo.Context) (*api.TokenRecord, *api.CNSIRecord, error) { log.Debug("FetchToken (OIDC)") req := ec.Request() // Need to extract the parameters from the request body defer req.Body.Close() - body, err := ioutil.ReadAll(req.Body) + body, err := io.ReadAll(req.Body) if err != nil { return nil, nil, err } @@ -81,7 +81,7 @@ func (c *OIDCKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Cont kubeConfigUser, err := kubeConfig.GetUserForCluster(cnsiRecord.APIEndpoint.String()) if err != nil { - return nil, nil, fmt.Errorf("Unable to find cluster in kubeconfig") + return nil, nil, fmt.Errorf("unable to find cluster in kubeconfig") } // We only support OIDC auth provider at the moment @@ -92,7 +92,7 @@ func (c *OIDCKubeAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Cont return c.GetTokenFromKubeConfigUser(cnsiRecord, kubeConfigUser) } -func (c *OIDCKubeAuth) GetTokenFromKubeConfigUser(cnsiRecord interfaces.CNSIRecord, kubeConfigUser *config.KubeConfigUser) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +func (c *OIDCKubeAuth) GetTokenFromKubeConfigUser(cnsiRecord api.CNSIRecord, kubeConfigUser *config.KubeConfigUser) (*api.TokenRecord, *api.CNSIRecord, error) { oidcConfig, err := c.GetOIDCConfig(kubeConfigUser) if err != nil { @@ -100,9 +100,9 @@ func (c *OIDCKubeAuth) GetTokenFromKubeConfigUser(cnsiRecord interfaces.CNSIReco return nil, nil, errors.New("Can not unmarshal OIDC Auth Provider configuration") } tokenRecord := c.portalProxy.InitEndpointTokenRecord(oidcConfig.Expiry.Unix(), oidcConfig.IDToken, oidcConfig.RefreshToken, false) - tokenRecord.AuthType = interfaces.AuthTypeOIDC + tokenRecord.AuthType = api.AuthTypeOIDC - oauthMetadata := &interfaces.OAuth2Metadata{} + oauthMetadata := &api.OAuth2Metadata{} oauthMetadata.ClientID = oidcConfig.ClientID oauthMetadata.ClientSecret = oidcConfig.ClientSecret oauthMetadata.IssuerURL = oidcConfig.IdpIssuerURL @@ -119,7 +119,7 @@ func (c *OIDCKubeAuth) GetTokenFromKubeConfigUser(cnsiRecord interfaces.CNSIReco } // GetUserFromToken gets the username from the GKE Token -func (c *OIDCKubeAuth) GetUserFromToken(cnsiGUID string, tokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { +func (c *OIDCKubeAuth) GetUserFromToken(cnsiGUID string, tokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { log.Debug("GetUserFromToken (OIDC)") return c.portalProxy.GetCNSIUserFromOAuthToken(cnsiGUID, tokenRecord) } @@ -127,42 +127,48 @@ func (c *OIDCKubeAuth) GetUserFromToken(cnsiGUID string, tokenRecord *interfaces func (c *OIDCKubeAuth) GetOIDCConfig(k *config.KubeConfigUser) (*KubeConfigAuthProviderOIDC, error) { if k.User.AuthProvider.Name != "oidc" { - return nil, errors.New("User doesn't use OIDC") + return nil, errors.New("user doesn't use OIDC") } OIDCConfig := &KubeConfigAuthProviderOIDC{} err := config.UnMarshalHelper(k.User.AuthProvider.Config, OIDCConfig) if err != nil { log.Info(err) - return nil, errors.New("Can not unmarshal OIDC Auth Provider configuration") + return nil, errors.New("can not unmarshal OIDC Auth Provider configuration") } token, err := jws.ParseJWT([]byte(OIDCConfig.IDToken)) if err != nil { log.Info(err) - return nil, errors.New("Can not parse JWT Access token") + return nil, errors.New("can not parse JWT Access token") } - expiry, ok := token.Claims().Expiration() + expiry_string, ok := token.Claims().Get("exp").(string) if !ok { - return nil, errors.New("Can not get Access Token expiry time") + return nil, errors.New("can not get Access Token expiry time claim") } + + expiry, err := time.Parse(time.RFC3339, expiry_string) + if err != nil { + return nil, errors.New(fmt.Sprintf("can not parse Access Token expiry time claim '%s': %s", expiry_string, err)) + } + OIDCConfig.Expiry = expiry return OIDCConfig, nil } -func (c *OIDCKubeAuth) DoFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (c *OIDCKubeAuth) DoFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("DoFlowRequest (OIDC)") return c.portalProxy.DoOidcFlowRequest(cnsiRequest, req) } -func (c *OIDCKubeAuth) RegisterJetstreamAuthType(portal interfaces.PortalProxy) { +func (c *OIDCKubeAuth) RegisterJetstreamAuthType(portal api.PortalProxy) { // No need to register OIDC, as its already built in existing := c.portalProxy.HasAuthProvider(c.GetName()) if !existing { // Register auth type with Jetstream - c.portalProxy.AddAuthProvider(c.GetName(), interfaces.AuthProvider{ + c.portalProxy.AddAuthProvider(c.GetName(), api.AuthProvider{ Handler: c.portalProxy.DoOidcFlowRequest, UserInfo: nil, }) diff --git a/src/jetstream/plugins/kubernetes/auth/token.go b/src/jetstream/plugins/kubernetes/auth/token.go index f81f3c1755..6a4153d14f 100644 --- a/src/jetstream/plugins/kubernetes/auth/token.go +++ b/src/jetstream/plugins/kubernetes/auth/token.go @@ -4,7 +4,7 @@ import ( "net/http" "strings" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" @@ -14,11 +14,11 @@ const AuthConnectTypeKubeToken = "k8s-token" // KubeTokenAuth uses a token (e.g. service account token) type KubeTokenAuth struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // InitKubeTokenAuth -func InitKubeTokenAuth(portalProxy interfaces.PortalProxy) KubeAuthProvider { +func InitKubeTokenAuth(portalProxy api.PortalProxy) KubeAuthProvider { return &KubeTokenAuth{portalProxy} } @@ -26,30 +26,30 @@ func (c *KubeTokenAuth) GetName() string { return AuthConnectTypeKubeToken } -func (c *KubeTokenAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interfaces.TokenRecord) error { +func (c *KubeTokenAuth) AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec api.TokenRecord) error { log.Debug("AddAuthInfo: KubeTokenAuth") // Just add the token in info.Token = tokenRec.AuthToken return nil } -func (c *KubeTokenAuth) FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Context) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) { +func (c *KubeTokenAuth) FetchToken(cnsiRecord api.CNSIRecord, ec echo.Context) (*api.TokenRecord, *api.CNSIRecord, error) { log.Debug("FetchToken (KubeTokenAuth)") token := ec.FormValue("token") tokenRecord := NewKubeTokenAuthTokenRecord(c.portalProxy, token) return tokenRecord, &cnsiRecord, nil } -func NewKubeTokenAuthTokenRecord(portalProxy interfaces.PortalProxy, token string) *interfaces.TokenRecord { +func NewKubeTokenAuthTokenRecord(portalProxy api.PortalProxy, token string) *api.TokenRecord { tokenRecord := portalProxy.InitEndpointTokenRecord(getLargeExpiryTime(), token, "__NONE__", false) tokenRecord.AuthType = AuthConnectTypeKubeToken return &tokenRecord } -func (c *KubeTokenAuth) doTokenFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (c *KubeTokenAuth) doTokenFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("K8S Token auth: doTokenFlowRequest") - authHandler := func(tokenRec interfaces.TokenRecord, cnsi interfaces.CNSIRecord) (*http.Response, error) { + authHandler := func(tokenRec api.TokenRecord, cnsi api.CNSIRecord) (*http.Response, error) { // Token auth has no token refresh or expiry - so much simpler than the OAuth flow req.Header.Set("Authorization", "bearer "+tokenRec.AuthToken) client := c.portalProxy.GetHttpClientForRequest(req, cnsi.SkipSSLValidation) @@ -58,15 +58,15 @@ func (c *KubeTokenAuth) doTokenFlowRequest(cnsiRequest *interfaces.CNSIRequest, return c.portalProxy.DoAuthFlowRequest(cnsiRequest, req, authHandler) } -func (c *KubeTokenAuth) RegisterJetstreamAuthType(portal interfaces.PortalProxy) { +func (c *KubeTokenAuth) RegisterJetstreamAuthType(portal api.PortalProxy) { // Register auth type with Jetstream - c.portalProxy.AddAuthProvider(c.GetName(), interfaces.AuthProvider{ + c.portalProxy.AddAuthProvider(c.GetName(), api.AuthProvider{ Handler: c.doTokenFlowRequest, UserInfo: c.GetUserFromToken, }) } -func (c *KubeTokenAuth) GetUserFromToken(cnsiGUID string, tokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { +func (c *KubeTokenAuth) GetUserFromToken(cnsiGUID string, tokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { log.Debug("GetUserFromToken (KubeTokenAuth)") // See if we can get token info - if we can, use it @@ -81,7 +81,7 @@ func (c *KubeTokenAuth) GetUserFromToken(cnsiGUID string, tokenRecord *interface return nil, false } - return &interfaces.ConnectedUser{ + return &api.ConnectedUser{ GUID: parts[0], Name: parts[0], Scopes: make([]string, 0), diff --git a/src/jetstream/plugins/kubernetes/auth/types.go b/src/jetstream/plugins/kubernetes/auth/types.go index 141797bc68..194f86172f 100644 --- a/src/jetstream/plugins/kubernetes/auth/types.go +++ b/src/jetstream/plugins/kubernetes/auth/types.go @@ -5,7 +5,7 @@ import ( "encoding/json" "net/http" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "github.com/labstack/echo/v4" @@ -14,16 +14,16 @@ import ( // KubeAuthProvider is the interface for Kubernetes Authentication Providers type KubeAuthProvider interface { GetName() string - AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec interfaces.TokenRecord) error - FetchToken(cnsiRecord interfaces.CNSIRecord, ec echo.Context) (*interfaces.TokenRecord, *interfaces.CNSIRecord, error) + AddAuthInfo(info *clientcmdapi.AuthInfo, tokenRec api.TokenRecord) error + FetchToken(cnsiRecord api.CNSIRecord, ec echo.Context) (*api.TokenRecord, *api.CNSIRecord, error) - RegisterJetstreamAuthType(portal interfaces.PortalProxy) + RegisterJetstreamAuthType(portal api.PortalProxy) } // KubeJetstreamAuthProvider is the optional interface that can be implemented if you want to control Jetstream Auth Registration type KubeJetstreamAuthProvider interface { - DoFlowRequest(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) - GetUserFromToken(cnsiGUID string, tokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) + DoFlowRequest(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) + GetUserFromToken(cnsiGUID string, tokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) } // KubeCertificate represents certificate infor for Kube Authentication diff --git a/src/jetstream/plugins/kubernetes/config/kube_config.go b/src/jetstream/plugins/kubernetes/config/kube_config.go index 7bb67f5b6e..14842402a4 100644 --- a/src/jetstream/plugins/kubernetes/config/kube_config.go +++ b/src/jetstream/plugins/kubernetes/config/kube_config.go @@ -6,8 +6,7 @@ import ( "net/url" "reflect" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" - + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" "gopkg.in/yaml.v2" ) diff --git a/src/jetstream/plugins/kubernetes/dashboard/common.go b/src/jetstream/plugins/kubernetes/dashboard/common.go index 7d19495f25..5168ba943e 100644 --- a/src/jetstream/plugins/kubernetes/dashboard/common.go +++ b/src/jetstream/plugins/kubernetes/dashboard/common.go @@ -6,7 +6,7 @@ import ( "fmt" "time" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" @@ -48,7 +48,7 @@ type StatusResponse struct { } // Determine if the specified Kube endpoint has the dashboard installed and ready -func getKubeDashboardPod(p interfaces.PortalProxy, cnsiGUID, userGUID string, labelSelector string) (*v1.Pod, error) { +func getKubeDashboardPod(p api.PortalProxy, cnsiGUID, userGUID string, labelSelector string) (*v1.Pod, error) { log.Debug("kubeDashboardStatus request") response, err := p.DoProxySingleRequest(cnsiGUID, userGUID, "GET", "/api/v1/pods?labelSelector="+labelSelector, nil, nil) @@ -75,7 +75,7 @@ func getKubeDashboardPod(p interfaces.PortalProxy, cnsiGUID, userGUID string, la } // Get the service for the kubernetes dashboard -func getKubeDashboardService(p interfaces.PortalProxy, cnsiGUID, userGUID string, labelSelector string) (ServiceInfo, error) { +func getKubeDashboardService(p api.PortalProxy, cnsiGUID, userGUID string, labelSelector string) (ServiceInfo, error) { log.Debug("getKubeDashboardService request") info := ServiceInfo{} @@ -116,7 +116,7 @@ func getKubeDashboardService(p interfaces.PortalProxy, cnsiGUID, userGUID string return info, nil } -func getKubeDashboardServiceInfo(p interfaces.PortalProxy, endpointGUID, userGUID string) (ServiceInfo, error) { +func getKubeDashboardServiceInfo(p api.PortalProxy, endpointGUID, userGUID string) (ServiceInfo, error) { svc, err := getKubeDashboardService(p, endpointGUID, userGUID, "app%3Dkubernetes-dashboard") if err != nil { svc, err = getKubeDashboardService(p, endpointGUID, userGUID, "k8s-app%3Dkubernetes-dashboard") @@ -125,7 +125,7 @@ func getKubeDashboardServiceInfo(p interfaces.PortalProxy, endpointGUID, userGUI } // Get the service account for the kubernetes dashboard -func getKubeDashboardServiceAccount(p interfaces.PortalProxy, cnsiGUID, userGUID string, labelSelector string) (*v1.ServiceAccount, error) { +func getKubeDashboardServiceAccount(p api.PortalProxy, cnsiGUID, userGUID string, labelSelector string) (*v1.ServiceAccount, error) { log.Debug("getKubeDashboardService request") response, err := p.DoProxySingleRequest(cnsiGUID, userGUID, "GET", "/api/v1/serviceaccounts?labelSelector="+labelSelector, nil, nil) @@ -152,7 +152,7 @@ func getKubeDashboardServiceAccount(p interfaces.PortalProxy, cnsiGUID, userGUID } // Get the service account for the kubernetes dashboard -func getKubeDashboardSecretToken(p interfaces.PortalProxy, cnsiGUID, userGUID string, sa *v1.ServiceAccount) (string, error) { +func getKubeDashboardSecretToken(p api.PortalProxy, cnsiGUID, userGUID string, sa *v1.ServiceAccount) (string, error) { log.Debug("getKubeDashboardSecretToken request") namespace := sa.Namespace diff --git a/src/jetstream/plugins/kubernetes/dashboard/configure.go b/src/jetstream/plugins/kubernetes/dashboard/configure.go index ed648b29d0..a0baf4f45b 100644 --- a/src/jetstream/plugins/kubernetes/dashboard/configure.go +++ b/src/jetstream/plugins/kubernetes/dashboard/configure.go @@ -9,7 +9,7 @@ import ( "net/http" "strings" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" "gopkg.in/yaml.v2" ) @@ -59,7 +59,7 @@ type apiVersionAndKind struct { } // CreateServiceAccount will create a service account for accessing the Kubernetes Dashboard -func CreateServiceAccount(p interfaces.PortalProxy, endpointGUID, userGUID string) error { +func CreateServiceAccount(p api.PortalProxy, endpointGUID, userGUID string) error { log.Debug("CreateServiceAccount") svc, err := getKubeDashboardServiceInfo(p, endpointGUID, userGUID) @@ -102,7 +102,7 @@ func replaceNamespace(definition, namespace string) []byte { } // DeleteServiceAccount will delete the service account -func DeleteServiceAccount(p interfaces.PortalProxy, endpointGUID, userGUID string) error { +func DeleteServiceAccount(p api.PortalProxy, endpointGUID, userGUID string) error { log.Debug("DeleteServiceAccount") svcAccount, err := getKubeDashboardServiceAccount(p, endpointGUID, userGUID, stratosServiceAccountSelector) @@ -126,7 +126,7 @@ func DeleteServiceAccount(p interfaces.PortalProxy, endpointGUID, userGUID strin return nil } -func addErrorMessage(msg, prefix string, response *interfaces.CNSIRequest, err error) string { +func addErrorMessage(msg, prefix string, response *api.CNSIRequest, err error) string { errMsg := "" if err != nil { errMsg = fmt.Sprintf("%s - Error: %v", prefix, err.Error()) @@ -145,7 +145,7 @@ func addErrorMessage(msg, prefix string, response *interfaces.CNSIRequest, err e } // InstallDashboard will install the dashboard into a Kubernetes cluster -func InstallDashboard(p interfaces.PortalProxy, endpointGUID, userGUID string) error { +func InstallDashboard(p api.PortalProxy, endpointGUID, userGUID string) error { // Download the Yaml for the dashboard kubeDashboardImage := p.Env().String("STRATOS_KUBERNETES_DASHBOARD_IMAGE", "") if len(kubeDashboardImage) == 0 { @@ -224,7 +224,7 @@ func isClusterAPI(api string) bool { } // DeleteDashboard will delete the dashboard from Kubernetes cluster -func DeleteDashboard(p interfaces.PortalProxy, endpointGUID, userGUID string) error { +func DeleteDashboard(p api.PortalProxy, endpointGUID, userGUID string) error { log.Debug("DeleteDashboard") // Delete the service diff --git a/src/jetstream/plugins/kubernetes/dashboard/login.go b/src/jetstream/plugins/kubernetes/dashboard/login.go index f27bac8c8d..b0906f0b03 100644 --- a/src/jetstream/plugins/kubernetes/dashboard/login.go +++ b/src/jetstream/plugins/kubernetes/dashboard/login.go @@ -9,7 +9,7 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) type loginResponse struct { @@ -21,7 +21,7 @@ type loginOKResponse struct { } // KubeDashboardLogin will check and log into the Kubernetes Dashboard then redirect to the Dashboard UI -func KubeDashboardLogin(c echo.Context, p interfaces.PortalProxy) error { +func KubeDashboardLogin(c echo.Context, p api.PortalProxy) error { log.Debug("kubeDashboardLogin request") endpointGUID := c.Param("guid") diff --git a/src/jetstream/plugins/kubernetes/dashboard/proxy.go b/src/jetstream/plugins/kubernetes/dashboard/proxy.go index 3c74603107..fe8b714c51 100644 --- a/src/jetstream/plugins/kubernetes/dashboard/proxy.go +++ b/src/jetstream/plugins/kubernetes/dashboard/proxy.go @@ -7,7 +7,7 @@ import ( "net/url" "strings" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" utilnet "k8s.io/apimachinery/pkg/util/net" @@ -15,7 +15,7 @@ import ( ) // KubeDashboardProxy proxies a request to the Kube Dash service using the K8S API -func KubeDashboardProxy(c echo.Context, p interfaces.PortalProxy, config *rest.Config) error { +func KubeDashboardProxy(c echo.Context, p api.PortalProxy, config *rest.Config) error { log.Debugf("KubeDashboardProxy request for: %s", c.Request().RequestURI) cnsiGUID := c.Param("guid") diff --git a/src/jetstream/plugins/kubernetes/dashboard/status.go b/src/jetstream/plugins/kubernetes/dashboard/status.go index d8f844bae5..fde7122ddd 100644 --- a/src/jetstream/plugins/kubernetes/dashboard/status.go +++ b/src/jetstream/plugins/kubernetes/dashboard/status.go @@ -1,13 +1,13 @@ package dashboard import ( - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) const stratosServiceAccountSelector = "stratos-role%3Dkubernetes-dashboard-user" // KubeDashboardStatus will determine if the specified Kube endpoint has the dashboard installed and ready -func KubeDashboardStatus(p interfaces.PortalProxy, endpointGUID, userGUID string, includeToken bool) (*StatusResponse, error) { +func KubeDashboardStatus(p api.PortalProxy, endpointGUID, userGUID string, includeToken bool) (*StatusResponse, error) { status := &StatusResponse{ Endpoint: endpointGUID, diff --git a/src/jetstream/plugins/kubernetes/endpoint_config.go b/src/jetstream/plugins/kubernetes/endpoint_config.go index 8e7b983235..95d2c04677 100644 --- a/src/jetstream/plugins/kubernetes/endpoint_config.go +++ b/src/jetstream/plugins/kubernetes/endpoint_config.go @@ -10,11 +10,11 @@ import ( "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // GetConfigForEndpoint gets a config for the Kubernetes go-client for the specified endpoint -func (c *KubernetesSpecification) GetConfigForEndpoint(masterURL string, token interfaces.TokenRecord) (*restclient.Config, error) { +func (c *KubernetesSpecification) GetConfigForEndpoint(masterURL string, token api.TokenRecord) (*restclient.Config, error) { return clientcmd.BuildConfigFromKubeconfigGetter(masterURL, func() (*clientcmdapi.Config, error) { return c.getKubeConfigForEndpoint(masterURL, token, "") }) @@ -55,7 +55,7 @@ func (c *KubernetesSpecification) GetKubeConfigForEndpointUser(endpointID, userI return c.GetKubeConfigForEndpoint(cnsiRecord.APIEndpoint.String(), tokenRec, "") } -func (c *KubernetesSpecification) getKubeConfigForEndpoint(masterURL string, token interfaces.TokenRecord, namespace string) (*clientcmdapi.Config, error) { +func (c *KubernetesSpecification) getKubeConfigForEndpoint(masterURL string, token api.TokenRecord, namespace string) (*clientcmdapi.Config, error) { name := "cluster-0" @@ -90,7 +90,7 @@ func (c *KubernetesSpecification) getKubeConfigForEndpoint(masterURL string, tok } // GetKubeConfigForEndpoint gets a Kube Config file contents for the specified endpoint -func (c *KubernetesSpecification) GetKubeConfigForEndpoint(masterURL string, token interfaces.TokenRecord, namespace string) (string, error) { +func (c *KubernetesSpecification) GetKubeConfigForEndpoint(masterURL string, token api.TokenRecord, namespace string) (string, error) { config, err := c.getKubeConfigForEndpoint(masterURL, token, namespace) if err != nil { @@ -105,7 +105,7 @@ func (c *KubernetesSpecification) GetKubeConfigForEndpoint(masterURL string, tok return string(kconfig), nil } -func (c *KubernetesSpecification) addAuthInfoForEndpoint(info *clientcmdapi.AuthInfo, tokenRec interfaces.TokenRecord) error { +func (c *KubernetesSpecification) addAuthInfoForEndpoint(info *clientcmdapi.AuthInfo, tokenRec api.TokenRecord) error { log.Debug("addAuthInfoForEndpoint") var authProvider = c.GetAuthProvider(tokenRec.AuthType) diff --git a/src/jetstream/plugins/kubernetes/get_release.go b/src/jetstream/plugins/kubernetes/get_release.go index 62795d8a94..8db3dd31c1 100644 --- a/src/jetstream/plugins/kubernetes/get_release.go +++ b/src/jetstream/plugins/kubernetes/get_release.go @@ -13,7 +13,7 @@ import ( "helm.sh/helm/v3/pkg/action" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/helm" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) const ( @@ -101,7 +101,7 @@ func (c *KubernetesSpecification) GetReleaseStatus(ec echo.Context) error { } // Upgrade to a web socket - ws, pingTicker, err := interfaces.UpgradeToWebSocket(ec) + ws, pingTicker, err := api.UpgradeToWebSocket(ec) if err != nil { return err } diff --git a/src/jetstream/plugins/kubernetes/go.mod b/src/jetstream/plugins/kubernetes/go.mod index e5d44dd87d..b332e924ef 100644 --- a/src/jetstream/plugins/kubernetes/go.mod +++ b/src/jetstream/plugins/kubernetes/go.mod @@ -1,38 +1,43 @@ module github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes -go 1.12 +go 1.20 require ( - github.com/Masterminds/semver v1.4.2 // indirect - github.com/Masterminds/sprig v2.18.0+incompatible // indirect github.com/SermoDigital/jose v0.9.1 github.com/aws/aws-sdk-go v1.17.5 - github.com/chai2010/gettext-go v0.0.0-20170215093142-bf70f2a70fb1 // indirect - github.com/docker/docker v1.13.1 // indirect - github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484 // indirect github.com/ghodss/yaml v1.0.0 github.com/gorilla/websocket v1.4.0 - github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc // indirect - github.com/heptio/authenticator v0.3.0 // indirect github.com/kubernetes-sigs/aws-iam-authenticator v0.3.0 github.com/labstack/echo v3.3.10+incompatible + github.com/sirupsen/logrus v1.9.0 + github.com/smartystreets/goconvey v1.6.4 + gopkg.in/yaml.v2 v2.4.0 + helm.sh/helm/v3 v3.12.3 + k8s.io/api v0.27.3 + k8s.io/apimachinery v0.28.0 + k8s.io/client-go v0.27.3 +) + +require ( + github.com/Masterminds/semver v1.4.2 // indirect + github.com/Masterminds/sprig v2.18.0+incompatible // indirect + github.com/chai2010/gettext-go v1.0.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/docker/docker v23.0.1+incompatible // indirect + github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484 // indirect + github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc // indirect + github.com/heptio/authenticator v0.3.0 // indirect github.com/russross/blackfriday v2.0.0+incompatible // indirect github.com/satori/go.uuid v1.2.0 // indirect github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect - github.com/sirupsen/logrus v1.4.2 - github.com/smartystreets/goconvey v1.6.4 github.com/technosophos/moniker v0.0.0-20180509230615-a5dbd03a2245 // indirect gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 // indirect - gopkg.in/yaml.v2 v2.2.4 - helm.sh/helm/v3 v3.0.0 - k8s.io/api v0.0.0-20191016110408-35e52d86657a - k8s.io/apimachinery v0.0.0-20191004115801-a2eda9f80ab8 - k8s.io/client-go v0.0.0-20191016111102-bec269661e48 ) replace ( github.com/SermoDigital/jose => github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc - github.com/cloudfoundry-incubator/stratos/src/jetstream => ../.. + github.com/cloudfoundry-incubator/stratos/src/jetstream => ../../../jetstream + github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/auth => ./auth github.com/docker/docker => github.com/moby/moby v0.7.3-0.20190826074503-38ab9da00309 github.com/kubernetes-sigs/aws-iam-authenticator => github.com/kubernetes-sigs/aws-iam-authenticator v0.3.1-0.20190111160901-390d9087a4bc github.com/russross/blackfriday v2.0.0+incompatible => github.com/russross/blackfriday v1.5.2 diff --git a/src/jetstream/plugins/kubernetes/go.sum b/src/jetstream/plugins/kubernetes/go.sum index 3159ac83df..60dd54f774 100644 --- a/src/jetstream/plugins/kubernetes/go.sum +++ b/src/jetstream/plugins/kubernetes/go.sum @@ -82,6 +82,7 @@ github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tj github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= github.com/chai2010/gettext-go v0.0.0-20170215093142-bf70f2a70fb1 h1:HD4PLRzjuCVW79mQ0/pdsalOLHJ+FaEoqJLxfltpb2U= github.com/chai2010/gettext-go v0.0.0-20170215093142-bf70f2a70fb1/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudfoundry-community/go-cfenv v1.17.0 h1:qfxEfn8qKkaHY3ZEk/Y2noY79HBASvNgmtHK9x4+6GY= github.com/cloudfoundry-community/go-cfenv v1.17.0/go.mod h1:2UgWvQTRXUuIZ/x3KnW6fk6CgPBhcV4UQb/UGIrUyyI= @@ -503,9 +504,8 @@ github.com/rubenv/sql-migrate v0.0.0-20190902133344-8926f37f0bc1/go.mod h1:WS0rl github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v2.0.0 h1:L7Oc72h7rDqGkbUorN/ncJ4N/y220/YRezHvBoKLOFA= -github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v2.0.0/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= @@ -515,6 +515,7 @@ github.com/sirupsen/logrus v1.3.0 h1:hI/7Q+DtNZ2kINb6qt/lS+IyXnHQe9e90POfeewL/ME github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= @@ -541,6 +542,7 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/technosophos/moniker v0.0.0-20180509230615-a5dbd03a2245 h1:DNVk+NIkGS0RbLkjQOLCJb/759yfCysThkMbl7EXxyY= github.com/technosophos/moniker v0.0.0-20180509230615-a5dbd03a2245/go.mod h1:O1c8HleITsZqzNZDjSNzirUGsMT0oGu9LhHKoJrqO+A= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -665,6 +667,7 @@ golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191028164358-195ce5e7f934 h1:u/E0NqCIWRDAo9WCFo6Ko49njPFDLSd3z+X1HgWDMpE= golang.org/x/sys v0.0.0-20191028164358-195ce5e7f934/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -746,6 +749,8 @@ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= helm.sh/helm v2.14.3+incompatible h1:M3xvix8x41Xjc/ZGARGpUOTjxTBrb86yZG5FmCjgIew= @@ -753,6 +758,7 @@ helm.sh/helm/v3 v3.0.0-beta.4 h1:gK5iJztTqr4Ai712LSS2fxqaW2b635GxunkBinEBCXY= helm.sh/helm/v3 v3.0.0-beta.4/go.mod h1:ZQ5l9gLmS7attkwdVKXxygj84XE4dzZIdr3frQ9H7No= helm.sh/helm/v3 v3.0.0 h1:or/9cs1GgfcTQeEnR2CVJNw893/rmqIG1KsNHmUiSFw= helm.sh/helm/v3 v3.0.0/go.mod h1:sI7B9yfvMgxtTPMWdk1jSKJ2aa59UyP9qhPydqW6mgo= +helm.sh/helm/v3 v3.12.3/go.mod h1:KPKQiX9IP5HX7o5YnnhViMnNuKiL/lJBVQ47GHe1R0k= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -766,6 +772,7 @@ k8s.io/api v0.0.0-20191016110408-35e52d86657a h1:VVUE9xTCXP6KUPMf92cQmN88orz600e k8s.io/api v0.0.0-20191016110408-35e52d86657a/go.mod h1:/L5qH+AD540e7Cetbui1tuJeXdmNhO8jM6VkXeDdDhQ= k8s.io/api v0.0.0-20191115135540-bbc9463b57e5 h1:o1kKo74JxBOOhxPdKzTx54MJHwu+Z6Lv5/1tu8Qf9eM= k8s.io/api v0.0.0-20191115135540-bbc9463b57e5/go.mod h1:iA/8arsvelvo4IDqIhX4IbjTEKBGgvsf2OraTuRtLFU= +k8s.io/api v0.27.3/go.mod h1:C4BNvZnQOF7JA/0Xed2S+aUyJSfTGkGFxLXz9MnpIpg= k8s.io/apiextensions-apiserver v0.0.0-20190221221350-bfb440be4b87 h1:BMfPZfi3CkPd9e9Qbm+/AFgE6qXWQcbzUvC91LR3m7w= k8s.io/apiextensions-apiserver v0.0.0-20190221221350-bfb440be4b87/go.mod h1:IxkesAMoaCRoLrPJdZNZUQp9NfZnzqaVzLhb2VEQzXE= k8s.io/apiextensions-apiserver v0.0.0-20190225215027-42f453e3c54a h1:+yPI0R62TeitWAXHh5K5xVQrUF1JQwK+nrl5Lz6213E= @@ -782,6 +789,8 @@ k8s.io/apimachinery v0.0.0-20191004115801-a2eda9f80ab8 h1:Iieh/ZEgT3BWwbLD5qEKcY k8s.io/apimachinery v0.0.0-20191004115801-a2eda9f80ab8/go.mod h1:llRdnznGEAqC3DcNm6yEj472xaFVfLM7hnYofMb12tQ= k8s.io/apimachinery v0.0.0-20191115015347-3c7067801da2 h1:TSH6UZ+y3etc/aDbVqow1NT8o7SJXkxhLKbp3Ywhyvg= k8s.io/apimachinery v0.0.0-20191115015347-3c7067801da2/go.mod h1:dXFS2zaQR8fyzuvRdJDHw2Aerij/yVGJSre0bZQSVJA= +k8s.io/apimachinery v0.28.0 h1:ScHS2AG16UlYWk63r46oU3D5y54T53cVI5mMJwwqFNA= +k8s.io/apimachinery v0.28.0/go.mod h1:X0xh/chESs2hP9koe+SdIAcXWcQ+RM5hy0ZynB+yEvw= k8s.io/apiserver v0.0.0-20190221215341-5838f549963b h1:yFFYCR/UVj6hsYX6yRbY3CJ3917NF7tn0hwcdUil1aI= k8s.io/apiserver v0.0.0-20190221215341-5838f549963b/go.mod h1:6bqaTSOSJavUIXUtfaR9Os9JtTCm8ZqH2SUl2S60C4w= k8s.io/apiserver v0.0.0-20190225213950-239e48e34c98 h1:aC93uSkvMU+AbozPRy72NtzFi7lefwzh4jKNuJZ8+ug= @@ -795,6 +804,7 @@ k8s.io/cli-runtime v0.0.0-20191016114015-74ad18325ed5 h1:8ZfMjkMBzcXEawLsYHg9lDM k8s.io/cli-runtime v0.0.0-20191016114015-74ad18325ed5/go.mod h1:sDl6WKSQkDM6zS1u9F49a0VooQ3ycYFBFLqd2jf2Xfo= k8s.io/client-go v0.0.0-20191016111102-bec269661e48 h1:C2XVy2z0dV94q9hSSoCuTPp1KOG7IegvbdXuz9VGxoU= k8s.io/client-go v0.0.0-20191016111102-bec269661e48/go.mod h1:hrwktSwYGI4JK+TJA3dMaFyyvHVi/aLarVHpbs8bgCU= +k8s.io/client-go v0.27.3/go.mod h1:2MBEKuTo6V1lbKy3z1euEGnhPfGZLKTS9tiJ2xodM48= k8s.io/client-go v2.0.0-alpha.0.0.20190202011228-6e4752048fde+incompatible h1:xkYgpj1zwmLkSh7QASe/GUMTyjPI3hwHy7k/RcQSp2A= k8s.io/client-go v2.0.0-alpha.0.0.20190202011228-6e4752048fde+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= k8s.io/client-go v10.0.0+incompatible h1:F1IqCqw7oMBzDkqlcBymRq1450wD0eNqLE9jzUrIi34= diff --git a/src/jetstream/plugins/kubernetes/helm/job.go b/src/jetstream/plugins/kubernetes/helm/job.go index 523dde9f79..1853cd420c 100644 --- a/src/jetstream/plugins/kubernetes/helm/job.go +++ b/src/jetstream/plugins/kubernetes/helm/job.go @@ -3,7 +3,7 @@ package helm import ( log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // KubeResourceJob = Resource(s) that we need to go and fetch @@ -28,12 +28,12 @@ type KubeResourceJobResult struct { // KubeAPIJob represents a set of jobs to run against the Kube API type KubeAPIJob struct { - Jetstream interfaces.PortalProxy + Jetstream api.PortalProxy Jobs []KubeResourceJob } // NewKubeAPIJob returns a helper that can execute all jobs and return results -func NewKubeAPIJob(jetstream interfaces.PortalProxy, jobs []KubeResourceJob) *KubeAPIJob { +func NewKubeAPIJob(jetstream api.PortalProxy, jobs []KubeResourceJob) *KubeAPIJob { r := &KubeAPIJob{ Jetstream: jetstream, Jobs: jobs, @@ -67,7 +67,7 @@ func (j *KubeAPIJob) Run() []KubeResourceJobResult { return res } -func (j *KubeAPIJob) restWorker(jetstream interfaces.PortalProxy, id int, jobs <-chan KubeResourceJob, results chan<- KubeResourceJobResult) { +func (j *KubeAPIJob) restWorker(jetstream api.PortalProxy, id int, jobs <-chan KubeResourceJob, results chan<- KubeResourceJobResult) { for job := range jobs { response, err := j.Jetstream.DoProxySingleRequest(job.Endpoint, job.User, "GET", job.URL, nil, nil) log.Debugf("Rest Worker finished for: %s - %d", job.URL, response.StatusCode) diff --git a/src/jetstream/plugins/kubernetes/helm/release.go b/src/jetstream/plugins/kubernetes/helm/release.go index 915d1c8a2d..a02d01812f 100644 --- a/src/jetstream/plugins/kubernetes/helm/release.go +++ b/src/jetstream/plugins/kubernetes/helm/release.go @@ -9,7 +9,7 @@ import ( "reflect" "strings" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" "helm.sh/helm/v3/pkg/release" appsv1 "k8s.io/api/apps/v1" @@ -59,7 +59,7 @@ func (r *KubeResource) getID() string { } // NewHelmRelease represents extended info about a Helm Release -func NewHelmRelease(info *release.Release, endpoint, user string, jetstream interfaces.PortalProxy) *HelmRelease { +func NewHelmRelease(info *release.Release, endpoint, user string, jetstream api.PortalProxy) *HelmRelease { r := &HelmRelease{ Release: info, Endpoint: endpoint, @@ -256,7 +256,7 @@ func (r *HelmRelease) processPodSelector(kres KubeResource, selector *metav1.Lab // UpdatePods will run the jobs needed to get the pods // This uses the selectors to find the pods - so new pods should be picked up -func (r *HelmRelease) UpdatePods(jetstream interfaces.PortalProxy) { +func (r *HelmRelease) UpdatePods(jetstream api.PortalProxy) { var jobs []KubeResourceJob for _, job := range r.PodJobs { jobs = append(jobs, job) @@ -338,7 +338,7 @@ func (r *HelmRelease) processPodOwners(pod v1.Pod) { } } -func (r *HelmRelease) UpdateResources(jetstream interfaces.PortalProxy) { +func (r *HelmRelease) UpdateResources(jetstream api.PortalProxy) { // This will be an array of resources runner := NewKubeAPIJob(jetstream, r.Jobs) res := runner.Run() diff --git a/src/jetstream/plugins/kubernetes/install_release.go b/src/jetstream/plugins/kubernetes/install_release.go index c903c040a9..ea2545d8ef 100644 --- a/src/jetstream/plugins/kubernetes/install_release.go +++ b/src/jetstream/plugins/kubernetes/install_release.go @@ -2,6 +2,7 @@ package kubernetes import ( "bytes" + "context" "encoding/json" "fmt" @@ -16,7 +17,7 @@ import ( "helm.sh/helm/v3/pkg/chart" "helm.sh/helm/v3/pkg/chart/loader" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) const chartCollection = "charts" @@ -56,17 +57,17 @@ func (c *KubernetesSpecification) InstallRelease(ec echo.Context) error { var params installRequest err := json.Unmarshal(buf.Bytes(), ¶ms) if err != nil { - return interfaces.NewJetstreamUserErrorf("Could not get Create Release Parameters: %v+", err) + return api.NewJetstreamUserErrorf("Could not get Create Release Parameters: %v+", err) } // Client must give us the download URL for the chart if len(params.ChartURL) == 0 { - return interfaces.NewJetstreamUserError("Client did not supply Chart download URL") + return api.NewJetstreamUserError("Client did not supply Chart download URL") } chart, err := c.loadChart(params.ChartURL) if err != nil { - return interfaces.NewJetstreamErrorf("Could not load chart: %v+", err) + return api.NewJetstreamErrorf("Could not load chart: %v+", err) } endpointGUID := params.Endpoint @@ -74,7 +75,7 @@ func (c *KubernetesSpecification) InstallRelease(ec echo.Context) error { config, hc, err := c.GetHelmConfiguration(endpointGUID, userGUID, params.Namespace) if err != nil { - return interfaces.NewJetstreamUserErrorf("Could not get Helm Configuration for endpoint: %+v", err) + return api.NewJetstreamUserErrorf("Could not get Helm Configuration for endpoint: %+v", err) } defer hc.Cleanup() @@ -82,23 +83,24 @@ func (c *KubernetesSpecification) InstallRelease(ec echo.Context) error { userSuppliedValues := map[string]interface{}{} if err := yaml.Unmarshal([]byte(params.Values), &userSuppliedValues); err != nil { // Could not parse the user's values - return interfaces.NewJetstreamUserErrorf("Could not parse values: %+v", err) + return api.NewJetstreamUserErrorf("Could not parse values: %+v", err) } // In Helm 3, the namespace must already exist kubeClient, _ := c.GetConfigForEndpointUser(endpointGUID, userGUID) clientset, _ := kubernetes.NewForConfig(kubeClient) coreclient := clientset.CoreV1() - _, err = coreclient.Namespaces().Get(params.Namespace, metav1.GetOptions{}) + ctx := context.Background() + _, err = coreclient.Namespaces().Get(ctx, params.Namespace, metav1.GetOptions{}) if err != nil { - return interfaces.NewJetstreamErrorf("Namespace '%s' does not exist", params.Namespace) + return api.NewJetstreamErrorf("Namespace '%s' does not exist", params.Namespace) } // Check release name is valid and does not already exist statusAction := action.NewStatus(config) _, err = statusAction.Run(params.Name) if err == nil { - return interfaces.NewJetstreamUserError("A Release with that name already exists - please choose another") + return api.NewJetstreamUserError("A Release with that name already exists - please choose another") } install := action.NewInstall(config) @@ -107,7 +109,7 @@ func (c *KubernetesSpecification) InstallRelease(ec echo.Context) error { release, err := install.Run(chart, userSuppliedValues) if err != nil { - return interfaces.NewJetstreamUserErrorf(fmt.Sprintf("Error installing: %+v", err)) + return api.NewJetstreamUserErrorf(fmt.Sprintf("Error installing: %+v", err)) } return ec.JSON(200, release) @@ -142,7 +144,7 @@ func (c *KubernetesSpecification) DeleteRelease(ec echo.Context) error { config, hc, err := c.GetHelmConfiguration(endpointGUID, userGUID, namespace) if err != nil { - return interfaces.NewJetstreamErrorf("Could not get Helm Configuration for endpoint: %+v", err) + return api.NewJetstreamErrorf("Could not get Helm Configuration for endpoint: %+v", err) } defer hc.Cleanup() @@ -150,7 +152,7 @@ func (c *KubernetesSpecification) DeleteRelease(ec echo.Context) error { uninstall := action.NewUninstall(config) deleteResponse, err := uninstall.Run(releaseName) if err != nil { - return interfaces.NewJetstreamError("Could not delete Helm Release") + return api.NewJetstreamError("Could not delete Helm Release") } return ec.JSON(200, deleteResponse) @@ -166,7 +168,7 @@ func (c *KubernetesSpecification) GetReleaseHistory(ec echo.Context) error { config, hc, err := c.GetHelmConfiguration(endpointGUID, userGUID, namespace) if err != nil { - return interfaces.NewJetstreamErrorf("Could not get Helm Configuration for endpoint: %+v", err) + return api.NewJetstreamErrorf("Could not get Helm Configuration for endpoint: %+v", err) } defer hc.Cleanup() @@ -174,7 +176,7 @@ func (c *KubernetesSpecification) GetReleaseHistory(ec echo.Context) error { history := action.NewHistory(config) historyResponse, err := history.Run(releaseName) if err != nil { - return interfaces.NewJetstreamError("Could not get history for the Helm Release") + return api.NewJetstreamError("Could not get history for the Helm Release") } return ec.JSON(200, historyResponse) @@ -195,22 +197,22 @@ func (c *KubernetesSpecification) UpgradeRelease(ec echo.Context) error { var params upgradeRequest err := json.Unmarshal(buf.Bytes(), ¶ms) if err != nil { - return interfaces.NewJetstreamErrorf("Could not get Upgrade Release Parameters: %+v", err) + return api.NewJetstreamErrorf("Could not get Upgrade Release Parameters: %+v", err) } // Client must give us the download URL for the chart if len(params.ChartURL) == 0 { - return interfaces.NewJetstreamErrorf("Client did not supply Chart download URL") + return api.NewJetstreamErrorf("Client did not supply Chart download URL") } chart, err := c.loadChart(params.ChartURL) if err != nil { - return interfaces.NewJetstreamErrorf("Could not load chart for upgrade: %+v", err) + return api.NewJetstreamErrorf("Could not load chart for upgrade: %+v", err) } config, hc, err := c.GetHelmConfiguration(endpointGUID, userGUID, namespace) if err != nil { - return interfaces.NewJetstreamErrorf("Could not get Helm Configuration for endpoint: %+v", err) + return api.NewJetstreamErrorf("Could not get Helm Configuration for endpoint: %+v", err) } defer hc.Cleanup() @@ -218,13 +220,13 @@ func (c *KubernetesSpecification) UpgradeRelease(ec echo.Context) error { userSuppliedValues := map[string]interface{}{} if err := yaml.Unmarshal([]byte(params.Values), &userSuppliedValues); err != nil { // Could not parse the user's values - return interfaces.NewJetstreamErrorf("Could not parse values: %+v", err) + return api.NewJetstreamErrorf("Could not parse values: %+v", err) } upgrade := action.NewUpgrade(config) upgradeResponse, err := upgrade.Run(releaseName, chart, userSuppliedValues) if err != nil { - return interfaces.NewJetstreamErrorf("Could not upgrade Helm Release: %+v", err) + return api.NewJetstreamErrorf("Could not upgrade Helm Release: %+v", err) } return ec.JSON(200, upgradeResponse) diff --git a/src/jetstream/plugins/kubernetes/kube_dashboard.go b/src/jetstream/plugins/kubernetes/kube_dashboard.go index 121d31f461..659a0d263a 100644 --- a/src/jetstream/plugins/kubernetes/kube_dashboard.go +++ b/src/jetstream/plugins/kubernetes/kube_dashboard.go @@ -10,11 +10,11 @@ import ( "k8s.io/client-go/rest" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/dashboard" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // Get the config for the endpoint -func (k *KubernetesSpecification) getConfig(cnsiRecord *interfaces.CNSIRecord, tokenRecord *interfaces.TokenRecord) (*rest.Config, error) { +func (k *KubernetesSpecification) getConfig(cnsiRecord *api.CNSIRecord, tokenRecord *api.TokenRecord) (*rest.Config, error) { masterURL := cnsiRecord.APIEndpoint.String() return k.GetConfigForEndpoint(masterURL, *tokenRecord) } @@ -59,7 +59,7 @@ func (k *KubernetesSpecification) kubeDashboardStatus(c echo.Context) error { status, _ := dashboard.KubeDashboardStatus(p, endpointGUID, userGUID, false) jsonString, err := json.Marshal(status) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Could not Kubernetes Dashboard status", "Could not Kubernetes Dashboard status") @@ -85,7 +85,7 @@ func (k *KubernetesSpecification) kubeDashboardCreateServiceAccount(c echo.Conte err := dashboard.CreateServiceAccount(p, endpointGUID, userGUID) if err != nil { - return interfaces.NewHTTPShadowError(http.StatusInternalServerError, err.Error(), err.Error()) + return api.NewHTTPShadowError(http.StatusInternalServerError, err.Error(), err.Error()) } c.Response().Header().Set("Content-Type", "application/json") @@ -101,7 +101,7 @@ func (k *KubernetesSpecification) kubeDashboardDeleteServiceAccount(c echo.Conte err := dashboard.DeleteServiceAccount(p, endpointGUID, userGUID) if err != nil { - return interfaces.NewHTTPShadowError(http.StatusInternalServerError, err.Error(), err.Error()) + return api.NewHTTPShadowError(http.StatusInternalServerError, err.Error(), err.Error()) } c.Response().Header().Set("Content-Type", "application/json") @@ -117,7 +117,7 @@ func (k *KubernetesSpecification) kubeDashboardInstallDashboard(c echo.Context) err := dashboard.InstallDashboard(p, endpointGUID, userGUID) if err != nil { - return interfaces.NewHTTPShadowError(http.StatusInternalServerError, err.Error(), err.Error()) + return api.NewHTTPShadowError(http.StatusInternalServerError, err.Error(), err.Error()) } c.Response().Header().Set("Content-Type", "application/json") @@ -133,7 +133,7 @@ func (k *KubernetesSpecification) kubeDashboardDeleteDashboard(c echo.Context) e err := dashboard.DeleteDashboard(p, endpointGUID, userGUID) if err != nil { - return interfaces.NewHTTPShadowError(http.StatusInternalServerError, err.Error(), err.Error()) + return api.NewHTTPShadowError(http.StatusInternalServerError, err.Error(), err.Error()) } c.Response().Header().Set("Content-Type", "application/json") diff --git a/src/jetstream/plugins/kubernetes/list_releases.go b/src/jetstream/plugins/kubernetes/list_releases.go index 10be828efc..b7b302f5a6 100644 --- a/src/jetstream/plugins/kubernetes/list_releases.go +++ b/src/jetstream/plugins/kubernetes/list_releases.go @@ -6,7 +6,7 @@ import ( "helm.sh/helm/v3/pkg/action" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // ListReleases will list the helm releases for all endpoints @@ -25,7 +25,7 @@ func (c *KubernetesSpecification) ListReleases(ec echo.Context) error { } // List releases for a single endpoint -func (c *KubernetesSpecification) listReleases(ep *interfaces.ConnectedEndpoint, done chan KubeProxyResponse) { +func (c *KubernetesSpecification) listReleases(ep *api.ConnectedEndpoint, done chan KubeProxyResponse) { response := KubeProxyResponse{ Endpoint: ep.GUID, diff --git a/src/jetstream/plugins/kubernetes/main.go b/src/jetstream/plugins/kubernetes/main.go index 591963ecaa..36ad4d201e 100644 --- a/src/jetstream/plugins/kubernetes/main.go +++ b/src/jetstream/plugins/kubernetes/main.go @@ -1,17 +1,17 @@ package kubernetes import ( + "crypto/x509" "encoding/json" "fmt" "io/ioutil" "net/http" "net/url" "strconv" - "strings" "errors" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" @@ -22,7 +22,7 @@ import ( // KubernetesSpecification is the endpoint that adds Kubernetes support to the backend type KubernetesSpecification struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy endpointType string kubeTerminal *terminal.KubeTerminal } @@ -61,11 +61,11 @@ const ( ) func init() { - interfaces.AddPlugin("kubernetes", nil, Init) + api.AddPlugin("kubernetes", nil, Init) } // Init creates a new instance of the Kubernetes plugin -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { kubeTerminal := terminal.NewKubeTerminal(portalProxy) kube := &KubernetesSpecification{portalProxy: portalProxy, endpointType: kubeEndpointType, kubeTerminal: kubeTerminal} if kubeTerminal != nil { @@ -74,15 +74,15 @@ func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) return kube, nil } -func (c *KubernetesSpecification) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (c *KubernetesSpecification) GetEndpointPlugin() (api.EndpointPlugin, error) { return c, nil } -func (c *KubernetesSpecification) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (c *KubernetesSpecification) GetRoutePlugin() (api.RoutePlugin, error) { return c, nil } -func (c *KubernetesSpecification) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (c *KubernetesSpecification) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented!") } @@ -99,7 +99,7 @@ func (c *KubernetesSpecification) Register(echoContext echo.Context) error { return c.portalProxy.RegisterEndpoint(echoContext, c.Info) } -func (c *KubernetesSpecification) Validate(userGUID string, cnsiRecord interfaces.CNSIRecord, tokenRecord interfaces.TokenRecord) error { +func (c *KubernetesSpecification) Validate(userGUID string, cnsiRecord api.CNSIRecord, tokenRecord api.TokenRecord) error { log.Debugf("Validating Kubernetes endpoint connection for user: %s", userGUID) response, err := c.portalProxy.DoProxySingleRequest(cnsiRecord.GUID, userGUID, "GET", "api/v1/pods?limit=1", nil, nil) if err != nil { @@ -116,7 +116,7 @@ func (c *KubernetesSpecification) Validate(userGUID string, cnsiRecord interface return nil } -func (c *KubernetesSpecification) Connect(ec echo.Context, cnsiRecord interfaces.CNSIRecord, userID string) (*interfaces.TokenRecord, bool, error) { +func (c *KubernetesSpecification) Connect(ec echo.Context, cnsiRecord api.CNSIRecord, userID string) (*api.TokenRecord, bool, error) { log.Debug("Kubernetes Connect...") connectType := ec.FormValue("connect_type") @@ -193,11 +193,11 @@ func (c *KubernetesSpecification) AddSessionGroupRoutes(echoGroup *echo.Group) { } } -func (c *KubernetesSpecification) Info(apiEndpoint string, skipSSLValidation bool) (interfaces.CNSIRecord, interface{}, error) { +func (c *KubernetesSpecification) Info(apiEndpoint string, skipSSLValidation bool) (api.CNSIRecord, interface{}, error) { log.Debug("Kubernetes Info") - var v2InfoResponse interfaces.V2Info - var newCNSI interfaces.CNSIRecord + var v2InfoResponse api.V2Info + var newCNSI api.CNSIRecord newCNSI.CNSIType = kubeEndpointType @@ -272,7 +272,7 @@ func parseErrorResponse(body []byte) error { return errors.New("Could not understand response from Kubernetes endpoint") } -func (c *KubernetesSpecification) UpdateMetadata(info *interfaces.Info, userGUID string, echoContext echo.Context) { +func (c *KubernetesSpecification) UpdateMetadata(info *api.Info, userGUID string, echoContext echo.Context) { } func (c *KubernetesSpecification) RequiresCert(ec echo.Context) error { @@ -288,7 +288,7 @@ func (c *KubernetesSpecification) RequiresCert(ec echo.Context) error { Message string } if err != nil { - if strings.Contains(err.Error(), "x509: certificate") { + if errors.Is(err, new(x509.CertificateInvalidError)) { response.Status = http.StatusOK response.Required = true } else { diff --git a/src/jetstream/plugins/kubernetes/terminal/cleanup.go b/src/jetstream/plugins/kubernetes/terminal/cleanup.go index 621921e1e5..c23dd674ae 100644 --- a/src/jetstream/plugins/kubernetes/terminal/cleanup.go +++ b/src/jetstream/plugins/kubernetes/terminal/cleanup.go @@ -1,6 +1,7 @@ package terminal import ( + "context" "math/rand" "strconv" "time" @@ -30,11 +31,14 @@ func (k *KubeTerminal) cleanup() { // Get all pods with a given label podClient, secretClient, err := k.getClients() + + ctx := context.Background() + if err == nil { // Only want the pods that are kube terminals options := metaV1.ListOptions{} options.LabelSelector = "stratos-role=kube-terminal" - pods, err := podClient.List(options) + pods, err := podClient.List(ctx, options) if err == nil { for _, pod := range pods.Items { if sessionID, ok := pod.Annotations[stratosSessionAnnotation]; ok { @@ -43,7 +47,7 @@ func (k *KubeTerminal) cleanup() { isValid, err := k.PortalProxy.GetSessionDataStore().IsValidSession(i) if err == nil && !isValid { log.Debugf("Deleting pod %s", pod.Name) - podClient.Delete(pod.Name, nil) + podClient.Delete(ctx, pod.Name, metaV1.DeleteOptions{}) } } } @@ -54,7 +58,7 @@ func (k *KubeTerminal) cleanup() { } // Only want the secrets that are kube terminals - secrets, err := secretClient.List(options) + secrets, err := secretClient.List(ctx, options) if err == nil { for _, secret := range secrets.Items { if sessionID, ok := secret.Annotations[stratosSessionAnnotation]; ok { @@ -63,7 +67,7 @@ func (k *KubeTerminal) cleanup() { isValid, err := k.PortalProxy.GetSessionDataStore().IsValidSession(i) if err == nil && !isValid { log.Debugf("Deleting secret %s", secret.Name) - secretClient.Delete(secret.Name, nil) + secretClient.Delete(ctx, secret.Name, metaV1.DeleteOptions{}) } } } diff --git a/src/jetstream/plugins/kubernetes/terminal/helpers.go b/src/jetstream/plugins/kubernetes/terminal/helpers.go index fd49e42e24..2db2b74969 100644 --- a/src/jetstream/plugins/kubernetes/terminal/helpers.go +++ b/src/jetstream/plugins/kubernetes/terminal/helpers.go @@ -1,6 +1,7 @@ package terminal import ( + "context" "encoding/json" "errors" "fmt" @@ -13,7 +14,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/auth" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/gorilla/websocket" v1 "k8s.io/api/core/v1" @@ -65,6 +66,7 @@ func (k *KubeTerminal) createPod(c echo.Context, kubeConfig, kubeVersion string, secretName := fmt.Sprintf("terminal-%s", id) podName := secretName podClient, secretClient, err := k.getClients() + ctx := context.Background() result := &PodCreationData{} result.Namespace = k.Namespace @@ -102,7 +104,8 @@ func (k *KubeTerminal) createPod(c echo.Context, kubeConfig, kubeVersion string, } sendProgressMessage(ws, startingProgressMessage) - _, err = secretClient.Create(secretSpec) + + _, err = secretClient.Create(ctx, secretSpec, metav1.CreateOptions{}) if err != nil { log.Warnf("Kubernetes Terminal: Unable to create Secret: %+v", err) return result, err @@ -161,7 +164,7 @@ func (k *KubeTerminal) createPod(c echo.Context, kubeConfig, kubeVersion string, sendProgressMessage(ws, startingProgressMessage) // Create a new pod - pod, err := podClient.Create(podSpec) + pod, err := podClient.Create(ctx, podSpec, metav1.CreateOptions{}) if err != nil { log.Warnf("Kubernetes Terminal: Unable to create Pod: %+v", err) // Secret will get cleaned up by caller @@ -177,7 +180,7 @@ func (k *KubeTerminal) createPod(c echo.Context, kubeConfig, kubeVersion string, for { // This ensures we keep the web socket alive while the container is creating sendProgressMessage(ws, startingProgressMessage) - status, err := podClient.Get(pod.Name, statusOptions) + status, err := podClient.Get(ctx, pod.Name, statusOptions) if err == nil && status.Status.Phase == "Running" { break } @@ -207,6 +210,7 @@ func setResourcMetadata(metadata *metav1.ObjectMeta, sessionID string) { // Cleanup the pod and secret func (k *KubeTerminal) cleanupPodAndSecret(podData *PodCreationData) error { + ctx := context.Background() if podData == nil { // Already been cleaned up return nil @@ -214,17 +218,17 @@ func (k *KubeTerminal) cleanupPodAndSecret(podData *PodCreationData) error { if len(podData.PodName) > 0 { //captureBashHistory(podData) - podData.PodClient.Delete(podData.PodName, nil) + podData.PodClient.Delete(ctx, podData.PodName, metav1.DeleteOptions{}) } if len(podData.SecretName) > 0 { - podData.SecretClient.Delete(podData.SecretName, nil) + podData.SecretClient.Delete(ctx, podData.SecretName, metav1.DeleteOptions{}) } return nil } -func getHelmRepoSetupScript(portalProxy interfaces.PortalProxy) string { +func getHelmRepoSetupScript(portalProxy api.PortalProxy) string { str := "" // Get all of the helm endpoints diff --git a/src/jetstream/plugins/kubernetes/terminal/start.go b/src/jetstream/plugins/kubernetes/terminal/start.go index 1eefe6de69..baefe8864d 100644 --- a/src/jetstream/plugins/kubernetes/terminal/start.go +++ b/src/jetstream/plugins/kubernetes/terminal/start.go @@ -14,7 +14,7 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/gorilla/websocket" ) @@ -81,7 +81,7 @@ func (k *KubeTerminal) Start(c echo.Context) error { log.Debugf("Kubernetes Version: %s", version) // Upgrade the web socket for the incoming request - ws, pingTicker, err := interfaces.UpgradeToWebSocket(c) + ws, pingTicker, err := api.UpgradeToWebSocket(c) if err != nil { return err } diff --git a/src/jetstream/plugins/kubernetes/terminal/terminal.go b/src/jetstream/plugins/kubernetes/terminal/terminal.go index 83d259147b..333722e2b2 100644 --- a/src/jetstream/plugins/kubernetes/terminal/terminal.go +++ b/src/jetstream/plugins/kubernetes/terminal/terminal.go @@ -4,9 +4,9 @@ import ( "fmt" "io/ioutil" + jetstream_api "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + jetstream_config "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/kubernetes/api" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" log "github.com/sirupsen/logrus" ) @@ -27,7 +27,7 @@ const ( // KubeTerminal supports spawning pods to provide a CLI environment to the user type KubeTerminal struct { - PortalProxy interfaces.PortalProxy + PortalProxy jetstream_api.PortalProxy Namespace string `configName:"STRATOS_KUBERNETES_NAMESPACE"` Image string `configName:"STRATOS_KUBERNETES_TERMINAL_IMAGE"` Token []byte @@ -36,7 +36,7 @@ type KubeTerminal struct { } // NewKubeTerminal checks that the environment is set up to support the Kube Terminal -func NewKubeTerminal(p interfaces.PortalProxy) *KubeTerminal { +func NewKubeTerminal(p jetstream_api.PortalProxy) *KubeTerminal { // Only enabled in tech preview if !p.GetConfig().EnableTechPreview { log.Info("Kube Terminal not enabled - requires tech preview") @@ -46,7 +46,7 @@ func NewKubeTerminal(p interfaces.PortalProxy) *KubeTerminal { kt := &KubeTerminal{ PortalProxy: p, } - if err := config.Load(kt, p.Env().Lookup); err != nil { + if err := jetstream_config.Load(kt, p.Env().Lookup); err != nil { log.Warnf("Unable to load Kube Terminal configuration. %v", err) return nil } diff --git a/src/jetstream/plugins/metrics/cloud_foundry.go b/src/jetstream/plugins/metrics/cloud_foundry.go index 772adf24e4..768e16f18c 100644 --- a/src/jetstream/plugins/metrics/cloud_foundry.go +++ b/src/jetstream/plugins/metrics/cloud_foundry.go @@ -9,7 +9,7 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) var ( @@ -56,11 +56,11 @@ func (m *MetricsSpecification) getCloudFoundryAppMetrics(c echo.Context) error { return m.makePrometheusRequest(c, cnsiList, "application_id=\""+appID+"\"") } -func makePrometheusRequestInfos(c echo.Context, userGUID string, metrics map[string]EndpointMetricsRelation, prometheusOp string, queries string, addJob bool) []interfaces.ProxyRequestInfo { +func makePrometheusRequestInfos(c echo.Context, userGUID string, metrics map[string]EndpointMetricsRelation, prometheusOp string, queries string, addJob bool) []api.ProxyRequestInfo { // Construct the metadata for proxying - requests := make([]interfaces.ProxyRequestInfo, 0) + requests := make([]api.ProxyRequestInfo, 0) for _, metric := range metrics { - req := interfaces.ProxyRequestInfo{} + req := api.ProxyRequestInfo{} req.UserGUID = userGUID req.ResultGUID = metric.endpoint.GUID req.EndpointGUID = metric.metrics.EndpointGUID @@ -154,7 +154,7 @@ func (m *MetricsSpecification) getCloudFoundryMetrics(c echo.Context) error { // Only proceed if the user is an Cloud Foundry admin of all of the endpoints we are requesting metrics for if !canAccessMetrics { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusUnauthorized, "You must be a Cloud Foundry admin to access CF-level metrics", "You must be a Cloud Foundry admin to access CF-level metrics") diff --git a/src/jetstream/plugins/metrics/main.go b/src/jetstream/plugins/metrics/main.go index ee0b13843d..8163bfd213 100644 --- a/src/jetstream/plugins/metrics/main.go +++ b/src/jetstream/plugins/metrics/main.go @@ -10,7 +10,7 @@ import ( "net/url" "strings" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/tokens" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" @@ -18,12 +18,12 @@ import ( // Module init will register plugin func init() { - interfaces.AddPlugin("metrics", nil, Init) + api.AddPlugin("metrics", nil, Init) } // MetricsSpecification is a plugin to support the metrics endpoint type type MetricsSpecification struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy endpointType string } @@ -49,7 +49,7 @@ type MetricsMetadata struct { type EndpointMetricsRelation struct { metrics *MetricsMetadata - endpoint *interfaces.ConnectedEndpoint + endpoint *api.ConnectedEndpoint } type PrometheusQueryResponse struct { @@ -81,22 +81,22 @@ type MetricsAuth struct { } // Init creates a new MetricsSpecification -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { return &MetricsSpecification{portalProxy: portalProxy, endpointType: EndpointType}, nil } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (m *MetricsSpecification) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (m *MetricsSpecification) GetEndpointPlugin() (api.EndpointPlugin, error) { return m, nil } // GetRoutePlugin gets the route plugin for this plugin -func (m *MetricsSpecification) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (m *MetricsSpecification) GetRoutePlugin() (api.RoutePlugin, error) { return m, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (m *MetricsSpecification) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (m *MetricsSpecification) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented!") } @@ -127,15 +127,15 @@ func (m *MetricsSpecification) Register(echoContext echo.Context) error { return m.portalProxy.RegisterEndpoint(echoContext, m.Info) } -func (m *MetricsSpecification) Validate(userGUID string, cnsiRecord interfaces.CNSIRecord, tokenRecord interfaces.TokenRecord) error { +func (m *MetricsSpecification) Validate(userGUID string, cnsiRecord api.CNSIRecord, tokenRecord api.TokenRecord) error { return nil } -func (m *MetricsSpecification) Connect(ec echo.Context, cnsiRecord interfaces.CNSIRecord, userId string) (*interfaces.TokenRecord, bool, error) { +func (m *MetricsSpecification) Connect(ec echo.Context, cnsiRecord api.CNSIRecord, userId string) (*api.TokenRecord, bool, error) { log.Debug("Metrics Connect...") - params := new(interfaces.LoginToCNSIParams) - err := interfaces.BindOnce(params, ec) + params := new(api.LoginToCNSIParams) + err := api.BindOnce(params, ec) if err != nil { return nil, false, err } @@ -146,13 +146,13 @@ func (m *MetricsSpecification) Connect(ec echo.Context, cnsiRecord interfaces.CN } switch connectType { - case interfaces.AuthConnectTypeCreds: + case api.AuthConnectTypeCreds: auth.Username = params.Username auth.Password = params.Password - if connectType == interfaces.AuthConnectTypeCreds && (len(auth.Username) == 0 || len(auth.Password) == 0) { + if connectType == api.AuthConnectTypeCreds && (len(auth.Username) == 0 || len(auth.Password) == 0) { return nil, false, errors.New("Need username and password") } - case interfaces.AuthConnectTypeNone: + case api.AuthConnectTypeNone: auth.Username = "none" auth.Password = "none" default: @@ -162,8 +162,8 @@ func (m *MetricsSpecification) Connect(ec echo.Context, cnsiRecord interfaces.CN authString := fmt.Sprintf("%s:%s", auth.Username, auth.Password) base64EncodedAuthString := base64.StdEncoding.EncodeToString([]byte(authString)) - tr := &interfaces.TokenRecord{ - AuthType: interfaces.AuthTypeHttpBasic, + tr := &api.TokenRecord{ + AuthType: api.AuthTypeHttpBasic, AuthToken: base64EncodedAuthString, RefreshToken: auth.Username, } @@ -189,7 +189,7 @@ func (m *MetricsSpecification) Connect(ec echo.Context, cnsiRecord interfaces.CN if res.StatusCode == http.StatusUnauthorized { errMessage = ": Unauthorized" } - return nil, false, interfaces.NewHTTPShadowError( + return nil, false, api.NewHTTPShadowError( res.StatusCode, fmt.Sprintf("Could not connect to the endpoint%s", errMessage), "Could not connect to the endpoint: %s", err) @@ -215,13 +215,13 @@ func (m *MetricsSpecification) Connect(ec echo.Context, cnsiRecord interfaces.CN response, err := h.Do(req) if err != nil { log.Errorf("Error fetching /api/v1/status/config - response: %v, error: %v", response, err) - return nil, false, interfaces.LogHTTPError(res, err) + return nil, false, api.LogHTTPError(res, err) } defer response.Body.Close() if response.StatusCode != http.StatusOK { log.Errorf("Error fetching /api/v1/status/config - response: %v, error: %v", response, err) - return nil, false, interfaces.LogHTTPError(res, err) + return nil, false, api.LogHTTPError(res, err) } tr.Metadata, _ = m.createMetadata(cnsiRecord.APIEndpoint, h, auth) @@ -237,7 +237,7 @@ func (m *MetricsSpecification) Connect(ec echo.Context, cnsiRecord interfaces.CN } func (m *MetricsSpecification) addAuth(req *http.Request, auth *MetricsAuth) { - if auth.Type == interfaces.AuthConnectTypeCreds { + if auth.Type == api.AuthConnectTypeCreds { req.SetBasicAuth(url.QueryEscape(auth.Username), url.QueryEscape(auth.Password)) } } @@ -255,23 +255,23 @@ func (m *MetricsSpecification) createMetadata(metricEndpoint *url.URL, httpClien defer res.Body.Close() if err != nil || res.StatusCode != http.StatusOK { log.Errorf("Error performing http request - response: %v, error: %v", res, err) - return "", interfaces.LogHTTPError(res, err) + return "", api.LogHTTPError(res, err) } body, err := ioutil.ReadAll(res.Body) if err != nil { log.Errorf("Unexpected response: %v", err) - return "", interfaces.LogHTTPError(res, err) + return "", api.LogHTTPError(res, err) } queryResponse := &PrometheusQueryResponse{} err = json.Unmarshal(body, queryResponse) if err != nil { log.Errorf("Failed to unmarshal response: %v", err) - return "", interfaces.LogHTTPError(res, err) + return "", api.LogHTTPError(res, err) } if len(queryResponse.Data.Result) == 0 { log.Errorf("No series detecthed! No Firehose exporter currently connected") - return "", interfaces.LogHTTPError(res, err) + return "", api.LogHTTPError(res, err) } if len(queryResponse.Data.Result) > 1 { @@ -280,7 +280,7 @@ func (m *MetricsSpecification) createMetadata(metricEndpoint *url.URL, httpClien if queryResponse.Data.Result[0].Metric.Environment == "" { log.Errorf("No environmnent detected in %v", queryResponse) - return "", interfaces.LogHTTPError(res, err) + return "", api.LogHTTPError(res, err) } environment := queryResponse.Data.Result[0].Metric.Environment @@ -304,7 +304,7 @@ func (m *MetricsSpecification) createMetadata(metricEndpoint *url.URL, httpClien jsonMsg, err := json.Marshal(metricsMetadata) if err != nil { - return "", interfaces.LogHTTPError(res, err) + return "", api.LogHTTPError(res, err) } return string(jsonMsg), nil } @@ -314,10 +314,10 @@ func (m *MetricsSpecification) Init() error { return nil } -func (m *MetricsSpecification) Info(apiEndpoint string, skipSSLValidation bool) (interfaces.CNSIRecord, interface{}, error) { +func (m *MetricsSpecification) Info(apiEndpoint string, skipSSLValidation bool) (api.CNSIRecord, interface{}, error) { log.Debug("Metrics Info") - var v2InfoResponse interfaces.V2Info - var newCNSI interfaces.CNSIRecord + var v2InfoResponse api.V2Info + var newCNSI api.CNSIRecord newCNSI.CNSIType = EndpointType @@ -343,7 +343,7 @@ func (m *MetricsSpecification) Info(apiEndpoint string, skipSSLValidation bool) return newCNSI, v2InfoResponse, nil } -func (m *MetricsSpecification) UpdateMetadata(info *interfaces.Info, userGUID string, echoContext echo.Context) { +func (m *MetricsSpecification) UpdateMetadata(info *api.Info, userGUID string, echoContext echo.Context) { metricsProviders := make([]MetricsMetadata, 0) // Go through the metrics endpoints and get the corresponding services from the token metadata @@ -444,7 +444,7 @@ func trimPath(path string) string { func (m *MetricsSpecification) getMetricsEndpoints(userGUID string, cnsiList []string) (map[string]EndpointMetricsRelation, error) { metricsProviders := make([]MetricsMetadata, 0) - endpointsMap := make(map[string]*interfaces.ConnectedEndpoint) + endpointsMap := make(map[string]*api.ConnectedEndpoint) results := make(map[string]EndpointMetricsRelation) // Get Endpoints the user is connected to diff --git a/src/jetstream/plugins/monocular/20190307115300_ChartStore.go b/src/jetstream/plugins/monocular/20190307115300_ChartStore.go index 409fb3691b..f6de7863ec 100644 --- a/src/jetstream/plugins/monocular/20190307115300_ChartStore.go +++ b/src/jetstream/plugins/monocular/20190307115300_ChartStore.go @@ -2,56 +2,56 @@ package monocular import ( "database/sql" - "strings" - "bitbucket.org/liamstask/goose/lib/goose" - - "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" + "github.com/pressly/goose" ) func init() { - datastore.RegisterMigration(20190307115301, "ChartStore", func(txn *sql.Tx, conf *goose.DBConf) error { - - createChartsTable := "CREATE TABLE IF NOT EXISTS charts (" - createChartsTable += "id VARCHAR(255) NOT NULL," - createChartsTable += "name VARCHAR(255) NOT NULL," - createChartsTable += "repo_name VARCHAR(255) NOT NULL," - createChartsTable += "update_batch VARCHAR(64) NOT NULL," - createChartsTable += "content TEXT," - createChartsTable += "last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," - createChartsTable += "PRIMARY KEY (id) );" - - _, err := txn.Exec(createChartsTable) - if err != nil { - return err - } - - createIndex := "CREATE INDEX charts_id ON charts (id);" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } - - binaryDataType := "BYTEA" - if strings.Contains(conf.Driver.Name, "mysql") { - binaryDataType = "BLOB" - } - - createChartFilesTable := "CREATE TABLE IF NOT EXISTS chart_files (" - createChartFilesTable += "id VARCHAR(255) NOT NULL," - createChartFilesTable += "filename VARCHAR(64) NOT NULL," - createChartFilesTable += "chart_id VARCHAR(255) NOT NULL," - createChartFilesTable += "name VARCHAR(255) NOT NULL," - createChartFilesTable += "repo_name VARCHAR(255) NOT NULL," - createChartFilesTable += "digest VARCHAR(255) NOT NULL," - createChartFilesTable += "content " + binaryDataType + "," - createChartFilesTable += "PRIMARY KEY (id, filename) );" - - _, err = txn.Exec(createChartFilesTable) - if err != nil { - return err - } - - return nil - }) + goose.AddMigration(Up20190307115301, nil) +} + +func Up20190307115301(txn *sql.Tx) error { + dialect := goose.GetDialect() + + createChartsTable := "CREATE TABLE IF NOT EXISTS charts (" + createChartsTable += "id VARCHAR(255) NOT NULL," + createChartsTable += "name VARCHAR(255) NOT NULL," + createChartsTable += "repo_name VARCHAR(255) NOT NULL," + createChartsTable += "update_batch VARCHAR(64) NOT NULL," + createChartsTable += "content TEXT," + createChartsTable += "last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP," + createChartsTable += "PRIMARY KEY (id) );" + + _, err := txn.Exec(createChartsTable) + if err != nil { + return err + } + + createIndex := "CREATE INDEX charts_id ON charts (id);" + _, err = txn.Exec(createIndex) + if err != nil { + return err + } + + binaryDataType := "BYTEA" + if _, ok := dialect.(*goose.MySQLDialect); ok { + binaryDataType = "BLOB" + } + + createChartFilesTable := "CREATE TABLE IF NOT EXISTS chart_files (" + createChartFilesTable += "id VARCHAR(255) NOT NULL," + createChartFilesTable += "filename VARCHAR(64) NOT NULL," + createChartFilesTable += "chart_id VARCHAR(255) NOT NULL," + createChartFilesTable += "name VARCHAR(255) NOT NULL," + createChartFilesTable += "repo_name VARCHAR(255) NOT NULL," + createChartFilesTable += "digest VARCHAR(255) NOT NULL," + createChartFilesTable += "content " + binaryDataType + "," + createChartFilesTable += "PRIMARY KEY (id, filename) );" + + _, err = txn.Exec(createChartFilesTable) + if err != nil { + return err + } + + return nil } diff --git a/src/jetstream/plugins/monocular/20200206090600_ChartStoreRemoval.go b/src/jetstream/plugins/monocular/20200206090600_ChartStoreRemoval.go index 8bae6ce176..cb7c83c555 100644 --- a/src/jetstream/plugins/monocular/20200206090600_ChartStoreRemoval.go +++ b/src/jetstream/plugins/monocular/20200206090600_ChartStoreRemoval.go @@ -3,26 +3,25 @@ package monocular import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" - - "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" + "github.com/pressly/goose" ) func init() { - datastore.RegisterMigration(20200206090600, "ChartStoreRemoval", func(txn *sql.Tx, conf *goose.DBConf) error { + goose.AddMigration(Up20200206090600, nil) +} - dropChartsTable := "DROP TABLE IF EXISTS charts"; - _, err := txn.Exec(dropChartsTable) - if err != nil { - return err - } +func Up20200206090600(txn *sql.Tx) error { + dropChartsTable := "DROP TABLE IF EXISTS charts" + _, err := txn.Exec(dropChartsTable) + if err != nil { + return err + } - dropChartFilesTable := "DROP TABLE IF EXISTS chart_files;" - _, err = txn.Exec(dropChartFilesTable) - if err != nil { - return err - } + dropChartFilesTable := "DROP TABLE IF EXISTS chart_files;" + _, err = txn.Exec(dropChartFilesTable) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/plugins/monocular/20200819184800_ChartStore.go b/src/jetstream/plugins/monocular/20200819184800_ChartStore.go index 946ffc798e..811a3b72b5 100644 --- a/src/jetstream/plugins/monocular/20200819184800_ChartStore.go +++ b/src/jetstream/plugins/monocular/20200819184800_ChartStore.go @@ -3,48 +3,47 @@ package monocular import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" - - "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" + "github.com/pressly/goose" ) func init() { - datastore.RegisterMigration(20200819184800, "HelmChartStore", func(txn *sql.Tx, conf *goose.DBConf) error { - - // This is a dupe of 20190307115301. After the kube upstreaming process it was skipped during upstream upgrades - createChartsTable := "CREATE TABLE IF NOT EXISTS helm_charts (" - createChartsTable += "endpoint VARCHAR(64) NOT NULL," - createChartsTable += "name VARCHAR(255) NOT NULL," - createChartsTable += "repo_name VARCHAR(255) NOT NULL," - createChartsTable += "version VARCHAR(64) NOT NULL," - createChartsTable += "created TIMESTAMP NOT NULL," - createChartsTable += "app_version VARCHAR(64) NOT NULL," - createChartsTable += "description VARCHAR(255) NOT NULL," - createChartsTable += "icon_url VARCHAR(255) NOT NULL," - createChartsTable += "chart_url VARCHAR(255) NOT NULL," - createChartsTable += "source_url VARCHAR(255) NOT NULL," - createChartsTable += "digest VARCHAR(64) NOT NULL," - createChartsTable += "is_latest BOOLEAN NOT NULL DEFAULT FALSE," - createChartsTable += "update_batch VARCHAR(64) NOT NULL," - createChartsTable += "PRIMARY KEY (endpoint, name, version) );" - - _, err := txn.Exec(createChartsTable) - if err != nil { - return err - } - - createIndex := "CREATE INDEX helm_charts_endpoint ON helm_charts (endpoint, name, version);" - _, err = txn.Exec(createIndex) - if err != nil { - return err - } - - createRepoIndex := "CREATE INDEX helm_charts_repository ON helm_charts (name, repo_name, version);" - _, err = txn.Exec(createRepoIndex) - if err != nil { - return err - } - - return nil - }) + goose.AddMigration(Up20200819184800, nil) +} + +func Up20200819184800(txn *sql.Tx) error { + // This is a dupe of 20190307115301. After the kube upstreaming process it was skipped during upstream upgrades + createChartsTable := "CREATE TABLE IF NOT EXISTS helm_charts (" + createChartsTable += "endpoint VARCHAR(64) NOT NULL," + createChartsTable += "name VARCHAR(255) NOT NULL," + createChartsTable += "repo_name VARCHAR(255) NOT NULL," + createChartsTable += "version VARCHAR(64) NOT NULL," + createChartsTable += "created TIMESTAMP NOT NULL," + createChartsTable += "app_version VARCHAR(64) NOT NULL," + createChartsTable += "description VARCHAR(255) NOT NULL," + createChartsTable += "icon_url VARCHAR(255) NOT NULL," + createChartsTable += "chart_url VARCHAR(255) NOT NULL," + createChartsTable += "source_url VARCHAR(255) NOT NULL," + createChartsTable += "digest VARCHAR(64) NOT NULL," + createChartsTable += "is_latest BOOLEAN NOT NULL DEFAULT FALSE," + createChartsTable += "update_batch VARCHAR(64) NOT NULL," + createChartsTable += "PRIMARY KEY (endpoint, name, version) );" + + _, err := txn.Exec(createChartsTable) + if err != nil { + return err + } + + createIndex := "CREATE INDEX helm_charts_endpoint ON helm_charts (endpoint, name, version);" + _, err = txn.Exec(createIndex) + if err != nil { + return err + } + + createRepoIndex := "CREATE INDEX helm_charts_repository ON helm_charts (name, repo_name, version);" + _, err = txn.Exec(createRepoIndex) + if err != nil { + return err + } + + return nil } diff --git a/src/jetstream/plugins/monocular/20201007113503_RemoveHelmHub.go b/src/jetstream/plugins/monocular/20201007113503_RemoveHelmHub.go index 0487c0da5d..c7f5a1ff83 100644 --- a/src/jetstream/plugins/monocular/20201007113503_RemoveHelmHub.go +++ b/src/jetstream/plugins/monocular/20201007113503_RemoveHelmHub.go @@ -3,19 +3,19 @@ package monocular import ( "database/sql" - "bitbucket.org/liamstask/goose/lib/goose" - - "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" + "github.com/pressly/goose" ) func init() { - datastore.RegisterMigration(20201007113503, "RemoveHelmHub", func(txn *sql.Tx, conf *goose.DBConf) error { - cleanCNSIS := "DELETE FROM cnsis WHERE cnsi_type='helm' AND sub_type='hub';" - _, err := txn.Exec(cleanCNSIS) - if err != nil { - return err - } + goose.AddMigration(Up20201007113503, nil) +} + +func Up20201007113503(txn *sql.Tx) error { + cleanCNSIS := "DELETE FROM cnsis WHERE cnsi_type='helm' AND sub_type='hub';" + _, err := txn.Exec(cleanCNSIS) + if err != nil { + return err + } - return nil - }) + return nil } diff --git a/src/jetstream/plugins/monocular/endpoint.go b/src/jetstream/plugins/monocular/endpoint.go index 39405807ee..cbd0f23360 100644 --- a/src/jetstream/plugins/monocular/endpoint.go +++ b/src/jetstream/plugins/monocular/endpoint.go @@ -5,7 +5,7 @@ import ( "fmt" "net/url" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) @@ -27,21 +27,21 @@ func (m *Monocular) Register(echoContext echo.Context) error { } // Validate validates the connection to the endpoint - verifies that we can actually connect and call its API -func (m *Monocular) Validate(userGUID string, cnsiRecord interfaces.CNSIRecord, tokenRecord interfaces.TokenRecord) error { +func (m *Monocular) Validate(userGUID string, cnsiRecord api.CNSIRecord, tokenRecord api.TokenRecord) error { return nil } // Connect to the endpoint -func (m *Monocular) Connect(ec echo.Context, cnsiRecord interfaces.CNSIRecord, userId string) (*interfaces.TokenRecord, bool, error) { +func (m *Monocular) Connect(ec echo.Context, cnsiRecord api.CNSIRecord, userId string) (*api.TokenRecord, bool, error) { // Note: Helm Repositories don't support connecting return nil, false, errors.New("Connecting not support for a Helm Repository") } // Info checks the endpoint type and fetches any metadata -func (m *Monocular) Info(apiEndpoint string, skipSSLValidation bool) (interfaces.CNSIRecord, interface{}, error) { +func (m *Monocular) Info(apiEndpoint string, skipSSLValidation bool) (api.CNSIRecord, interface{}, error) { log.Debug("Helm Repository Info") - var v2InfoResponse interfaces.V2Info - var newCNSI interfaces.CNSIRecord + var v2InfoResponse api.V2Info + var newCNSI api.CNSIRecord newCNSI.CNSIType = helmEndpointType @@ -71,5 +71,5 @@ func (m *Monocular) Info(apiEndpoint string, skipSSLValidation bool) (interfaces } // UpdateMetadata not needed for Helm endpoints -func (m *Monocular) UpdateMetadata(info *interfaces.Info, userGUID string, echoContext echo.Context) { +func (m *Monocular) UpdateMetadata(info *api.Info, userGUID string, echoContext echo.Context) { } diff --git a/src/jetstream/plugins/monocular/go.mod b/src/jetstream/plugins/monocular/go.mod index a1f6697738..6e8f6eb213 100644 --- a/src/jetstream/plugins/monocular/go.mod +++ b/src/jetstream/plugins/monocular/go.mod @@ -10,8 +10,10 @@ require ( github.com/kylelemons/go-gypsy v0.0.0-20160905020020-08cad365cd28 // indirect github.com/labstack/echo v3.3.10+incompatible github.com/labstack/gommon v0.3.0 // indirect - github.com/lib/pq v1.0.0 // indirect + github.com/lib/pq v1.10.9 // indirect github.com/mattn/go-sqlite3 v1.10.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pressly/goose v2.7.0+incompatible // indirect github.com/satori/go.uuid v1.2.0 github.com/sirupsen/logrus v1.4.2 github.com/ziutek/mymysql v1.5.4 // indirect diff --git a/src/jetstream/plugins/monocular/go.sum b/src/jetstream/plugins/monocular/go.sum index 08971f05aa..220a21a2fc 100644 --- a/src/jetstream/plugins/monocular/go.sum +++ b/src/jetstream/plugins/monocular/go.sum @@ -137,6 +137,8 @@ github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0 github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg= @@ -173,9 +175,13 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pressly/goose v2.7.0+incompatible h1:PWejVEv07LCerQEzMMeAtjuyCKbyprZ/LBa6K5P0OCQ= +github.com/pressly/goose v2.7.0+incompatible/go.mod h1:m+QHWCqxR3k8D9l7qfzuC/djtlfzxr34mozWDYEu1z8= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2 h1:awm861/B8OKDd2I/6o1dy3ra4BamzKhYOiGItCeZ740= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= diff --git a/src/jetstream/plugins/monocular/main.go b/src/jetstream/plugins/monocular/main.go index 21bc68de3e..0047f3a7f4 100644 --- a/src/jetstream/plugins/monocular/main.go +++ b/src/jetstream/plugins/monocular/main.go @@ -8,7 +8,7 @@ import ( "strings" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/monocular/store" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) @@ -27,7 +27,7 @@ const ( // Monocular is a plugin for Monocular type Monocular struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy chartSvcRoutes http.Handler ChartStore store.ChartStore FoundationDBURL string @@ -46,11 +46,11 @@ type HelmHubChartResponse struct { } func init() { - interfaces.AddPlugin("monocular", []string{"kubernetes"}, Init) + api.AddPlugin("monocular", []string{"kubernetes"}, Init) } // Init creates a new Monocular -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { store.InitRepositoryProvider(portalProxy.GetConfig().DatabaseProviderName) return &Monocular{portalProxy: portalProxy}, nil } @@ -115,7 +115,7 @@ func (m *Monocular) syncOnStartup() { if ep.CNSIType == helmEndpointType { if ep.SubType == helmRepoEndpointType { helmRepos[ep.GUID] = true - m.Sync(interfaces.EndpointRegisterAction, ep) + m.Sync(api.EndpointRegisterAction, ep) } else { metadata := "{}" m.portalProxy.UpdateEndpointMetadata(ep.GUID, metadata) @@ -147,7 +147,7 @@ func arrayContainsString(a []string, x string) bool { } // OnEndpointNotification handles notification that endpoint has been remoevd -func (m *Monocular) OnEndpointNotification(action interfaces.EndpointAction, endpoint *interfaces.CNSIRecord) { +func (m *Monocular) OnEndpointNotification(action api.EndpointAction, endpoint *api.CNSIRecord) { if endpoint.CNSIType == helmEndpointType && endpoint.SubType == helmRepoEndpointType { m.Sync(action, endpoint) } else if endpoint.CNSIType == helmEndpointType && endpoint.SubType == helmHubEndpointType && action == 1 { @@ -157,17 +157,17 @@ func (m *Monocular) OnEndpointNotification(action interfaces.EndpointAction, end } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (m *Monocular) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (m *Monocular) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (m *Monocular) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (m *Monocular) GetEndpointPlugin() (api.EndpointPlugin, error) { return m, nil } // GetRoutePlugin gets the route plugin for this plugin -func (m *Monocular) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (m *Monocular) GetRoutePlugin() (api.RoutePlugin, error) { return m, nil } @@ -223,7 +223,7 @@ func (m *Monocular) AddSessionGroupRoutes(echoGroup *echo.Group) { } // isExternalMonocularRequest .. Should this request go out to an external monocular instance? IF so returns external monocular endpoint -func (m *Monocular) isExternalMonocularRequest(c echo.Context) (*interfaces.CNSIRecord, error) { +func (m *Monocular) isExternalMonocularRequest(c echo.Context) (*api.CNSIRecord, error) { cnsiList := strings.Split(c.Request().Header.Get("x-cap-cnsi-list"), ",") // If this has a cnsi then test if it for an external monocular instance @@ -235,7 +235,7 @@ func (m *Monocular) isExternalMonocularRequest(c echo.Context) (*interfaces.CNSI } // validateExternalMonocularEndpoint .. Is this endpoint related to an external moncular instance (not stratos's) -func (m *Monocular) validateExternalMonocularEndpoint(cnsi string) (*interfaces.CNSIRecord, error) { +func (m *Monocular) validateExternalMonocularEndpoint(cnsi string) (*api.CNSIRecord, error) { endpoint, err := m.portalProxy.GetCNSIRecord(cnsi) if err != nil { err := errors.New("Failed to fetch endpoint") diff --git a/src/jetstream/plugins/monocular/repository.go b/src/jetstream/plugins/monocular/repository.go index 01b2862bab..5061badf7c 100644 --- a/src/jetstream/plugins/monocular/repository.go +++ b/src/jetstream/plugins/monocular/repository.go @@ -4,7 +4,7 @@ import ( "encoding/json" "io/ioutil" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) @@ -21,7 +21,7 @@ func (m *Monocular) getRepoStatuses(c echo.Context) error { defer req.Body.Close() body, err := ioutil.ReadAll(req.Body) if err != nil { - return interfaces.NewJetstreamError("Could not read request body") + return api.NewJetstreamError("Could not read request body") } info := helmStatusInfo{} @@ -39,7 +39,7 @@ func (m *Monocular) getRepoStatuses(c echo.Context) error { info[guid] = newVal } } else { - return interfaces.NewJetstreamError("Could not parse Helm Endpoint IDs") + return api.NewJetstreamError("Could not parse Helm Endpoint IDs") } return c.JSON(200, info) diff --git a/src/jetstream/plugins/monocular/sync.go b/src/jetstream/plugins/monocular/sync.go index ba1331778a..dd10c99f04 100644 --- a/src/jetstream/plugins/monocular/sync.go +++ b/src/jetstream/plugins/monocular/sync.go @@ -3,14 +3,14 @@ package monocular import ( "encoding/json" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) type SyncJob struct { - Action interfaces.EndpointAction - Endpoint *interfaces.CNSIRecord + Action api.EndpointAction + Endpoint *api.CNSIRecord } type SyncMetadata struct { @@ -35,17 +35,17 @@ func (m *Monocular) syncRepo(c echo.Context) error { guid := c.Param("guid") endpoint, err := p.GetCNSIRecord(guid) if err != nil { - return interfaces.NewJetstreamErrorf("Could not find Helm Repository: %v+", err) + return api.NewJetstreamErrorf("Could not find Helm Repository: %v+", err) } - m.Sync(interfaces.EndpointRegisterAction, &endpoint) + m.Sync(api.EndpointRegisterAction, &endpoint) response := "OK" return c.JSON(200, response) } // Sync schedules a sync action for the given endpoint -func (m *Monocular) Sync(action interfaces.EndpointAction, endpoint *interfaces.CNSIRecord) { +func (m *Monocular) Sync(action api.EndpointAction, endpoint *api.CNSIRecord) { // Delete and Update are Synchronously handled // Add (Sync) is handled Asynchronously via a SyncJob if action == 0 { diff --git a/src/jetstream/plugins/userfavorites/favorites.go b/src/jetstream/plugins/userfavorites/favorites.go index 9afd613a85..a0bc925e6e 100644 --- a/src/jetstream/plugins/userfavorites/favorites.go +++ b/src/jetstream/plugins/userfavorites/favorites.go @@ -11,14 +11,14 @@ import ( "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/userfavorites/userfavoritesstore" "github.com/labstack/echo/v4" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) func (uf *UserFavorites) getAll(c echo.Context) error { store, err := userfavoritesstore.NewFavoritesDBStore(uf.portalProxy.GetDatabaseConnection()) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Unable to get favorites store", "Unable to get favorites store") @@ -26,7 +26,7 @@ func (uf *UserFavorites) getAll(c echo.Context) error { userGUID := c.Get("user_id").(string) list, err := store.List(userGUID) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Unable to get favorites from favorites store", "Unable to get favorites from favorites store") @@ -34,7 +34,7 @@ func (uf *UserFavorites) getAll(c echo.Context) error { jsonString, err := json.Marshal(list) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Unable Marshal favorites from favorites json", "Unable Marshal favorites from favorites json") @@ -105,7 +105,7 @@ func (uf *UserFavorites) create(c echo.Context) error { store, err := userfavoritesstore.NewFavoritesDBStore(uf.portalProxy.GetDatabaseConnection()) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Unable to connect to User Favorite store", "Unable to connect to User Favorite store") @@ -119,14 +119,14 @@ func (uf *UserFavorites) create(c echo.Context) error { favorite := userfavoritesstore.UserFavoriteRecord{} err = json.Unmarshal(body, &favorite) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Unable to parse User Favorite from request body", "Unable to parse User Favorite from request body") } if len(favorite.EndpointID) == 0 || len(favorite.EndpointType) == 0 { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Invalid request - must provide EndpointID and EndpointType", "Invalid request - must provide EndpointID and EndpointType") @@ -136,7 +136,7 @@ func (uf *UserFavorites) create(c echo.Context) error { favorite.UserGUID = userGUID updatedFavorite, err := store.Save(favorite) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Failed to save favorite to db", "Failed to save favorite to db %+v", @@ -146,7 +146,7 @@ func (uf *UserFavorites) create(c echo.Context) error { jsonString, err := json.Marshal(updatedFavorite) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Failed to Marshal favorite from db", "Failed to Marshal favorite from db %+v", diff --git a/src/jetstream/plugins/userfavorites/main.go b/src/jetstream/plugins/userfavorites/main.go index 9e89b9ad88..d7914ea81c 100644 --- a/src/jetstream/plugins/userfavorites/main.go +++ b/src/jetstream/plugins/userfavorites/main.go @@ -4,38 +4,38 @@ import ( "errors" "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/userfavorites/userfavoritesstore" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" ) // Module init will register plugin func init() { - interfaces.AddPlugin("userfavorites", nil, Init) + api.AddPlugin("userfavorites", nil, Init) } // UserFavorites stores user favorites type UserFavorites struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // Init creates a new UserFavorites -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { userfavoritesstore.InitRepositoryProvider(portalProxy.GetConfig().DatabaseProviderName) return &UserFavorites{portalProxy: portalProxy}, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (uf *UserFavorites) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (uf *UserFavorites) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (uf *UserFavorites) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (uf *UserFavorites) GetEndpointPlugin() (api.EndpointPlugin, error) { return nil, errors.New("Not implemented") } // GetRoutePlugin gets the route plugin for this plugin -func (uf *UserFavorites) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (uf *UserFavorites) GetRoutePlugin() (api.RoutePlugin, error) { return uf, nil } diff --git a/src/jetstream/plugins/userfavorites/userfavoritesendpoints/main.go b/src/jetstream/plugins/userfavorites/userfavoritesendpoints/main.go index 731f7553c1..512bd56361 100644 --- a/src/jetstream/plugins/userfavorites/userfavoritesendpoints/main.go +++ b/src/jetstream/plugins/userfavorites/userfavoritesendpoints/main.go @@ -2,11 +2,11 @@ package userfavoritesendpoints import ( "github.com/cloudfoundry-incubator/stratos/src/jetstream/plugins/userfavorites/userfavoritesstore" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) type userFavoriteEndpoints struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy endpointGUID string } @@ -14,7 +14,7 @@ type userEndpointFavorites interface { RemoveFavorites() error } -func Constructor(portalProxy interfaces.PortalProxy, endpointGUID string) userEndpointFavorites { +func Constructor(portalProxy api.PortalProxy, endpointGUID string) userEndpointFavorites { ufe := &userFavoriteEndpoints{ portalProxy: portalProxy, endpointGUID: endpointGUID, diff --git a/src/jetstream/plugins/userinfo/local_user.go b/src/jetstream/plugins/userinfo/local_user.go index 83e36aa8e8..ac810aa12b 100644 --- a/src/jetstream/plugins/userinfo/local_user.go +++ b/src/jetstream/plugins/userinfo/local_user.go @@ -6,17 +6,17 @@ import ( "golang.org/x/crypto/bcrypt" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/localusers" ) // LocalUserInfo is a plugin to fetch user info type LocalUserInfo struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // InitLocalUserInfo creates a new local user info provider -func InitLocalUserInfo(portalProxy interfaces.PortalProxy) Provider { +func InitLocalUserInfo(portalProxy api.PortalProxy) Provider { return &LocalUserInfo{portalProxy: portalProxy} } @@ -124,7 +124,7 @@ func (userInfo *LocalUserInfo) UpdatePassword(id string, passwordInfo *passwordC err = bcrypt.CompareHashAndPassword(hash, []byte(passwordInfo.OldPassword)) if err != nil { // Old password is incorrect - return 500, interfaces.NewHTTPShadowError( + return 500, api.NewHTTPShadowError( http.StatusBadRequest, "Current password is incorrect", "Current password is incorrect: %v", err, diff --git a/src/jetstream/plugins/userinfo/main.go b/src/jetstream/plugins/userinfo/main.go index 8624ecbed6..dd2f099b4b 100644 --- a/src/jetstream/plugins/userinfo/main.go +++ b/src/jetstream/plugins/userinfo/main.go @@ -8,37 +8,37 @@ import ( log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" ) // Module init will register plugin func init() { - interfaces.AddPlugin("userinfo", nil, Init) + api.AddPlugin("userinfo", nil, Init) } // UserInfo is a plugin to fetch user info from the UAA type UserInfo struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // Init creates a new UserInfo -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { return &UserInfo{portalProxy: portalProxy}, nil } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (userInfo *UserInfo) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (userInfo *UserInfo) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (userInfo *UserInfo) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (userInfo *UserInfo) GetEndpointPlugin() (api.EndpointPlugin, error) { return nil, errors.New("Not implemented") } // GetRoutePlugin gets the route plugin for this plugin -func (userInfo *UserInfo) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (userInfo *UserInfo) GetRoutePlugin() (api.RoutePlugin, error) { return userInfo, nil } @@ -65,9 +65,9 @@ func (userInfo *UserInfo) Init() error { func (userInfo *UserInfo) getProvider(c echo.Context) Provider { log.Debugf("getUserInfoProvider: %v", userInfo.portalProxy.GetConfig().AuthEndpointType) - if interfaces.AuthEndpointTypes[userInfo.portalProxy.GetConfig().AuthEndpointType] == interfaces.Local { + if api.AuthEndpointTypes[userInfo.portalProxy.GetConfig().AuthEndpointType] == api.Local { return InitLocalUserInfo(userInfo.portalProxy) - } else if interfaces.AuthEndpointTypes[userInfo.portalProxy.GetConfig().AuthEndpointType] == interfaces.AuthNone { + } else if api.AuthEndpointTypes[userInfo.portalProxy.GetConfig().AuthEndpointType] == api.AuthNone { return InitNoAuthUserInfo(userInfo.portalProxy) } @@ -143,11 +143,11 @@ func (userInfo *UserInfo) updateUserInfo(c echo.Context) error { statusCode, err := provider.UpdateUserInfo(updatedProfile) if err != nil { - if httpError, ok := err.(interfaces.ErrHTTPShadow); ok { + if httpError, ok := err.(api.ErrHTTPShadow); ok { return httpError } - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusInternalServerError, "Unable to update user profile", "Unable to update user profile: %v", err, @@ -183,11 +183,11 @@ func (userInfo *UserInfo) updateUserPassword(c echo.Context) error { statusCode, err := provider.UpdatePassword(id, passwordInfo) if err != nil { - if httpError, ok := err.(interfaces.ErrHTTPShadow); ok { + if httpError, ok := err.(api.ErrHTTPShadow); ok { return httpError } - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusInternalServerError, "Unable to update user password", "Unable to update user password: %v", err, diff --git a/src/jetstream/plugins/userinfo/noauth_user.go b/src/jetstream/plugins/userinfo/noauth_user.go index b5112109a2..71c635314b 100644 --- a/src/jetstream/plugins/userinfo/noauth_user.go +++ b/src/jetstream/plugins/userinfo/noauth_user.go @@ -5,16 +5,16 @@ import ( "errors" "net/http" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // NoAuthUserInfo is a plugin for no authentication type NoAuthUserInfo struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy } // InitNoAuthUserInfo creates a new no auth user info provider -func InitNoAuthUserInfo(portalProxy interfaces.PortalProxy) Provider { +func InitNoAuthUserInfo(portalProxy api.PortalProxy) Provider { return &NoAuthUserInfo{portalProxy: portalProxy} } @@ -24,7 +24,7 @@ func (userInfo *NoAuthUserInfo) GetUserInfo(id string) (int, []byte, *http.Heade uaaUser := &uaaUser{ ID: id, Origin: "noauth", - Username: interfaces.DefaultAdminUserName, + Username: api.DefaultAdminUserName, } emails := make([]uaaUserEmail, 0) diff --git a/src/jetstream/plugins/userinfo/uaa_user.go b/src/jetstream/plugins/userinfo/uaa_user.go index 88b40353e5..996e6c2e16 100644 --- a/src/jetstream/plugins/userinfo/uaa_user.go +++ b/src/jetstream/plugins/userinfo/uaa_user.go @@ -10,17 +10,17 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // UaaUserInfo for UAA User Info type UaaUserInfo struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy echo echo.Context } // InitUaaUserInfo creates a new UAA user info provider -func InitUaaUserInfo(portalProxy interfaces.PortalProxy, c echo.Context) Provider { +func InitUaaUserInfo(portalProxy api.PortalProxy, c echo.Context) Provider { return &UaaUserInfo{portalProxy: portalProxy, echo: c} } diff --git a/src/jetstream/plugins/userinvite/admin.go b/src/jetstream/plugins/userinvite/admin.go index 72363560dc..4c66d40deb 100644 --- a/src/jetstream/plugins/userinvite/admin.go +++ b/src/jetstream/plugins/userinvite/admin.go @@ -9,7 +9,7 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) type StatusResponse struct { @@ -72,7 +72,7 @@ func (invite *UserInvite) configure(c echo.Context) error { clientSecret := c.FormValue("client_secret") if len(clientID) == 0 || len(clientSecret) == 0 { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Invalid request - must specify client ID and client secret", "Invalid request - must specify client ID and client secret", @@ -88,7 +88,7 @@ func (invite *UserInvite) configure(c echo.Context) error { scopes := strings.Split(uaaRecord.Scope, " ") if !arrayContainsString(scopes, scimInviteScope) || !arrayContainsString(scopes, cloudControllerAdminScope) { // Doesn't have the scopes needed - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Specified Client does not have the required scopes", "Specified Client does not have the required scopes", diff --git a/src/jetstream/plugins/userinvite/auth.go b/src/jetstream/plugins/userinvite/auth.go index 592b0f8561..aad151710c 100644 --- a/src/jetstream/plugins/userinvite/auth.go +++ b/src/jetstream/plugins/userinvite/auth.go @@ -14,11 +14,11 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // RefreshToken will refresh the token for the client -func (invite *UserInvite) RefreshToken(cfGUID, clientID, clientSecret string) (*interfaces.UAAResponse, *interfaces.TokenRecord, error) { +func (invite *UserInvite) RefreshToken(cfGUID, clientID, clientSecret string) (*api.UAAResponse, *api.TokenRecord, error) { endpoint, err := invite.checkEndpoint(cfGUID) if err != nil { return nil, nil, err @@ -30,7 +30,7 @@ func (invite *UserInvite) RefreshToken(cfGUID, clientID, clientSecret string) (* } if err = invite.portalProxy.SaveEndpointToken(cfGUID, UserInviteUserID, *tokenRecord); err != nil { - return nil, nil, interfaces.NewHTTPShadowError( + return nil, nil, api.NewHTTPShadowError( http.StatusInternalServerError, "Unable to save user invite token", "Unable to save user invite token: %+v", err, @@ -40,7 +40,7 @@ func (invite *UserInvite) RefreshToken(cfGUID, clientID, clientSecret string) (* return uaaRecord, tokenRecord, nil } -func (invite *UserInvite) refreshToken(clientID, clientSecret string, endpoint interfaces.CNSIRecord) (*interfaces.UAAResponse, *interfaces.TokenRecord, error) { +func (invite *UserInvite) refreshToken(clientID, clientSecret string, endpoint api.CNSIRecord) (*api.UAAResponse, *api.TokenRecord, error) { now := time.Now() clientSecret = strings.TrimSpace(clientSecret) authEndpoint := fmt.Sprintf("%s/oauth/token", endpoint.TokenEndpoint) @@ -73,7 +73,7 @@ func (invite *UserInvite) refreshToken(clientID, clientSecret string, endpoint i errMsg = fmt.Sprintf("Could not check Client: %s", data["error_description"]) } - return nil, nil, interfaces.NewHTTPShadowError( + return nil, nil, api.NewHTTPShadowError( res.StatusCode, errMsg, errMsg, @@ -85,22 +85,22 @@ func (invite *UserInvite) refreshToken(clientID, clientSecret string, endpoint i // Check error code if res.StatusCode != http.StatusOK { errMessage := "Error validating Client ID and Client Secret" - authError := &interfaces.UAAErrorResponse{} + authError := &api.UAAErrorResponse{} uaaResponse, _ := ioutil.ReadAll(res.Body) if err := json.Unmarshal([]byte(uaaResponse), authError); err == nil { errMessage = errMessage + " - " + authError.ErrorDescription } - return nil, nil, interfaces.NewHTTPShadowError( + return nil, nil, api.NewHTTPShadowError( res.StatusCode, errMessage, errMessage+" %+v", err, ) } - var uaaResponse interfaces.UAAResponse + var uaaResponse api.UAAResponse dec := json.NewDecoder(res.Body) if err = dec.Decode(&uaaResponse); err != nil { - return nil, nil, interfaces.NewHTTPShadowError( + return nil, nil, api.NewHTTPShadowError( http.StatusBadRequest, "Error parsing response from UAA", "Error parsing response from UAA: %+v", err, @@ -109,7 +109,7 @@ func (invite *UserInvite) refreshToken(clientID, clientSecret string, endpoint i duration := time.Duration(uaaResponse.ExpiresIn) * time.Second expiry := now.Add(duration).Unix() - tokenRecord := &interfaces.TokenRecord{ + tokenRecord := &api.TokenRecord{ RefreshToken: fmt.Sprintf("%s:%s", clientID, clientSecret), AuthToken: uaaResponse.AccessToken, TokenExpiry: expiry, @@ -119,12 +119,12 @@ func (invite *UserInvite) refreshToken(clientID, clientSecret string, endpoint i return &uaaResponse, tokenRecord, nil } -func (invite *UserInvite) checkEndpoint(cfGUID string) (interfaces.CNSIRecord, error) { +func (invite *UserInvite) checkEndpoint(cfGUID string) (api.CNSIRecord, error) { // Check that there is an endpoint with the specified ID and that it is a Cloud Foundry endpoint endpoint, err := invite.portalProxy.GetCNSIRecord(cfGUID) if err != nil { // Could find the endpoint - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusBadRequest, "Can not find enpoint", "Can not find enpoint: %s", cfGUID, @@ -132,7 +132,7 @@ func (invite *UserInvite) checkEndpoint(cfGUID string) (interfaces.CNSIRecord, e } if endpoint.CNSIType != "cf" { - return interfaces.CNSIRecord{}, interfaces.NewHTTPShadowError( + return api.CNSIRecord{}, api.NewHTTPShadowError( http.StatusBadRequest, "Not a Cloud Foundry endpoint", "Not a Cloud Foundry endpoint: %s", cfGUID, @@ -174,20 +174,20 @@ func parseAuthHeader(v string) map[string]string { return nameValues } -func (invite *UserInvite) doUAAClientAuthFlow(cnsiRequest *interfaces.CNSIRequest, req *http.Request) (*http.Response, error) { +func (invite *UserInvite) doUAAClientAuthFlow(cnsiRequest *api.CNSIRequest, req *http.Request) (*http.Response, error) { log.Debug("doUAAClientAuthFlow") authHandler := invite.portalProxy.OAuthHandlerFunc(cnsiRequest, req, invite.refreshUAAClientToken) return invite.portalProxy.DoAuthFlowRequest(cnsiRequest, req, authHandler) } -func (invite *UserInvite) getCNSIUserFromUAAClientToken(cnsiGUID string, cfTokenRecord *interfaces.TokenRecord) (*interfaces.ConnectedUser, bool) { +func (invite *UserInvite) getCNSIUserFromUAAClientToken(cnsiGUID string, cfTokenRecord *api.TokenRecord) (*api.ConnectedUser, bool) { log.Debug("getCNSIUserFromUAAClientToken") - return &interfaces.ConnectedUser{}, true + return &api.ConnectedUser{}, true } -func (invite *UserInvite) refreshUAAClientToken(skipSSLValidation bool, cnsiGUID, userGUID, clientID, clientSecret, tokenEndpoint string) (t interfaces.TokenRecord, err error) { +func (invite *UserInvite) refreshUAAClientToken(skipSSLValidation bool, cnsiGUID, userGUID, clientID, clientSecret, tokenEndpoint string) (t api.TokenRecord, err error) { log.Debug("refreshUAAClientToken") - refreshedToken := &interfaces.TokenRecord{} + refreshedToken := &api.TokenRecord{} // See if we can get a token for the invite user token, ok := invite.portalProxy.GetCNSITokenRecord(cnsiGUID, userGUID) diff --git a/src/jetstream/plugins/userinvite/config.go b/src/jetstream/plugins/userinvite/config.go index 3964669d81..e735b41bb3 100644 --- a/src/jetstream/plugins/userinvite/config.go +++ b/src/jetstream/plugins/userinvite/config.go @@ -7,7 +7,7 @@ import ( "path" text "text/template" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" "github.com/govau/cf-common/env" log "github.com/sirupsen/logrus" diff --git a/src/jetstream/plugins/userinvite/email.go b/src/jetstream/plugins/userinvite/email.go index bd34b6e52e..73c0bf98fd 100644 --- a/src/jetstream/plugins/userinvite/email.go +++ b/src/jetstream/plugins/userinvite/email.go @@ -7,7 +7,7 @@ import ( "net/smtp" "strings" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/domodwyer/mailyak" log "github.com/sirupsen/logrus" ) @@ -21,7 +21,7 @@ type EmailTemplateParams struct { } // SendEmail sends an invitation email to a user using the configured templates -func (invite *UserInvite) SendEmail(emailAddress, inviteLink string, endpoint interfaces.CNSIRecord) error { +func (invite *UserInvite) SendEmail(emailAddress, inviteLink string, endpoint api.CNSIRecord) error { log.Debugf("User Invite: Sending Email to: %s", emailAddress) mailHost := fmt.Sprintf("%s:%d", invite.Config.SMTP.Host, invite.Config.SMTP.Port) diff --git a/src/jetstream/plugins/userinvite/endpoint.go b/src/jetstream/plugins/userinvite/endpoint.go index cf7a7169e9..871dc7f0d4 100644 --- a/src/jetstream/plugins/userinvite/endpoint.go +++ b/src/jetstream/plugins/userinvite/endpoint.go @@ -3,7 +3,7 @@ package userinvite import ( "errors" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" @@ -20,21 +20,21 @@ func (invite *UserInvite) Register(echoContext echo.Context) error { } // Connect is not implemented -func (invite *UserInvite) Connect(echoContext echo.Context, cnsiRecord interfaces.CNSIRecord, userId string) (*interfaces.TokenRecord, bool, error) { +func (invite *UserInvite) Connect(echoContext echo.Context, cnsiRecord api.CNSIRecord, userId string) (*api.TokenRecord, bool, error) { return nil, false, errors.New("Not implemented") } // Info is not implemented -func (invite *UserInvite) Info(apiEndpoint string, skipSSLValidation bool) (interfaces.CNSIRecord, interface{}, error) { - return interfaces.CNSIRecord{}, nil, errors.New("Not implemented") +func (invite *UserInvite) Info(apiEndpoint string, skipSSLValidation bool) (api.CNSIRecord, interface{}, error) { + return api.CNSIRecord{}, nil, errors.New("Not implemented") } -func (invite *UserInvite) Validate(userGUID string, cnsiRecord interfaces.CNSIRecord, tokenRecord interfaces.TokenRecord) error { +func (invite *UserInvite) Validate(userGUID string, cnsiRecord api.CNSIRecord, tokenRecord api.TokenRecord) error { return errors.New("Not implemented") } // UpdateMetadata will add metadata for each Cloud Foundry endpoint to indicate if user invitation is allowed -func (invite *UserInvite) UpdateMetadata(info *interfaces.Info, userGUID string, echoContext echo.Context) { +func (invite *UserInvite) UpdateMetadata(info *api.Info, userGUID string, echoContext echo.Context) { log.Debug("User Invite:: UpdateMetadata") endpoints, err := invite.portalProxy.ListEndpointsByUser(UserInviteUserID) if err == nil { @@ -48,7 +48,7 @@ func (invite *UserInvite) UpdateMetadata(info *interfaces.Info, userGUID string, } } -func hasInviteToken(endpoints []*interfaces.ConnectedEndpoint, guid string) string { +func hasInviteToken(endpoints []*api.ConnectedEndpoint, guid string) string { for _, ep := range endpoints { if ep.GUID == guid { return "true" diff --git a/src/jetstream/plugins/userinvite/invite.go b/src/jetstream/plugins/userinvite/invite.go index 5db8877e4b..c461848dd2 100644 --- a/src/jetstream/plugins/userinvite/invite.go +++ b/src/jetstream/plugins/userinvite/invite.go @@ -14,7 +14,7 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // CFError is the error info returned from the CF API @@ -83,37 +83,37 @@ func (invite *UserInvite) invite(c echo.Context) error { endpoint, err := invite.portalProxy.GetCNSIRecord(cfGUID) if err != nil { // Could find the endpoint - return interfaces.NewHTTPError(http.StatusServiceUnavailable, "Can not find endpoint") + return api.NewHTTPError(http.StatusServiceUnavailable, "Can not find endpoint") } if endpoint.CNSIType != "cf" { - return interfaces.NewHTTPError(http.StatusServiceUnavailable, "Not a Cloud Foundry endpoint") + return api.NewHTTPError(http.StatusServiceUnavailable, "Not a Cloud Foundry endpoint") } // Check we can unmarshall the request body, err := ioutil.ReadAll(c.Request().Body) if err != nil { - return interfaces.NewHTTPError(http.StatusBadRequest, "Invalid request body") + return api.NewHTTPError(http.StatusBadRequest, "Invalid request body") } userInviteRequest := &UserInviteReq{} if err = json.Unmarshal(body, userInviteRequest); err != nil { - return interfaces.NewHTTPError(http.StatusBadRequest, "Invalid request body - could not parse JSON") + return api.NewHTTPError(http.StatusBadRequest, "Invalid request body - could not parse JSON") } // Check we have at least one email address if len(userInviteRequest.Emails) == 0 { - return interfaces.NewHTTPError(http.StatusBadRequest, "Invalid request body - no email addresses provided") + return api.NewHTTPError(http.StatusBadRequest, "Invalid request body - no email addresses provided") } // Must provide an Orgs if len(userInviteRequest.Org) == 0 { - return interfaces.NewHTTPError(http.StatusBadRequest, "Invalid request body - no org provided") + return api.NewHTTPError(http.StatusBadRequest, "Invalid request body - no org provided") } // Check user has correct permissions before making the call to the UAA if err = invite.checkPermissions(c, endpoint, userInviteRequest); err != nil { - return interfaces.NewHTTPError(http.StatusUnauthorized, "You are not authorized to invite users") + return api.NewHTTPError(http.StatusUnauthorized, "You are not authorized to invite users") } inviteResponse, err := invite.processUserInvites(c, endpoint, userInviteRequest) @@ -124,14 +124,14 @@ func (invite *UserInvite) invite(c echo.Context) error { // Send back the response to the client jsonString, err := json.Marshal(inviteResponse) if err != nil { - return interfaces.NewHTTPError(http.StatusInternalServerError, "Failed to serialize response") + return api.NewHTTPError(http.StatusInternalServerError, "Failed to serialize response") } c.Response().Header().Set("Content-Type", "application/json") c.Response().Write(jsonString) return nil } -func (invite *UserInvite) processUserInvites(c echo.Context, endpoint interfaces.CNSIRecord, userInviteRequest *UserInviteReq) (*UserInviteResponse, error) { +func (invite *UserInvite) processUserInvites(c echo.Context, endpoint api.CNSIRecord, userInviteRequest *UserInviteReq) (*UserInviteResponse, error) { cfGUID := c.Param("id") userGUID := c.Get("user_id").(string) @@ -162,7 +162,7 @@ func (invite *UserInvite) processUserInvites(c echo.Context, endpoint interfaces return inviteResponse, nil } -func (invite *UserInvite) processUserInvite(cfGUID, userGUID string, userInviteRequest *UserInviteReq, user UserInviteUser, endpoint interfaces.CNSIRecord) (UserInviteUser, bool) { +func (invite *UserInvite) processUserInvite(cfGUID, userGUID string, userInviteRequest *UserInviteReq, user UserInviteUser, endpoint api.CNSIRecord) (UserInviteUser, bool) { log.Debugf("Creating CF User for: %s", user.Email) // Create the user in Cloud Foundry if cfError, err := invite.CreateCloudFoundryUser(cfGUID, userGUID, user.UserID); err != nil { @@ -196,19 +196,19 @@ func (invite *UserInvite) processUserInvite(cfGUID, userGUID string, userInviteR } // UAAUserInvite makes the request to the UAA to create accounts and invite links -func (invite *UserInvite) UAAUserInvite(c echo.Context, endpoint interfaces.CNSIRecord, uaaInviteReq *UserInviteReq) (*UserInviteResponse, error) { +func (invite *UserInvite) UAAUserInvite(c echo.Context, endpoint api.CNSIRecord, uaaInviteReq *UserInviteReq) (*UserInviteResponse, error) { log.Debug("Requesting invite links from UAA") // See if we can get a token for the invite user token, ok := invite.portalProxy.GetCNSITokenRecord(endpoint.GUID, UserInviteUserID) if !ok { // Not configured - return nil, interfaces.NewHTTPError(http.StatusServiceUnavailable, "User Invite not available") + return nil, api.NewHTTPError(http.StatusServiceUnavailable, "User Invite not available") } client := strings.Split(token.RefreshToken, ":") if len(client) != 2 { - return nil, interfaces.NewHTTPError(http.StatusBadRequest, "Invalid client ID and client Secret configuration") + return nil, api.NewHTTPError(http.StatusBadRequest, "Invalid client ID and client Secret configuration") } returnURL := getReturnURL(c) @@ -226,7 +226,7 @@ func (invite *UserInvite) UAAUserInvite(c echo.Context, endpoint interfaces.CNSI } token, ok = invite.portalProxy.GetCNSITokenRecord(endpoint.GUID, UserInviteUserID) if !ok { - return nil, interfaces.NewHTTPError(http.StatusServiceUnavailable, "User Invite not available - could not get token after refresh") + return nil, api.NewHTTPError(http.StatusServiceUnavailable, "User Invite not available - could not get token after refresh") } } @@ -234,7 +234,7 @@ func (invite *UserInvite) UAAUserInvite(c echo.Context, endpoint interfaces.CNSI uaaReq.Emails = uaaInviteReq.Emails uaaReqJSON, err := json.Marshal(uaaReq) if err != nil { - return nil, interfaces.NewHTTPError(http.StatusInternalServerError, "Failed to serialize email") + return nil, api.NewHTTPError(http.StatusInternalServerError, "Failed to serialize email") } // Make request to the UAA to invite the users @@ -252,14 +252,14 @@ func (invite *UserInvite) UAAUserInvite(c echo.Context, endpoint interfaces.CNSI res, err := httpClient.Do(req) if err != nil || res.StatusCode != http.StatusOK { log.Errorf("Error performing http request - response: %v, error: %v", res, err) - return nil, interfaces.LogHTTPError(res, err) + return nil, api.LogHTTPError(res, err) } // Read the response defer res.Body.Close() body, err := ioutil.ReadAll(res.Body) if err != nil { - return nil, interfaces.NewHTTPShadowError( + return nil, api.NewHTTPShadowError( http.StatusInternalServerError, "Failed to request user invite links", "Failed to request user invite links: %+v", @@ -269,7 +269,7 @@ func (invite *UserInvite) UAAUserInvite(c echo.Context, endpoint interfaces.CNSI inviteResponse := &UserInviteResponse{} if err = json.Unmarshal(body, inviteResponse); err != nil { - return nil, interfaces.NewHTTPError(http.StatusInternalServerError, "Failed to request invites for users") + return nil, api.NewHTTPError(http.StatusInternalServerError, "Failed to request invites for users") } return inviteResponse, nil @@ -384,7 +384,7 @@ func getReturnURL(c echo.Context) string { } // Check that the user has permissions required - i.e. is an Org Manager of the Org -func (invite *UserInvite) checkPermissions(c echo.Context, endpoint interfaces.CNSIRecord, userInviteRequest *UserInviteReq) error { +func (invite *UserInvite) checkPermissions(c echo.Context, endpoint api.CNSIRecord, userInviteRequest *UserInviteReq) error { cfGUID := c.Param("id") userGUID := c.Get("user_id").(string) diff --git a/src/jetstream/plugins/userinvite/main.go b/src/jetstream/plugins/userinvite/main.go index ff2df865ef..9295c46715 100644 --- a/src/jetstream/plugins/userinvite/main.go +++ b/src/jetstream/plugins/userinvite/main.go @@ -4,19 +4,19 @@ import ( "errors" "fmt" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) // Module init will register plugin func init() { - interfaces.AddPlugin("userinvite", []string{"cloudfoundry"}, Init) + api.AddPlugin("userinvite", []string{"cloudfoundry"}, Init) } // UserInvite is a plugin to allow user invitations type UserInvite struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy Config *Config } @@ -30,7 +30,7 @@ const UserInvitePluginConfigSetting = "userInvitationsEnabled" const UAAClientAuthType = "uaa-client" // Init creates a new UserInvite -func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { +func Init(portalProxy api.PortalProxy) (api.StratosPlugin, error) { init := &UserInvite{portalProxy: portalProxy} c, err := init.LoadConfig(*portalProxy.Env()) @@ -43,17 +43,17 @@ func Init(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) } // GetMiddlewarePlugin gets the middleware plugin for this plugin -func (userinvite *UserInvite) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (userinvite *UserInvite) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } // GetEndpointPlugin gets the endpoint plugin for this plugin -func (userinvite *UserInvite) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (userinvite *UserInvite) GetEndpointPlugin() (api.EndpointPlugin, error) { return userinvite, nil } // GetRoutePlugin gets the route plugin for this plugin -func (userinvite *UserInvite) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (userinvite *UserInvite) GetRoutePlugin() (api.RoutePlugin, error) { return userinvite, nil } @@ -81,7 +81,7 @@ func (userinvite *UserInvite) Init() error { userinvite.portalProxy.GetConfig().PluginConfig[UserInvitePluginConfigSetting] = "true" userinvite.portalProxy.AddLoginHook(5, userinvite.initClientToken) - userinvite.portalProxy.AddAuthProvider(UAAClientAuthType, interfaces.AuthProvider{ + userinvite.portalProxy.AddAuthProvider(UAAClientAuthType, api.AuthProvider{ Handler: userinvite.doUAAClientAuthFlow, UserInfo: userinvite.getCNSIUserFromUAAClientToken, }) diff --git a/src/jetstream/plugins/yamlgenerated/main.go b/src/jetstream/plugins/yamlgenerated/main.go index a9554e74ce..3285c15154 100644 --- a/src/jetstream/plugins/yamlgenerated/main.go +++ b/src/jetstream/plugins/yamlgenerated/main.go @@ -10,7 +10,7 @@ import ( "net/url" "strings" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" "gopkg.in/yaml.v2" @@ -20,15 +20,15 @@ import ( // GeneratedPlugin represents a generated plugin type GeneratedPlugin struct { initMethod func() error - middlewarePlugin func() (interfaces.MiddlewarePlugin, error) - endpointPlugin func() (interfaces.EndpointPlugin, error) - routePlugin func() (interfaces.RoutePlugin, error) + middlewarePlugin func() (api.MiddlewarePlugin, error) + endpointPlugin func() (api.EndpointPlugin, error) + routePlugin func() (api.RoutePlugin, error) } var authTypeToConnectTypeMap = map[string]string{ - interfaces.AuthTypeHttpBasic: interfaces.AuthConnectTypeCreds, - interfaces.AuthTypeBearer: interfaces.AuthConnectTypeBearer, - interfaces.AuthTypeToken: interfaces.AuthConnectTypeToken, + api.AuthTypeHttpBasic: api.AuthConnectTypeCreds, + api.AuthTypeBearer: api.AuthConnectTypeBearer, + api.AuthTypeToken: api.AuthConnectTypeToken, } const defaultTokenUsername = "**token**" @@ -48,19 +48,19 @@ type pluginConfig struct { // Init the plugin func (gp GeneratedPlugin) Init() error { return gp.initMethod() } -func (gp GeneratedPlugin) GetMiddlewarePlugin() (interfaces.MiddlewarePlugin, error) { +func (gp GeneratedPlugin) GetMiddlewarePlugin() (api.MiddlewarePlugin, error) { return gp.middlewarePlugin() } -func (gp GeneratedPlugin) GetEndpointPlugin() (interfaces.EndpointPlugin, error) { +func (gp GeneratedPlugin) GetEndpointPlugin() (api.EndpointPlugin, error) { return gp.endpointPlugin() } -func (gp GeneratedPlugin) GetRoutePlugin() (interfaces.RoutePlugin, error) { +func (gp GeneratedPlugin) GetRoutePlugin() (api.RoutePlugin, error) { return gp.routePlugin() } // GeneratedEndpointPlugin represents a generated endpoint plugin type GeneratedEndpointPlugin struct { - portalProxy interfaces.PortalProxy + portalProxy api.PortalProxy endpointType string subTypes map[string]pluginConfig } @@ -73,13 +73,13 @@ func (gep GeneratedEndpointPlugin) Register(ec echo.Context) error { return gep.portalProxy.RegisterEndpoint(ec, gep.Info) } -func (gep GeneratedEndpointPlugin) Validate(userGUID string, cnsiRecord interfaces.CNSIRecord, tokenRecord interfaces.TokenRecord) error { +func (gep GeneratedEndpointPlugin) Validate(userGUID string, cnsiRecord api.CNSIRecord, tokenRecord api.TokenRecord) error { return nil } -func (gep GeneratedEndpointPlugin) Connect(ec echo.Context, cnsiRecord interfaces.CNSIRecord, userId string) (*interfaces.TokenRecord, bool, error) { - params := new(interfaces.LoginToCNSIParams) - err := interfaces.BindOnce(params, ec) +func (gep GeneratedEndpointPlugin) Connect(ec echo.Context, cnsiRecord api.CNSIRecord, userId string) (*api.TokenRecord, bool, error) { + params := new(api.LoginToCNSIParams) + err := api.BindOnce(params, ec) if err != nil { return nil, false, err } @@ -99,10 +99,10 @@ func (gep GeneratedEndpointPlugin) Connect(ec echo.Context, cnsiRecord interface return nil, false, fmt.Errorf("Only %q connect type is supported for %q.%q endpoints", expectedConnectType, gep.GetType(), cnsiRecord.SubType) } - var tr *interfaces.TokenRecord + var tr *api.TokenRecord switch params.ConnectType { - case interfaces.AuthConnectTypeCreds: + case api.AuthConnectTypeCreds: if len(params.Username) == 0 || len(params.Password) == 0 { return nil, false, errors.New("Need username and password") } @@ -110,26 +110,26 @@ func (gep GeneratedEndpointPlugin) Connect(ec echo.Context, cnsiRecord interface authString := fmt.Sprintf("%s:%s", params.Username, params.Password) base64EncodedAuthString := base64.StdEncoding.EncodeToString([]byte(authString)) - tr = &interfaces.TokenRecord{ - AuthType: interfaces.AuthTypeHttpBasic, + tr = &api.TokenRecord{ + AuthType: api.AuthTypeHttpBasic, AuthToken: base64EncodedAuthString, RefreshToken: params.Username, } - case interfaces.AuthConnectTypeBearer: + case api.AuthConnectTypeBearer: authString := ec.FormValue("token") base64EncodedAuthString := base64.StdEncoding.EncodeToString([]byte(authString)) - tr = &interfaces.TokenRecord{ - AuthType: interfaces.AuthTypeBearer, + tr = &api.TokenRecord{ + AuthType: api.AuthTypeBearer, AuthToken: base64EncodedAuthString, } tr.RefreshToken = gep.fetchUsername(subType, &cnsiRecord, tr) - case interfaces.AuthConnectTypeToken: + case api.AuthConnectTypeToken: authString := ec.FormValue("token") base64EncodedAuthString := base64.StdEncoding.EncodeToString([]byte(authString)) - tr = &interfaces.TokenRecord{ - AuthType: interfaces.AuthTypeToken, + tr = &api.TokenRecord{ + AuthType: api.AuthTypeToken, AuthToken: base64EncodedAuthString, } tr.RefreshToken = gep.fetchUsername(subType, &cnsiRecord, tr) @@ -139,7 +139,7 @@ func (gep GeneratedEndpointPlugin) Connect(ec echo.Context, cnsiRecord interface } // We support a basic mechanism for fetching the username of the user if configured -func (gep GeneratedEndpointPlugin) fetchUsername(config pluginConfig, cnsiRecord *interfaces.CNSIRecord, tr *interfaces.TokenRecord) string { +func (gep GeneratedEndpointPlugin) fetchUsername(config pluginConfig, cnsiRecord *api.CNSIRecord, tr *api.TokenRecord) string { if len(config.UserInfoAPI) == 0 || len(config.UserInfoPath) == 0 { // Not configured return defaultTokenUsername @@ -189,9 +189,9 @@ func getJSONValue(data map[string]interface{}, valuePath string) string { } // Info gets the info for the endpoint -func (gep GeneratedEndpointPlugin) Info(apiEndpoint string, skipSSLValidation bool) (interfaces.CNSIRecord, interface{}, error) { +func (gep GeneratedEndpointPlugin) Info(apiEndpoint string, skipSSLValidation bool) (api.CNSIRecord, interface{}, error) { var dummy interface{} - var newCNSI interfaces.CNSIRecord + var newCNSI api.CNSIRecord newCNSI.CNSIType = gep.GetType() @@ -207,7 +207,7 @@ func (gep GeneratedEndpointPlugin) Info(apiEndpoint string, skipSSLValidation bo } // UpdateMetadata allows the pluigin to update the metadata for endpoints - not used in the generic case -func (gep GeneratedEndpointPlugin) UpdateMetadata(info *interfaces.Info, userGUID string, echoContext echo.Context) { +func (gep GeneratedEndpointPlugin) UpdateMetadata(info *api.Info, userGUID string, echoContext echo.Context) { // no-op } @@ -262,14 +262,14 @@ func createPluginForEndpointType(endpointType string) GeneratedEndpointPlugin { gp := GeneratedPlugin{} gp.initMethod = func() error { return nil } - gp.endpointPlugin = func() (interfaces.EndpointPlugin, error) { return gep, nil } - gp.middlewarePlugin = func() (interfaces.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } - gp.routePlugin = func() (interfaces.RoutePlugin, error) { return nil, errors.New("Not implemented") } + gp.endpointPlugin = func() (api.EndpointPlugin, error) { return gep, nil } + gp.middlewarePlugin = func() (api.MiddlewarePlugin, error) { return nil, errors.New("Not implemented") } + gp.routePlugin = func() (api.RoutePlugin, error) { return nil, errors.New("Not implemented") } - interfaces.AddPlugin( + api.AddPlugin( endpointType, []string{}, - func(portalProxy interfaces.PortalProxy) (interfaces.StratosPlugin, error) { + func(portalProxy api.PortalProxy) (api.StratosPlugin, error) { log.Debugf("%s -- initializing", endpointType) gep.portalProxy = portalProxy return gp, nil diff --git a/src/jetstream/portal_config.go b/src/jetstream/portal_config.go index ce0a94b928..846f68b6d0 100644 --- a/src/jetstream/portal_config.go +++ b/src/jetstream/portal_config.go @@ -1,11 +1,11 @@ package main import ( - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/govau/cf-common/env" ) -func (p *portalProxy) GetConfig() *interfaces.PortalConfig { +func (p *portalProxy) GetConfig() *api.PortalConfig { return &p.Config } diff --git a/src/jetstream/portal_proxy.go b/src/jetstream/portal_proxy.go index 223a8277ee..6e1a398d40 100644 --- a/src/jetstream/portal_proxy.go +++ b/src/jetstream/portal_proxy.go @@ -6,29 +6,29 @@ import ( "time" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/apikeys" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/gorilla/sessions" "github.com/govau/cf-common/env" "github.com/labstack/echo/v4" ) type portalProxy struct { - Config interfaces.PortalConfig + Config api.PortalConfig DatabaseConnectionPool *sql.DB - SessionStore interfaces.SessionStorer + SessionStore api.SessionStorer SessionStoreOptions *sessions.Options - SessionDataStore interfaces.SessionDataStore - Plugins map[string]interfaces.StratosPlugin + SessionDataStore api.SessionDataStore + Plugins map[string]api.StratosPlugin PluginsStatus map[string]bool - Diagnostics *interfaces.Diagnostics + Diagnostics *api.Diagnostics SessionCookieName string EmptyCookieMatcher *regexp.Regexp // Used to detect and remove empty Cookies sent by certain browsers - AuthProviders map[string]interfaces.AuthProvider + AuthProviders map[string]api.AuthProvider env *env.VarSet - StratosAuthService interfaces.StratosAuth + StratosAuthService api.StratosAuth APIKeysRepository apikeys.Repository PluginRegisterRoutes map[string]func(echo.Context) error - StoreFactory interfaces.StoreFactory + StoreFactory api.StoreFactory } // HttpSessionStore - Interface for a store that can manage HTTP Sessions diff --git a/src/jetstream/repository/apikeys/apikeys.go b/src/jetstream/repository/apikeys/apikeys.go index bf783990a0..9e6a9470fd 100644 --- a/src/jetstream/repository/apikeys/apikeys.go +++ b/src/jetstream/repository/apikeys/apikeys.go @@ -1,12 +1,12 @@ package apikeys -import "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" +import "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" // Repository - API keys repository type Repository interface { - AddAPIKey(userID string, comment string) (*interfaces.APIKey, error) - GetAPIKeyBySecret(keySecret string) (*interfaces.APIKey, error) - ListAPIKeys(userID string) ([]interfaces.APIKey, error) + AddAPIKey(userID string, comment string) (*api.APIKey, error) + GetAPIKeyBySecret(keySecret string) (*api.APIKey, error) + ListAPIKeys(userID string) ([]api.APIKey, error) DeleteAPIKey(userGUID string, keyGUID string) error UpdateAPIKeyLastUsed(keyGUID string) error } diff --git a/src/jetstream/repository/apikeys/mock_apikeys.go b/src/jetstream/repository/apikeys/mock/mock_apikeys.go similarity index 73% rename from src/jetstream/repository/apikeys/mock_apikeys.go rename to src/jetstream/repository/apikeys/mock/mock_apikeys.go index d507eb5991..7269066243 100644 --- a/src/jetstream/repository/apikeys/mock_apikeys.go +++ b/src/jetstream/repository/apikeys/mock/mock_apikeys.go @@ -1,98 +1,99 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: apikeys.go +// Source: repository/apikeys/apikeys.go -// Package apikeys is a generated GoMock package. -package apikeys +// Package mock_apikeys is a generated GoMock package. +package mock_apikeys import ( - interfaces "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - gomock "github.com/golang/mock/gomock" reflect "reflect" + + api "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + gomock "github.com/golang/mock/gomock" ) -// MockRepository is a mock of Repository interface +// MockRepository is a mock of Repository interface. type MockRepository struct { ctrl *gomock.Controller recorder *MockRepositoryMockRecorder } -// MockRepositoryMockRecorder is the mock recorder for MockRepository +// MockRepositoryMockRecorder is the mock recorder for MockRepository. type MockRepositoryMockRecorder struct { mock *MockRepository } -// NewMockRepository creates a new mock instance +// NewMockRepository creates a new mock instance. func NewMockRepository(ctrl *gomock.Controller) *MockRepository { mock := &MockRepository{ctrl: ctrl} mock.recorder = &MockRepositoryMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use +// EXPECT returns an object that allows the caller to indicate expected use. func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder { return m.recorder } -// AddAPIKey mocks base method -func (m *MockRepository) AddAPIKey(userID, comment string) (*interfaces.APIKey, error) { +// AddAPIKey mocks base method. +func (m *MockRepository) AddAPIKey(userID, comment string) (*api.APIKey, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "AddAPIKey", userID, comment) - ret0, _ := ret[0].(*interfaces.APIKey) + ret0, _ := ret[0].(*api.APIKey) ret1, _ := ret[1].(error) return ret0, ret1 } -// AddAPIKey indicates an expected call of AddAPIKey +// AddAPIKey indicates an expected call of AddAPIKey. func (mr *MockRepositoryMockRecorder) AddAPIKey(userID, comment interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddAPIKey", reflect.TypeOf((*MockRepository)(nil).AddAPIKey), userID, comment) } -// GetAPIKeyBySecret mocks base method -func (m *MockRepository) GetAPIKeyBySecret(keySecret string) (*interfaces.APIKey, error) { +// DeleteAPIKey mocks base method. +func (m *MockRepository) DeleteAPIKey(userGUID, keyGUID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteAPIKey", userGUID, keyGUID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteAPIKey indicates an expected call of DeleteAPIKey. +func (mr *MockRepositoryMockRecorder) DeleteAPIKey(userGUID, keyGUID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAPIKey", reflect.TypeOf((*MockRepository)(nil).DeleteAPIKey), userGUID, keyGUID) +} + +// GetAPIKeyBySecret mocks base method. +func (m *MockRepository) GetAPIKeyBySecret(keySecret string) (*api.APIKey, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetAPIKeyBySecret", keySecret) - ret0, _ := ret[0].(*interfaces.APIKey) + ret0, _ := ret[0].(*api.APIKey) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetAPIKeyBySecret indicates an expected call of GetAPIKeyBySecret +// GetAPIKeyBySecret indicates an expected call of GetAPIKeyBySecret. func (mr *MockRepositoryMockRecorder) GetAPIKeyBySecret(keySecret interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAPIKeyBySecret", reflect.TypeOf((*MockRepository)(nil).GetAPIKeyBySecret), keySecret) } -// ListAPIKeys mocks base method -func (m *MockRepository) ListAPIKeys(userID string) ([]interfaces.APIKey, error) { +// ListAPIKeys mocks base method. +func (m *MockRepository) ListAPIKeys(userID string) ([]api.APIKey, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "ListAPIKeys", userID) - ret0, _ := ret[0].([]interfaces.APIKey) + ret0, _ := ret[0].([]api.APIKey) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListAPIKeys indicates an expected call of ListAPIKeys +// ListAPIKeys indicates an expected call of ListAPIKeys. func (mr *MockRepositoryMockRecorder) ListAPIKeys(userID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListAPIKeys", reflect.TypeOf((*MockRepository)(nil).ListAPIKeys), userID) } -// DeleteAPIKey mocks base method -func (m *MockRepository) DeleteAPIKey(userGUID, keyGUID string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteAPIKey", userGUID, keyGUID) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteAPIKey indicates an expected call of DeleteAPIKey -func (mr *MockRepositoryMockRecorder) DeleteAPIKey(userGUID, keyGUID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAPIKey", reflect.TypeOf((*MockRepository)(nil).DeleteAPIKey), userGUID, keyGUID) -} - -// UpdateAPIKeyLastUsed mocks base method +// UpdateAPIKeyLastUsed mocks base method. func (m *MockRepository) UpdateAPIKeyLastUsed(keyGUID string) error { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "UpdateAPIKeyLastUsed", keyGUID) @@ -100,7 +101,7 @@ func (m *MockRepository) UpdateAPIKeyLastUsed(keyGUID string) error { return ret0 } -// UpdateAPIKeyLastUsed indicates an expected call of UpdateAPIKeyLastUsed +// UpdateAPIKeyLastUsed indicates an expected call of UpdateAPIKeyLastUsed. func (mr *MockRepositoryMockRecorder) UpdateAPIKeyLastUsed(keyGUID interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAPIKeyLastUsed", reflect.TypeOf((*MockRepository)(nil).UpdateAPIKeyLastUsed), keyGUID) diff --git a/src/jetstream/repository/apikeys/psql_apikeys.go b/src/jetstream/repository/apikeys/psql_apikeys.go index 8e95327aaa..30dce8734f 100644 --- a/src/jetstream/repository/apikeys/psql_apikeys.go +++ b/src/jetstream/repository/apikeys/psql_apikeys.go @@ -10,7 +10,7 @@ import ( "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" uuid "github.com/satori/go.uuid" log "github.com/sirupsen/logrus" ) @@ -59,7 +59,7 @@ func InitRepositoryProvider(databaseProvider string) { } // AddAPIKey - Add a new API key to the datastore. -func (p *PgsqlAPIKeysRepository) AddAPIKey(userID string, comment string) (*interfaces.APIKey, error) { +func (p *PgsqlAPIKeysRepository) AddAPIKey(userID string, comment string) (*api.APIKey, error) { log.Debug("AddAPIKey") var err error @@ -88,7 +88,7 @@ func (p *PgsqlAPIKeysRepository) AddAPIKey(userID string, comment string) (*inte return nil, fmt.Errorf("AddAPIKey: %v", err) } - apiKey := &interfaces.APIKey{ + apiKey := &api.APIKey{ GUID: keyGUID, Secret: keySecret, UserGUID: userID, @@ -99,10 +99,10 @@ func (p *PgsqlAPIKeysRepository) AddAPIKey(userID string, comment string) (*inte } // GetAPIKeyBySecret - gets user ID for an API key -func (p *PgsqlAPIKeysRepository) GetAPIKeyBySecret(keySecret string) (*interfaces.APIKey, error) { +func (p *PgsqlAPIKeysRepository) GetAPIKeyBySecret(keySecret string) (*api.APIKey, error) { log.Debug("GetAPIKeyBySecret") - var apiKey interfaces.APIKey + var apiKey api.APIKey err := p.db.QueryRow(sqlQueries.GetAPIKeyBySecret, keySecret).Scan( &apiKey.GUID, @@ -119,7 +119,7 @@ func (p *PgsqlAPIKeysRepository) GetAPIKeyBySecret(keySecret string) (*interface } // ListAPIKeys - list API keys for a given user GUID -func (p *PgsqlAPIKeysRepository) ListAPIKeys(userID string) ([]interfaces.APIKey, error) { +func (p *PgsqlAPIKeysRepository) ListAPIKeys(userID string) ([]api.APIKey, error) { log.Debug("ListAPIKeys") rows, err := p.db.Query(sqlQueries.ListAPIKeys, userID) @@ -128,9 +128,9 @@ func (p *PgsqlAPIKeysRepository) ListAPIKeys(userID string) ([]interfaces.APIKey return nil, err } - result := []interfaces.APIKey{} + result := []api.APIKey{} for rows.Next() { - var apiKey interfaces.APIKey + var apiKey api.APIKey err = rows.Scan(&apiKey.GUID, &apiKey.UserGUID, &apiKey.Comment, &apiKey.LastUsed) if err != nil { log.Errorf("Scan: %v", err) diff --git a/src/jetstream/repository/apikeys/psql_apikeys_test.go b/src/jetstream/repository/apikeys/psql_apikeys_test.go index 3534e4619c..4a3d0ad840 100644 --- a/src/jetstream/repository/apikeys/psql_apikeys_test.go +++ b/src/jetstream/repository/apikeys/psql_apikeys_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" . "github.com/smartystreets/goconvey/convey" "gopkg.in/DATA-DOG/go-sqlmock.v1" ) @@ -83,7 +83,7 @@ func TestAddAPIKey(t *testing.T) { }) Convey("should return an API key", func() { - So(apiKey, ShouldHaveSameTypeAs, &interfaces.APIKey{}) + So(apiKey, ShouldHaveSameTypeAs, &api.APIKey{}) }) Convey("API key secret should not be empty", func() { @@ -127,7 +127,7 @@ func TestListAPIKeys(t *testing.T) { }) Convey("result should be of correct type", func() { - expectedList := make([]interfaces.APIKey, 0) + expectedList := make([]api.APIKey, 0) So(results, ShouldResemble, expectedList) }) }) @@ -135,7 +135,7 @@ func TestListAPIKeys(t *testing.T) { Convey("if records exist in the DB", func() { t := time.Now() - r1 := &interfaces.APIKey{ + r1 := &api.APIKey{ GUID: "00000000-0000-0000-0000-000000000000", Secret: "", UserGUID: userID, @@ -143,7 +143,7 @@ func TestListAPIKeys(t *testing.T) { LastUsed: &t, } - r2 := &interfaces.APIKey{ + r2 := &api.APIKey{ GUID: "11111111-1111-1111-1111-111111111111", Secret: "", UserGUID: userID, @@ -151,7 +151,7 @@ func TestListAPIKeys(t *testing.T) { LastUsed: nil, } - expectedList := []interfaces.APIKey{*r1, *r2} + expectedList := []api.APIKey{*r1, *r2} mockRows := sqlmock.NewRows(rowFields). AddRow(r1.GUID, r1.UserGUID, r1.Comment, r1.LastUsed). @@ -216,7 +216,7 @@ func TestGetAPIKeyBySecret(t *testing.T) { Convey("if records exist in the DB", func() { t := time.Now() - r := &interfaces.APIKey{ + r := &api.APIKey{ GUID: "00000000-0000-0000-0000-000000000000", Secret: "", UserGUID: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", diff --git a/src/jetstream/repository/cnsis/pgsql_cnsis.go b/src/jetstream/repository/cnsis/pgsql_cnsis.go index ae8a4a05b2..a9cc95652b 100644 --- a/src/jetstream/repository/cnsis/pgsql_cnsis.go +++ b/src/jetstream/repository/cnsis/pgsql_cnsis.go @@ -8,7 +8,7 @@ import ( "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" ) @@ -50,7 +50,7 @@ type PostgresCNSIRepository struct { } // NewPostgresCNSIRepository will create a new instance of the PostgresCNSIRepository -func NewPostgresCNSIRepository(dcp *sql.DB) (interfaces.EndpointRepository, error) { +func NewPostgresCNSIRepository(dcp *sql.DB) (api.EndpointRepository, error) { return &PostgresCNSIRepository{db: dcp}, nil } @@ -70,7 +70,7 @@ func InitRepositoryProvider(databaseProvider string) { } // List - Returns a list of CNSI Records -func (p *PostgresCNSIRepository) List(encryptionKey []byte) ([]*interfaces.CNSIRecord, error) { +func (p *PostgresCNSIRepository) List(encryptionKey []byte) ([]*api.CNSIRecord, error) { log.Debug("List") rows, err := p.db.Query(listCNSIs) if err != nil { @@ -78,8 +78,8 @@ func (p *PostgresCNSIRepository) List(encryptionKey []byte) ([]*interfaces.CNSIR } defer rows.Close() - var cnsiList []*interfaces.CNSIRecord - cnsiList = make([]*interfaces.CNSIRecord, 0) + var cnsiList []*api.CNSIRecord + cnsiList = make([]*api.CNSIRecord, 0) for rows.Next() { var ( @@ -90,7 +90,7 @@ func (p *PostgresCNSIRepository) List(encryptionKey []byte) ([]*interfaces.CNSIR metadata sql.NullString ) - cnsi := new(interfaces.CNSIRecord) + cnsi := new(api.CNSIRecord) err := rows.Scan(&cnsi.GUID, &cnsi.Name, &pCNSIType, &pURL, &cnsi.AuthorizationEndpoint, &cnsi.TokenEndpoint, &cnsi.DopplerLoggingEndpoint, &cnsi.SkipSSLValidation, &cnsi.ClientId, &cipherTextClientSecret, &cnsi.SSOAllowed, &subType, &metadata, &cnsi.Creator) if err != nil { @@ -133,7 +133,7 @@ func (p *PostgresCNSIRepository) List(encryptionKey []byte) ([]*interfaces.CNSIR } // ListByUser - Returns a list of CNSIs registered by a user -func (p *PostgresCNSIRepository) ListByUser(userGUID string) ([]*interfaces.ConnectedEndpoint, error) { +func (p *PostgresCNSIRepository) ListByUser(userGUID string) ([]*api.ConnectedEndpoint, error) { log.Debug("ListByUser") rows, err := p.db.Query(listCNSIsByUser, "cnsi", userGUID) if err != nil { @@ -141,8 +141,8 @@ func (p *PostgresCNSIRepository) ListByUser(userGUID string) ([]*interfaces.Conn } defer rows.Close() - var clusterList []*interfaces.ConnectedEndpoint - clusterList = make([]*interfaces.ConnectedEndpoint, 0) + var clusterList []*api.ConnectedEndpoint + clusterList = make([]*api.ConnectedEndpoint, 0) for rows.Next() { var ( @@ -153,7 +153,7 @@ func (p *PostgresCNSIRepository) ListByUser(userGUID string) ([]*interfaces.Conn metadata sql.NullString ) - cluster := new(interfaces.ConnectedEndpoint) + cluster := new(api.ConnectedEndpoint) err := rows.Scan(&cluster.GUID, &cluster.Name, &pCNSIType, &pURL, &cluster.DopplerLoggingEndpoint, &cluster.Account, &cluster.TokenExpiry, &cluster.SkipSSLValidation, &disconnected, &cluster.TokenMetadata, &subType, &metadata, &cluster.Creator) if err != nil { @@ -187,27 +187,27 @@ func (p *PostgresCNSIRepository) ListByUser(userGUID string) ([]*interfaces.Conn } // ListByCreator - Returns a list of CNSIs created by a user -func (p *PostgresCNSIRepository) ListByCreator(userGUID string, encryptionKey []byte) ([]*interfaces.CNSIRecord, error) { +func (p *PostgresCNSIRepository) ListByCreator(userGUID string, encryptionKey []byte) ([]*api.CNSIRecord, error) { log.Debug("ListByCreator") return p.listBy(listCNSIsByCreator, userGUID, encryptionKey) } // ListByAPIEndpoint - Returns a a list of CNSIs with the same APIEndpoint -func (p *PostgresCNSIRepository) ListByAPIEndpoint(endpoint string, encryptionKey []byte) ([]*interfaces.CNSIRecord, error) { +func (p *PostgresCNSIRepository) ListByAPIEndpoint(endpoint string, encryptionKey []byte) ([]*api.CNSIRecord, error) { log.Debug("listByAPIEndpoint") return p.listBy(findCNSIByAPIEndpoint, endpoint, encryptionKey) } // listBy - Returns a list of CNSI Records found using the given query looking for match -func (p *PostgresCNSIRepository) listBy(query string, match string, encryptionKey []byte) ([]*interfaces.CNSIRecord, error) { +func (p *PostgresCNSIRepository) listBy(query string, match string, encryptionKey []byte) ([]*api.CNSIRecord, error) { rows, err := p.db.Query(query, match) if err != nil { return nil, fmt.Errorf("Unable to retrieve CNSI records: %v", err) } defer rows.Close() - var cnsiList []*interfaces.CNSIRecord - cnsiList = make([]*interfaces.CNSIRecord, 0) + var cnsiList []*api.CNSIRecord + cnsiList = make([]*api.CNSIRecord, 0) for rows.Next() { var ( @@ -218,7 +218,7 @@ func (p *PostgresCNSIRepository) listBy(query string, match string, encryptionKe metadata sql.NullString ) - cnsi := new(interfaces.CNSIRecord) + cnsi := new(api.CNSIRecord) err := rows.Scan(&cnsi.GUID, &cnsi.Name, &pCNSIType, &pURL, &cnsi.AuthorizationEndpoint, &cnsi.TokenEndpoint, &cnsi.DopplerLoggingEndpoint, &cnsi.SkipSSLValidation, &cnsi.ClientId, &cipherTextClientSecret, &cnsi.SSOAllowed, &subType, &metadata, &cnsi.Creator) if err != nil { @@ -261,19 +261,19 @@ func (p *PostgresCNSIRepository) listBy(query string, match string, encryptionKe } // Find - Returns a single CNSI Record -func (p *PostgresCNSIRepository) Find(guid string, encryptionKey []byte) (interfaces.CNSIRecord, error) { +func (p *PostgresCNSIRepository) Find(guid string, encryptionKey []byte) (api.CNSIRecord, error) { log.Debug("Find") return p.findBy(findCNSI, guid, encryptionKey) } // FindByAPIEndpoint - Returns a single CNSI Record -func (p *PostgresCNSIRepository) FindByAPIEndpoint(endpoint string, encryptionKey []byte) (interfaces.CNSIRecord, error) { +func (p *PostgresCNSIRepository) FindByAPIEndpoint(endpoint string, encryptionKey []byte) (api.CNSIRecord, error) { log.Debug("FindByAPIEndpoint") return p.findBy(findCNSIByAPIEndpoint, endpoint, encryptionKey) } // FindBy - Returns a single CNSI Record found using the given query looking for match -func (p *PostgresCNSIRepository) findBy(query, match string, encryptionKey []byte) (interfaces.CNSIRecord, error) { +func (p *PostgresCNSIRepository) findBy(query, match string, encryptionKey []byte) (api.CNSIRecord, error) { var ( pCNSIType string pURL string @@ -282,16 +282,16 @@ func (p *PostgresCNSIRepository) findBy(query, match string, encryptionKey []byt metadata sql.NullString ) - cnsi := new(interfaces.CNSIRecord) + cnsi := new(api.CNSIRecord) err := p.db.QueryRow(query, match).Scan(&cnsi.GUID, &cnsi.Name, &pCNSIType, &pURL, &cnsi.AuthorizationEndpoint, &cnsi.TokenEndpoint, &cnsi.DopplerLoggingEndpoint, &cnsi.SkipSSLValidation, &cnsi.ClientId, &cipherTextClientSecret, &cnsi.SSOAllowed, &subType, &metadata, &cnsi.Creator) switch { case err == sql.ErrNoRows: - return interfaces.CNSIRecord{}, errors.New("No match for that Endpoint") + return api.CNSIRecord{}, errors.New("No match for that Endpoint") case err != nil: - return interfaces.CNSIRecord{}, fmt.Errorf("Error trying to Find CNSI record: %v", err) + return api.CNSIRecord{}, fmt.Errorf("Error trying to Find CNSI record: %v", err) default: // do nothing } @@ -307,13 +307,13 @@ func (p *PostgresCNSIRepository) findBy(query, match string, encryptionKey []byt cnsi.CNSIType = pCNSIType if cnsi.APIEndpoint, err = url.Parse(pURL); err != nil { - return interfaces.CNSIRecord{}, fmt.Errorf("Unable to parse API Endpoint: %v", err) + return api.CNSIRecord{}, fmt.Errorf("Unable to parse API Endpoint: %v", err) } if len(cipherTextClientSecret) > 0 { plaintextClientSecret, err := crypto.DecryptToken(encryptionKey, cipherTextClientSecret) if err != nil { - return interfaces.CNSIRecord{}, err + return api.CNSIRecord{}, err } cnsi.ClientSecret = plaintextClientSecret } else { @@ -325,7 +325,7 @@ func (p *PostgresCNSIRepository) findBy(query, match string, encryptionKey []byt } // Save will persist a CNSI Record to a datastore -func (p *PostgresCNSIRepository) Save(guid string, cnsi interfaces.CNSIRecord, encryptionKey []byte) error { +func (p *PostgresCNSIRepository) Save(guid string, cnsi api.CNSIRecord, encryptionKey []byte) error { log.Debug("Save") cipherTextClientSecret, err := crypto.EncryptToken(encryptionKey, cnsi.ClientSecret) if err != nil { @@ -351,7 +351,7 @@ func (p *PostgresCNSIRepository) Delete(guid string) error { } // Update - Update an endpoint's data -func (p *PostgresCNSIRepository) Update(endpoint interfaces.CNSIRecord, encryptionKey []byte) error { +func (p *PostgresCNSIRepository) Update(endpoint api.CNSIRecord, encryptionKey []byte) error { log.Debug("Update endpoint") if endpoint.GUID == "" { @@ -431,7 +431,7 @@ func (p *PostgresCNSIRepository) UpdateMetadata(guid string, metadata string) er } // SaveOrUpdate - Creates or Updates CNSI Record -func (p *PostgresCNSIRepository) SaveOrUpdate(endpoint interfaces.CNSIRecord, encryptionKey []byte) error { +func (p *PostgresCNSIRepository) SaveOrUpdate(endpoint api.CNSIRecord, encryptionKey []byte) error { log.Debug("Overwrite CNSI") // Is there an existing token? diff --git a/src/jetstream/repository/cnsis/pgsql_cnsis_test.go b/src/jetstream/repository/cnsis/pgsql_cnsis_test.go index 68ed59ba86..008958ac28 100644 --- a/src/jetstream/repository/cnsis/pgsql_cnsis_test.go +++ b/src/jetstream/repository/cnsis/pgsql_cnsis_test.go @@ -10,7 +10,7 @@ import ( "gopkg.in/DATA-DOG/go-sqlmock.v1" "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" . "github.com/smartystreets/goconvey/convey" ) @@ -54,11 +54,11 @@ func TestPgSQLCNSIs(t *testing.T) { Convey("Given a request for a list of CNSIs", t, func() { var ( - expectedList []*interfaces.CNSIRecord + expectedList []*api.CNSIRecord ) // general setup - expectedList = make([]*interfaces.CNSIRecord, 0) + expectedList = make([]*api.CNSIRecord, 0) // sqlmock setup db, mock, err := sqlmock.New() @@ -106,13 +106,13 @@ func TestPgSQLCNSIs(t *testing.T) { Convey("if two records exist in the database", func() { var ( - mockCFAndCERows sqlmock.Rows + mockCFAndCERows *sqlmock.Rows ) // general setup u, _ := url.Parse(mockAPIEndpoint) - r1 := &interfaces.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: ""} - r2 := &interfaces.CNSIRecord{GUID: mockCEGUID, Name: "Some fancy HCE Cluster", CNSIType: "hce", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: "", SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: ""} + r1 := &api.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: ""} + r2 := &api.CNSIRecord{GUID: mockCEGUID, Name: "Some fancy HCE Cluster", CNSIType: "hce", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: "", SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: ""} expectedList = append(expectedList, r1, r2) mockCFAndCERows = sqlmock.NewRows(rowFieldsForCNSI). @@ -183,11 +183,11 @@ func TestPgSQLCNSIs(t *testing.T) { //SELECT c.guid, c.name, c.cnsi_type, c.api_endpoint, c.doppler_logging_endpoint, t.user_guid, t.token_expiry, c.skip_ssl_validation, t.disconnected, t.meta_data //rowFieldsForCluster = []string{"guid", "name", "cnsi_type", "api_endpoint", "account", "token_expiry", "skip_ssl_validation"} rowFieldsForCluster = []string{"guid", "name", "cnsi_type", "api_endpoint", "doppler_logging_endpoint", "account", "token_expiry", "skip_ssl_validation", "disconnected", "meta_data", "sub_type", "endpoint_metadata", "creator"} - expectedList []*interfaces.ConnectedEndpoint + expectedList []*api.ConnectedEndpoint mockAccount = "asd-gjfg-bob" ) - expectedList = make([]*interfaces.ConnectedEndpoint, 0) + expectedList = make([]*api.ConnectedEndpoint, 0) db, mock, err := sqlmock.New() if err != nil { @@ -234,13 +234,13 @@ func TestPgSQLCNSIs(t *testing.T) { var ( mockTokenExpiry = time.Now().AddDate(0, 0, 1).Unix() - mockClusterList sqlmock.Rows + mockClusterList *sqlmock.Rows ) // general setup u, _ := url.Parse(mockAPIEndpoint) - r1 := &interfaces.ConnectedEndpoint{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, DopplerLoggingEndpoint: mockDopplerEndpoint, Account: mockAccount, TokenExpiry: mockTokenExpiry, SkipSSLValidation: true, Creator: ""} - r2 := &interfaces.ConnectedEndpoint{GUID: mockCEGUID, Name: "Some fancy HCE Cluster", CNSIType: "hce", APIEndpoint: u, DopplerLoggingEndpoint: mockDopplerEndpoint, Account: mockAccount, TokenExpiry: mockTokenExpiry, SkipSSLValidation: true, Creator: ""} + r1 := &api.ConnectedEndpoint{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, DopplerLoggingEndpoint: mockDopplerEndpoint, Account: mockAccount, TokenExpiry: mockTokenExpiry, SkipSSLValidation: true, Creator: ""} + r2 := &api.ConnectedEndpoint{GUID: mockCEGUID, Name: "Some fancy HCE Cluster", CNSIType: "hce", APIEndpoint: u, DopplerLoggingEndpoint: mockDopplerEndpoint, Account: mockAccount, TokenExpiry: mockTokenExpiry, SkipSSLValidation: true, Creator: ""} expectedList = append(expectedList, r1, r2) mockClusterList = sqlmock.NewRows(rowFieldsForCluster). @@ -309,12 +309,12 @@ func TestPgSQLCNSIs(t *testing.T) { var ( rowFieldsForCluster = []string{"guid", "name", "cnsi_type", "api_endpoint", "doppler_logging_endpoint", "account", "token_expiry", "skip_ssl_validation", "disconnected", "meta_data", "sub_type", "endpoint_metadata", "creator"} - expectedList []*interfaces.CNSIRecord + expectedList []*api.CNSIRecord mockAccount = "asd-gjfg-bob" ) // general setup - expectedList = make([]*interfaces.CNSIRecord, 0) + expectedList = make([]*api.CNSIRecord, 0) db, mock, err := sqlmock.New() if err != nil { @@ -359,13 +359,13 @@ func TestPgSQLCNSIs(t *testing.T) { Convey("if 2 records exist in the database", func() { var ( - mockClusterList sqlmock.Rows + mockClusterList *sqlmock.Rows ) // general setup u, _ := url.Parse(mockAPIEndpoint) - r1 := &interfaces.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: mockAccount} - r2 := &interfaces.CNSIRecord{GUID: mockCEGUID, Name: "Some fancy HCE Cluster", CNSIType: "hce", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: "", SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: mockAccount} + r1 := &api.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: mockAccount} + r2 := &api.CNSIRecord{GUID: mockCEGUID, Name: "Some fancy HCE Cluster", CNSIType: "hce", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: "", SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: mockAccount} expectedList = append(expectedList, r1, r2) mockClusterList = sqlmock.NewRows(rowFieldsForCNSI). @@ -434,11 +434,11 @@ func TestPgSQLCNSIs(t *testing.T) { var ( rowFieldsForCluster = []string{"guid", "name", "cnsi_type", "api_endpoint", "doppler_logging_endpoint", "account", "token_expiry", "skip_ssl_validation", "disconnected", "meta_data", "sub_type", "endpoint_metadata", "creator"} - expectedList []*interfaces.CNSIRecord + expectedList []*api.CNSIRecord ) // general setup - expectedList = make([]*interfaces.CNSIRecord, 0) + expectedList = make([]*api.CNSIRecord, 0) db, mock, err := sqlmock.New() if err != nil { @@ -483,13 +483,13 @@ func TestPgSQLCNSIs(t *testing.T) { Convey("if 2 records exist in the database", func() { var ( - mockClusterList sqlmock.Rows + mockClusterList *sqlmock.Rows ) // general setup u, _ := url.Parse(mockAPIEndpoint) - r1 := &interfaces.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: ""} - r2 := &interfaces.CNSIRecord{GUID: mockCEGUID, Name: "Some fancy HCE Cluster", CNSIType: "hce", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: "", SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: ""} + r1 := &api.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: ""} + r2 := &api.CNSIRecord{GUID: mockCEGUID, Name: "Some fancy HCE Cluster", CNSIType: "hce", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: "", SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: ""} expectedList = append(expectedList, r1, r2) mockClusterList = sqlmock.NewRows(rowFieldsForCNSI). @@ -566,7 +566,7 @@ func TestPgSQLCNSIs(t *testing.T) { // General setup u, _ := url.Parse(mockAPIEndpoint) - expectedCNSIRecord := interfaces.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: ""} + expectedCNSIRecord := api.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: false, Creator: ""} rs := sqlmock.NewRows(rowFieldsForCNSI). AddRow(mockCFGUID, "Some fancy CF Cluster", "cf", mockAPIEndpoint, mockAuthEndpoint, mockAuthEndpoint, mockDopplerEndpoint, true, mockClientId, cipherClientSecret, false, "", "", "") @@ -596,7 +596,7 @@ func TestPgSQLCNSIs(t *testing.T) { Convey("if the specified CNSI isn't in the database", func() { // General setup - expectedCNSIRecord := interfaces.CNSIRecord{} + expectedCNSIRecord := api.CNSIRecord{} rs := sqlmock.NewRows(rowFieldsForCNSI) mock.ExpectQuery(selectFromCNSIsWhere). @@ -625,7 +625,7 @@ func TestPgSQLCNSIs(t *testing.T) { Convey("if the Find() method throws an error", func() { // General setup - expectedCNSIRecord := interfaces.CNSIRecord{} + expectedCNSIRecord := api.CNSIRecord{} expectedErrorMessage := fmt.Sprintf("Error trying to Find CNSI record: %s", unknownDBError) mock.ExpectQuery(selectFromCNSIsWhere). @@ -663,7 +663,7 @@ func TestPgSQLCNSIs(t *testing.T) { // General setup u, _ := url.Parse(mockAPIEndpoint) - expectedCNSIRecord := interfaces.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: true, Creator: ""} + expectedCNSIRecord := api.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: true, Creator: ""} rs := sqlmock.NewRows(rowFieldsForCNSI). AddRow(mockCFGUID, "Some fancy CF Cluster", "cf", mockAPIEndpoint, mockAuthEndpoint, mockAuthEndpoint, mockDopplerEndpoint, true, mockClientId, cipherClientSecret, true, "", "", "") @@ -694,7 +694,7 @@ func TestPgSQLCNSIs(t *testing.T) { Convey("if the specified endpoint isn't in the database", func() { // General setup - expectedCNSIRecord := interfaces.CNSIRecord{} + expectedCNSIRecord := api.CNSIRecord{} rs := sqlmock.NewRows(rowFieldsForCNSI) mock.ExpectQuery(selectFromCNSIsWhere). @@ -723,7 +723,7 @@ func TestPgSQLCNSIs(t *testing.T) { Convey("if the find by endpoint method throws an error", func() { // General setup - expectedCNSIRecord := interfaces.CNSIRecord{} + expectedCNSIRecord := api.CNSIRecord{} expectedErrorMessage := fmt.Sprintf("Error trying to Find CNSI record: %s", unknownDBError) mock.ExpectQuery(selectFromCNSIsWhere). @@ -761,7 +761,7 @@ func TestPgSQLCNSIs(t *testing.T) { // General setup u, _ := url.Parse(mockAPIEndpoint) - cnsi := interfaces.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: true, Creator: ""} + cnsi := api.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: true, Creator: ""} mock.ExpectExec(insertIntoCNSIs). WithArgs(mockCFGUID, "Some fancy CF Cluster", "cf", mockAPIEndpoint, mockAuthEndpoint, mockAuthEndpoint, mockDopplerEndpoint, true, mockClientId, sqlmock.AnyArg(), true, sqlmock.AnyArg(), sqlmock.AnyArg(), ""). @@ -781,7 +781,7 @@ func TestPgSQLCNSIs(t *testing.T) { // General setup u, _ := url.Parse(mockAPIEndpoint) - cnsi := interfaces.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: true, Creator: ""} + cnsi := api.CNSIRecord{GUID: mockCFGUID, Name: "Some fancy CF Cluster", CNSIType: "cf", APIEndpoint: u, AuthorizationEndpoint: mockAuthEndpoint, TokenEndpoint: mockAuthEndpoint, DopplerLoggingEndpoint: mockDopplerEndpoint, SkipSSLValidation: true, ClientId: mockClientId, ClientSecret: mockClientSecret, SSOAllowed: true, Creator: ""} expectedErrorMessage := fmt.Sprintf("Unable to Save CNSI record: %s", unknownDBError) mock.ExpectExec(insertIntoCNSIs). diff --git a/src/jetstream/repository/console_config/console_config.go b/src/jetstream/repository/console_config/console_config.go index 891d23f0c6..ab422c42fe 100644 --- a/src/jetstream/repository/console_config/console_config.go +++ b/src/jetstream/repository/console_config/console_config.go @@ -1,11 +1,11 @@ package console_config import ( - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) type Repository interface { - GetConsoleConfig() (*interfaces.ConsoleConfig, error) + GetConsoleConfig() (*api.ConsoleConfig, error) DeleteConsoleConfig() error // Access to the config data diff --git a/src/jetstream/repository/console_config/env_lookup.go b/src/jetstream/repository/console_config/env_lookup.go index f22e3b347e..37b1198292 100644 --- a/src/jetstream/repository/console_config/env_lookup.go +++ b/src/jetstream/repository/console_config/env_lookup.go @@ -6,7 +6,7 @@ import ( "github.com/govau/cf-common/env" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) const ( @@ -43,7 +43,7 @@ func InitializeConfEnvProvider(configStore Repository) error { } // MigrateSetupData will migrate the old data if needed -func MigrateSetupData(portal interfaces.PortalProxy, configStore Repository) error { +func MigrateSetupData(portal api.PortalProxy, configStore Repository) error { // Determine if we need to migrate data first _, ok, err := configStore.GetValue(systemGroupName, configSetupNeededMarker) diff --git a/src/jetstream/repository/console_config/psql_console_config.go b/src/jetstream/repository/console_config/psql_console_config.go index 4a5f6dd198..ff6dbd7a50 100644 --- a/src/jetstream/repository/console_config/psql_console_config.go +++ b/src/jetstream/repository/console_config/psql_console_config.go @@ -9,7 +9,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // Legacy @@ -146,7 +146,7 @@ func (c *ConsoleConfigRepository) GetValues(group string) (map[string]string, er return values, nil } -func (c *ConsoleConfigRepository) GetConsoleConfig() (*interfaces.ConsoleConfig, error) { +func (c *ConsoleConfigRepository) GetConsoleConfig() (*api.ConsoleConfig, error) { log.Debug("Get ConsoleConfig") rows, err := c.db.Query(getConsoleConfig) if err != nil { @@ -156,7 +156,7 @@ func (c *ConsoleConfigRepository) GetConsoleConfig() (*interfaces.ConsoleConfig, rowCount := 0 - var consoleConfig *interfaces.ConsoleConfig + var consoleConfig *api.ConsoleConfig for rows.Next() { var ( uaaEndpoint string @@ -168,7 +168,7 @@ func (c *ConsoleConfigRepository) GetConsoleConfig() (*interfaces.ConsoleConfig, return nil, errors.New("Multiple configuration data detected") } - consoleConfig = new(interfaces.ConsoleConfig) + consoleConfig = new(api.ConsoleConfig) err := rows.Scan(&authEndpointType, &uaaEndpoint, &authEndpoint, &consoleConfig.ConsoleAdminScope, &consoleConfig.ConsoleClient, &consoleConfig.ConsoleClientSecret, &consoleConfig.SkipSSLValidation, &consoleConfig.UseSSO) if err != nil { diff --git a/src/jetstream/repository/goose-db-version/goose-db-version.go b/src/jetstream/repository/goose-db-version/goose-db-version.go index 637c354120..d94b86c61c 100644 --- a/src/jetstream/repository/goose-db-version/goose-db-version.go +++ b/src/jetstream/repository/goose-db-version/goose-db-version.go @@ -1,11 +1,11 @@ package goosedbversion import ( - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // Repository - the repository required to talk to this table of data type Repository interface { - GetCurrentVersion() (interfaces.GooseDBVersionRecord, error) - List() ([]*interfaces.GooseDBVersionRecord, error) + GetCurrentVersion() (api.GooseDBVersionRecord, error) + List() ([]*api.GooseDBVersionRecord, error) } diff --git a/src/jetstream/repository/goose-db-version/pgsql_goose_db_version.go b/src/jetstream/repository/goose-db-version/pgsql_goose_db_version.go index 479369b038..7a340a5b17 100644 --- a/src/jetstream/repository/goose-db-version/pgsql_goose_db_version.go +++ b/src/jetstream/repository/goose-db-version/pgsql_goose_db_version.go @@ -4,10 +4,12 @@ import ( "database/sql" "errors" "fmt" + "strings" log "github.com/sirupsen/logrus" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_errors" ) const ( @@ -28,27 +30,27 @@ func NewPostgresGooseDBVersionRepository(dcp *sql.DB) (Repository, error) { } // GetCurrentVersion - Returns the latest GooseDBVersionRecord -func (p *PostgresGooseDBVersionRepository) GetCurrentVersion() (interfaces.GooseDBVersionRecord, error) { +func (p *PostgresGooseDBVersionRepository) GetCurrentVersion() (api.GooseDBVersionRecord, error) { log.Debug("GetCurrentVersion") - dbVersion := new(interfaces.GooseDBVersionRecord) + dbVersion := new(api.GooseDBVersionRecord) err := p.db.QueryRow(getCurrentVersion).Scan(&dbVersion.VersionID) - switch { - case err == sql.ErrNoRows: - return interfaces.GooseDBVersionRecord{}, errors.New("No database versions found") - case err != nil: - return interfaces.GooseDBVersionRecord{}, fmt.Errorf("Error trying to get current database version: %v", err) - default: - // do nothing + if err != nil { + if errors.Is(err, sql.ErrNoRows) { + return api.GooseDBVersionRecord{}, custom_errors.ErrNoDatabaseVersionsFound + } else if strings.Contains(err.Error(), "no such table") { + return api.GooseDBVersionRecord{}, custom_errors.ErrNoSuchTable + } else { + return api.GooseDBVersionRecord{}, custom_errors.ErrGettingCurrentVersion(err) + } } - return *dbVersion, nil } // List - Returns a list of all versions -func (p *PostgresGooseDBVersionRepository) List() ([]*interfaces.GooseDBVersionRecord, error) { +func (p *PostgresGooseDBVersionRepository) List() ([]*api.GooseDBVersionRecord, error) { log.Debug("List") rows, err := p.db.Query(listVersions) if err != nil { @@ -56,11 +58,11 @@ func (p *PostgresGooseDBVersionRepository) List() ([]*interfaces.GooseDBVersionR } defer rows.Close() - var versionList []*interfaces.GooseDBVersionRecord - versionList = make([]*interfaces.GooseDBVersionRecord, 0) + var versionList []*api.GooseDBVersionRecord + versionList = make([]*api.GooseDBVersionRecord, 0) for rows.Next() { - version := new(interfaces.GooseDBVersionRecord) + version := new(api.GooseDBVersionRecord) err := rows.Scan(&version.ID, &version.VersionID, &version.IsApplied, &version.Timestamp) if err != nil { return nil, fmt.Errorf("Unable to scan Goose Version records: %v", err) diff --git a/src/jetstream/repository/goose-db-version/pgsql_goose_db_version_test.go b/src/jetstream/repository/goose-db-version/pgsql_goose_db_version_test.go index 9e3218c3df..de588f3830 100644 --- a/src/jetstream/repository/goose-db-version/pgsql_goose_db_version_test.go +++ b/src/jetstream/repository/goose-db-version/pgsql_goose_db_version_test.go @@ -2,14 +2,14 @@ package goosedbversion import ( "errors" - "fmt" "testing" "gopkg.in/DATA-DOG/go-sqlmock.v1" . "github.com/smartystreets/goconvey/convey" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/custom_errors" ) func TestPgSQLGooseDB(t *testing.T) { @@ -44,7 +44,7 @@ func TestPgSQLGooseDB(t *testing.T) { defer db.Close() // General setup - expectedVersionRecord := interfaces.GooseDBVersionRecord{VersionID: mockVersionID} + expectedVersionRecord := api.GooseDBVersionRecord{VersionID: mockVersionID} Convey("if one exists", func() { @@ -63,9 +63,6 @@ func TestPgSQLGooseDB(t *testing.T) { }) Convey("if one doesn't exist", func() { - - expectedErrorMessage := "No database versions found" - // Database setup rs := sqlmock.NewRows(rowFieldsForVersionID) mock.ExpectQuery(selectFromDBVersionWhere). @@ -74,7 +71,7 @@ func TestPgSQLGooseDB(t *testing.T) { Convey("there should be an error", func() { repository, _ := NewPostgresGooseDBVersionRepository(db) _, err := repository.GetCurrentVersion() - So(err, ShouldResemble, errors.New(expectedErrorMessage)) + So(err, ShouldResemble, custom_errors.ErrNoDatabaseVersionsFound) dberr := mock.ExpectationsWereMet() So(dberr, ShouldBeNil) @@ -82,9 +79,6 @@ func TestPgSQLGooseDB(t *testing.T) { }) Convey("if there is a problem talking to the database", func() { - - expectedErrorMessage := fmt.Sprintf("Error trying to get current database version: %s", "error") - // Database setup mock.ExpectQuery(selectFromDBVersionWhere). WillReturnError(errors.New("error")) @@ -92,7 +86,7 @@ func TestPgSQLGooseDB(t *testing.T) { Convey("there should be an error", func() { repository, _ := NewPostgresGooseDBVersionRepository(db) _, err := repository.GetCurrentVersion() - So(err, ShouldResemble, errors.New(expectedErrorMessage)) + So(err, ShouldResemble, custom_errors.ErrGettingCurrentVersion(errors.New("error"))) dberr := mock.ExpectationsWereMet() So(dberr, ShouldBeNil) diff --git a/src/jetstream/repository/localusers/localusers.go b/src/jetstream/repository/localusers/localusers.go index 27b93e8544..5a4a9458fc 100644 --- a/src/jetstream/repository/localusers/localusers.go +++ b/src/jetstream/repository/localusers/localusers.go @@ -3,17 +3,17 @@ package localusers import ( "time" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) // Repository is an application of the repository pattern for storing local users type Repository interface { - AddLocalUser(user interfaces.LocalUser) error - UpdateLocalUser(user interfaces.LocalUser) error + AddLocalUser(user api.LocalUser) error + UpdateLocalUser(user api.LocalUser) error FindPasswordHash(userGUID string) ([]byte, error) FindUserGUID(username string) (string, error) FindUserScope(userGUID string) (string, error) - FindUser(userGUID string) (interfaces.LocalUser, error) + FindUser(userGUID string) (api.LocalUser, error) UpdateLastLoginTime(userGUID string, loginTime time.Time) error FindLastLoginTime(userGUID string) (time.Time, error) } diff --git a/src/jetstream/repository/localusers/psql_localusers.go b/src/jetstream/repository/localusers/psql_localusers.go index 2e1bf8086b..4646616b0b 100644 --- a/src/jetstream/repository/localusers/psql_localusers.go +++ b/src/jetstream/repository/localusers/psql_localusers.go @@ -7,7 +7,7 @@ import ( "time" "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" log "github.com/sirupsen/logrus" ) @@ -99,10 +99,10 @@ func (p *PgsqlLocalUsersRepository) FindUserGUID(username string) (string, error } //FindUser finds and returns meatdata for the given user -func (p *PgsqlLocalUsersRepository) FindUser(userGUID string) (interfaces.LocalUser, error) { +func (p *PgsqlLocalUsersRepository) FindUser(userGUID string) (api.LocalUser, error) { log.Debug("FindUser") - var user interfaces.LocalUser + var user api.LocalUser user.UserGUID = userGUID if userGUID == "" { msg := "Unable to find user without a valid user GUID" @@ -226,7 +226,7 @@ func (p *PgsqlLocalUsersRepository) FindLastLoginTime(userGUID string) (time.Tim // AddLocalUser - Add a new local user to the datastore. // Email is optional -func (p *PgsqlLocalUsersRepository) AddLocalUser(user interfaces.LocalUser) error { +func (p *PgsqlLocalUsersRepository) AddLocalUser(user api.LocalUser) error { log.Debug("AddLocalUser") @@ -276,7 +276,7 @@ func (p *PgsqlLocalUsersRepository) AddLocalUser(user interfaces.LocalUser) erro return err } -func (p *PgsqlLocalUsersRepository) UpdateLocalUser(user interfaces.LocalUser) error { +func (p *PgsqlLocalUsersRepository) UpdateLocalUser(user api.LocalUser) error { log.Debug("UpdateLocalUser") //Validate args diff --git a/src/jetstream/repository/sessiondata/psql_sessiondata.go b/src/jetstream/repository/sessiondata/psql_sessiondata.go index c60ad32b63..c7b15a5be9 100644 --- a/src/jetstream/repository/sessiondata/psql_sessiondata.go +++ b/src/jetstream/repository/sessiondata/psql_sessiondata.go @@ -9,7 +9,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" ) var getSessionDataValues = `SELECT name, value FROM session_data WHERE expired=false AND session=$1 AND groupName = $1` @@ -33,7 +33,7 @@ type SessionDataRepository struct { } // NewPostgresSessionDataRepository will create a new instance of the SessionDataRepository -func NewPostgresSessionDataRepository(dcp *sql.DB) (interfaces.SessionDataStore, error) { +func NewPostgresSessionDataRepository(dcp *sql.DB) (api.SessionDataStore, error) { return &SessionDataRepository{db: dcp}, nil } diff --git a/src/jetstream/repository/tokens/pgsql_tokens.go b/src/jetstream/repository/tokens/pgsql_tokens.go index 89128b7839..357ca64437 100644 --- a/src/jetstream/repository/tokens/pgsql_tokens.go +++ b/src/jetstream/repository/tokens/pgsql_tokens.go @@ -7,7 +7,7 @@ import ( "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" "github.com/cloudfoundry-incubator/stratos/src/jetstream/datastore" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" uuid "github.com/satori/go.uuid" log "github.com/sirupsen/logrus" ) @@ -75,7 +75,7 @@ type PgsqlTokenRepository struct { const SystemSharedUserGuid = "00000000-1111-2222-3333-444444444444" // NewPgsqlTokenRepository - get a reference to the token data source -func NewPgsqlTokenRepository(dcp *sql.DB) (interfaces.TokenRepository, error) { +func NewPgsqlTokenRepository(dcp *sql.DB) (api.TokenRepository, error) { log.Debug("NewPgsqlTokenRepository") return &PgsqlTokenRepository{db: dcp}, nil } @@ -99,7 +99,7 @@ func InitRepositoryProvider(databaseProvider string) { } // saveAuthToken - Save the Auth token to the datastore -func (p *PgsqlTokenRepository) SaveAuthToken(userGUID string, tr interfaces.TokenRecord, encryptionKey []byte) error { +func (p *PgsqlTokenRepository) SaveAuthToken(userGUID string, tr api.TokenRecord, encryptionKey []byte) error { log.Debug("SaveAuthToken") if userGUID == "" { msg := "Unable to save Auth Token without a valid User GUID." @@ -165,12 +165,12 @@ func (p *PgsqlTokenRepository) SaveAuthToken(userGUID string, tr interfaces.Toke } // FindAuthToken - return the UAA token from the datastore -func (p *PgsqlTokenRepository) FindAuthToken(userGUID string, encryptionKey []byte) (interfaces.TokenRecord, error) { +func (p *PgsqlTokenRepository) FindAuthToken(userGUID string, encryptionKey []byte) (api.TokenRecord, error) { log.Debug("FindAuthToken") if userGUID == "" { msg := "Unable to find UAA Token without a valid User GUID." log.Debug(msg) - return interfaces.TokenRecord{}, errors.New(msg) + return api.TokenRecord{}, errors.New(msg) } // temp vars to retrieve db data @@ -188,23 +188,23 @@ func (p *PgsqlTokenRepository) FindAuthToken(userGUID string, encryptionKey []by if err != nil { msg := "Unable to Find UAA token: %v" log.Debugf(msg, err) - return interfaces.TokenRecord{}, fmt.Errorf(msg, err) + return api.TokenRecord{}, fmt.Errorf(msg, err) } log.Debug("Decrypting Auth Token") plaintextAuthToken, err := crypto.DecryptToken(encryptionKey, ciphertextAuthToken) if err != nil { - return interfaces.TokenRecord{}, err + return api.TokenRecord{}, err } log.Debug("Decrypting Refresh Token") plaintextRefreshToken, err := crypto.DecryptToken(encryptionKey, ciphertextRefreshToken) if err != nil { - return interfaces.TokenRecord{}, err + return api.TokenRecord{}, err } // Build a new TokenRecord based on the decrypted tokens - tr := new(interfaces.TokenRecord) + tr := new(api.TokenRecord) if tokenGUID.Valid { tr.TokenGUID = tokenGUID.String } @@ -221,7 +221,7 @@ func (p *PgsqlTokenRepository) FindAuthToken(userGUID string, encryptionKey []by } // SaveCNSIToken - Save the CNSI (UAA) token to the datastore -func (p *PgsqlTokenRepository) SaveCNSIToken(cnsiGUID string, userGUID string, tr interfaces.TokenRecord, encryptionKey []byte) error { +func (p *PgsqlTokenRepository) SaveCNSIToken(cnsiGUID string, userGUID string, tr api.TokenRecord, encryptionKey []byte) error { log.Debug("SaveCNSIToken") if cnsiGUID == "" { msg := "Unable to save CNSI Token without a valid CNSI GUID." @@ -321,22 +321,22 @@ func (p *PgsqlTokenRepository) SaveCNSIToken(cnsiGUID string, userGUID string, t return nil } -func (p *PgsqlTokenRepository) FindCNSIToken(cnsiGUID string, userGUID string, encryptionKey []byte) (interfaces.TokenRecord, error) { +func (p *PgsqlTokenRepository) FindCNSIToken(cnsiGUID string, userGUID string, encryptionKey []byte) (api.TokenRecord, error) { log.Debug("FindCNSIToken") return p.findCNSIToken(cnsiGUID, userGUID, encryptionKey, false) } -func (p *PgsqlTokenRepository) FindCNSITokenIncludeDisconnected(cnsiGUID string, userGUID string, encryptionKey []byte) (interfaces.TokenRecord, error) { +func (p *PgsqlTokenRepository) FindCNSITokenIncludeDisconnected(cnsiGUID string, userGUID string, encryptionKey []byte) (api.TokenRecord, error) { log.Debug("FindCNSITokenIncludeDisconnected") return p.findCNSIToken(cnsiGUID, userGUID, encryptionKey, true) } -func (p *PgsqlTokenRepository) FindAllCNSITokenBackup(cnsiGUID string, encryptionKey []byte) ([]interfaces.BackupTokenRecord, error) { +func (p *PgsqlTokenRepository) FindAllCNSITokenBackup(cnsiGUID string, encryptionKey []byte) ([]api.BackupTokenRecord, error) { log.Debug("FindAllCNSITokenBackup") if cnsiGUID == "" { msg := "Unable to find CNSI Token without a valid CNSI GUID." log.Debug(msg) - return make([]interfaces.BackupTokenRecord, 0), errors.New(msg) + return make([]api.BackupTokenRecord, 0), errors.New(msg) } var rows *sql.Rows @@ -349,12 +349,12 @@ func (p *PgsqlTokenRepository) FindAllCNSITokenBackup(cnsiGUID string, encryptio } else { log.Errorf(msg, err) } - return make([]interfaces.BackupTokenRecord, 0), fmt.Errorf(msg, err) + return make([]api.BackupTokenRecord, 0), fmt.Errorf(msg, err) } defer rows.Close() - btrs := make([]interfaces.BackupTokenRecord, 0) + btrs := make([]api.BackupTokenRecord, 0) for rows.Next() { // temp vars to retrieve db data var ( @@ -377,17 +377,17 @@ func (p *PgsqlTokenRepository) FindAllCNSITokenBackup(cnsiGUID string, encryptio log.Debug("Decrypting Auth Token") plaintextAuthToken, err := crypto.DecryptToken(encryptionKey, ciphertextAuthToken) if err != nil { - return make([]interfaces.BackupTokenRecord, 0), err + return make([]api.BackupTokenRecord, 0), err } log.Debug("Decrypting Refresh Token") plaintextRefreshToken, err := crypto.DecryptToken(encryptionKey, ciphertextRefreshToken) if err != nil { - return make([]interfaces.BackupTokenRecord, 0), err + return make([]api.BackupTokenRecord, 0), err } // Build a new TokenRecord based on the decrypted tokens - tr := new(interfaces.TokenRecord) + tr := new(api.TokenRecord) if tokenGUID.Valid { tr.TokenGUID = tokenGUID.String } @@ -408,7 +408,7 @@ func (p *PgsqlTokenRepository) FindAllCNSITokenBackup(cnsiGUID string, encryptio tr.LinkedGUID = linkedTokenGUID.String } - btr := new(interfaces.BackupTokenRecord) + btr := new(api.BackupTokenRecord) btr.TokenRecord = *tr btr.EndpointGUID = cnsiGUID btr.TokenType = "cnsi" @@ -421,18 +421,18 @@ func (p *PgsqlTokenRepository) FindAllCNSITokenBackup(cnsiGUID string, encryptio return btrs, nil } -func (p *PgsqlTokenRepository) findCNSIToken(cnsiGUID string, userGUID string, encryptionKey []byte, includeDisconnected bool) (interfaces.TokenRecord, error) { +func (p *PgsqlTokenRepository) findCNSIToken(cnsiGUID string, userGUID string, encryptionKey []byte, includeDisconnected bool) (api.TokenRecord, error) { log.Debug("findCNSIToken") if cnsiGUID == "" { msg := "Unable to find CNSI Token without a valid CNSI GUID." log.Debug(msg) - return interfaces.TokenRecord{}, errors.New(msg) + return api.TokenRecord{}, errors.New(msg) } if userGUID == "" { msg := "Unable to find CNSI Token without a valid User GUID." log.Debug(msg) - return interfaces.TokenRecord{}, errors.New(msg) + return api.TokenRecord{}, errors.New(msg) } // temp vars to retrieve db data @@ -462,7 +462,7 @@ func (p *PgsqlTokenRepository) findCNSIToken(cnsiGUID string, userGUID string, e } else { log.Errorf(msg, err) } - return interfaces.TokenRecord{}, fmt.Errorf(msg, err) + return api.TokenRecord{}, fmt.Errorf(msg, err) } // If this token is linked - fetch that token and use it instead @@ -481,24 +481,24 @@ func (p *PgsqlTokenRepository) findCNSIToken(cnsiGUID string, userGUID string, e } else { log.Errorf(msg, err) } - return interfaces.TokenRecord{}, fmt.Errorf(msg, err) + return api.TokenRecord{}, fmt.Errorf(msg, err) } } log.Debug("Decrypting Auth Token") plaintextAuthToken, err := crypto.DecryptToken(encryptionKey, ciphertextAuthToken) if err != nil { - return interfaces.TokenRecord{}, err + return api.TokenRecord{}, err } log.Debug("Decrypting Refresh Token") plaintextRefreshToken, err := crypto.DecryptToken(encryptionKey, ciphertextRefreshToken) if err != nil { - return interfaces.TokenRecord{}, err + return api.TokenRecord{}, err } // Build a new TokenRecord based on the decrypted tokens - tr := new(interfaces.TokenRecord) + tr := new(api.TokenRecord) if tokenGUID.Valid { tr.TokenGUID = tokenGUID.String } @@ -566,7 +566,7 @@ func (p *PgsqlTokenRepository) DeleteCNSITokens(cnsiGUID string) error { } // UpdateTokenAuth - Update a token's auth data -func (p *PgsqlTokenRepository) UpdateTokenAuth(userGUID string, tr interfaces.TokenRecord, encryptionKey []byte) error { +func (p *PgsqlTokenRepository) UpdateTokenAuth(userGUID string, tr api.TokenRecord, encryptionKey []byte) error { log.Debug("UpdateTokenAuth") if userGUID == "" { diff --git a/src/jetstream/repository/tokens/pgsql_tokens_test.go b/src/jetstream/repository/tokens/pgsql_tokens_test.go index 2bced20672..5fae36bdb5 100644 --- a/src/jetstream/repository/tokens/pgsql_tokens_test.go +++ b/src/jetstream/repository/tokens/pgsql_tokens_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" . "github.com/smartystreets/goconvey/convey" "gopkg.in/DATA-DOG/go-sqlmock.v1" ) @@ -28,13 +28,13 @@ const ( var mockTokenExpiry = time.Now().AddDate(0, 0, 1).Unix() var mockEncryptionKey = make([]byte, 32) -var tokenRecord = interfaces.TokenRecord{ +var tokenRecord = api.TokenRecord{ AuthToken: mockUAAToken, RefreshToken: mockUAAToken, TokenExpiry: mockTokenExpiry, } -func initialiseRepo(t *testing.T) (*sql.DB, sqlmock.Sqlmock, interfaces.TokenRepository) { +func initialiseRepo(t *testing.T) (*sql.DB, sqlmock.Sqlmock, api.TokenRepository) { db, mock, err := sqlmock.New() if err != nil { t.Errorf("an error '%s' was not expected when opening a stub database connection", err) @@ -76,7 +76,7 @@ func TestSaveUAATokens(t *testing.T) { }) Reset(func() { - tokenRecord = interfaces.TokenRecord{ + tokenRecord = api.TokenRecord{ AuthToken: mockUAAToken, RefreshToken: mockUAAToken, TokenExpiry: mockTokenExpiry, @@ -184,7 +184,7 @@ func TestSaveCNSITokens(t *testing.T) { }) Reset(func() { - tokenRecord = interfaces.TokenRecord{ + tokenRecord = api.TokenRecord{ AuthToken: mockUAAToken, RefreshToken: mockUAAToken, TokenExpiry: mockTokenExpiry, diff --git a/src/jetstream/session.go b/src/jetstream/session.go index 48e1e8482a..b2feff4901 100644 --- a/src/jetstream/session.go +++ b/src/jetstream/session.go @@ -12,8 +12,8 @@ import ( "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" ) const ( @@ -45,9 +45,9 @@ type SessionValueNotFound struct { // SessionInfoEnvelope -- contains response status, data and/or errors type SessionInfoEnvelope struct { - Status string `json:"status"` - Error string `json:"error"` - Data *interfaces.Info `json:"data"` + Status string `json:"status"` + Error string `json:"error"` + Data *api.Info `json:"data"` } func (e *SessionValueNotFound) Error() string { @@ -209,7 +209,7 @@ func (p *portalProxy) handleSessionExpiryHeader(c echo.Context) error { c.Response().Header().Set(sessionExpiresOnHeader, strconv.FormatInt(expOn.(time.Time).Unix(), 10)) expiry := expOn.(time.Time) - expiryDuration := expiry.Sub(time.Now()) + expiryDuration := time.Until(expiry) // Subtract time now to get the duration add this to the time provided by the client clientDate := c.Request().Header.Get(clientRequestDateHeader) @@ -250,20 +250,20 @@ func (p *portalProxy) verifySession(c echo.Context) error { p.StratosAuthService.BeforeVerifySession(c) - collectErrors := func(p *portalProxy, c echo.Context) (*interfaces.Info, error) { + collectErrors := func(p *portalProxy, c echo.Context) (*api.Info, error) { sessionExpireTime, err := p.GetSessionInt64Value(c, "exp") if err != nil { - return nil, errors.New("Could not find session date") + return nil, errors.New("could not find session date") } sessionUser, err := p.GetSessionStringValue(c, "user_id") if err != nil { - return nil, errors.New("Could not find user_id in Session") + return nil, errors.New("could not find user_id in Session") } err = p.StratosAuthService.VerifySession(c, sessionUser, sessionExpireTime) if err != nil { - return nil, errors.New("Could not verify user") + return nil, errors.New("could not verify user") } // Still need to extend the expires_on of the Session (set session will save session, in save we update `expires_on`) diff --git a/src/jetstream/session_test.go b/src/jetstream/session_test.go index 27aaa9e86a..ca96f9950f 100644 --- a/src/jetstream/session_test.go +++ b/src/jetstream/session_test.go @@ -5,7 +5,7 @@ import ( "net/http" "testing" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/gorilla/sessions" "github.com/labstack/echo/v4" . "github.com/smartystreets/goconvey/convey" @@ -32,7 +32,7 @@ func (p *sessionTestPortalProxy) GetSession(c echo.Context) (*sessions.Session, } type testSessionStore struct { - interfaces.SessionStorer + api.SessionStorer } func (p *testSessionStore) Get(req *http.Request, name string) (*sessions.Session, error) { diff --git a/src/jetstream/setup_console.go b/src/jetstream/setup_console.go index 10965bf79b..fca48fad3f 100644 --- a/src/jetstream/setup_console.go +++ b/src/jetstream/setup_console.go @@ -1,23 +1,23 @@ package main import ( + "crypto/x509" "errors" "fmt" "net/http" "net/url" "regexp" "strconv" - "strings" "github.com/govau/cf-common/env" "github.com/labstack/echo/v4" uuid "github.com/satori/go.uuid" log "github.com/sirupsen/logrus" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api/config" "github.com/cloudfoundry-incubator/stratos/src/jetstream/crypto" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/console_config" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces/config" "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/localusers" ) @@ -31,8 +31,8 @@ const ( systemGroupName = "env" ) -func parseConsoleConfigFromForm(c echo.Context) (*interfaces.ConsoleConfig, error) { - consoleConfig := new(interfaces.ConsoleConfig) +func parseConsoleConfigFromForm(c echo.Context) (*api.ConsoleConfig, error) { + consoleConfig := new(api.ConsoleConfig) // Local admin user configuration? password := c.FormValue("local_admin_password") @@ -90,22 +90,23 @@ func (p *portalProxy) setupGetAvailableScopes(c echo.Context) error { authEndpoint := fmt.Sprintf("%s/oauth/token", consoleConfig.UAAEndpoint) uaaRes, err := p.getUAATokenWithCreds(consoleConfig.SkipSSLValidation, username, password, consoleConfig.ConsoleClient, consoleConfig.ConsoleClientSecret, authEndpoint) if err != nil { - errInfo, ok := err.(interfaces.ErrHTTPRequest) + errInfo, ok := err.(api.ErrHTTPRequest) if ok { if errInfo.Status == 0 { - if strings.Contains(errInfo.Error(), "x509: certificate") { - return interfaces.NewHTTPShadowError( + var certError *x509.CertificateInvalidError + if errors.As(err, certError) { + return api.NewHTTPShadowError( http.StatusBadRequest, "Could not connect to the UAA - Certificate error - check Skip SSL validation setting", "Could not connect to the UAA - Certificate error - check Skip SSL validation setting: %+v", err) } - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Could not connect to the UAA - check UAA Endpoint URL", "Could not connect to the UAA - check UAA Endpoint URL: %+v", err) } } - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Failed to authenticate with UAA - check Client ID, Secret and credentials", "Failed to authenticate with UAA due to %s", err) @@ -113,7 +114,7 @@ func (p *portalProxy) setupGetAvailableScopes(c echo.Context) error { userTokenInfo, err := p.GetUserTokenInfo(uaaRes.AccessToken) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusBadRequest, "Failed to authenticate with UAA - check Client ID, Secret and credentials", "Failed to authenticate with UAA due to %s", err) @@ -123,15 +124,15 @@ func (p *portalProxy) setupGetAvailableScopes(c echo.Context) error { return nil } -func saveConsoleConfig(consoleRepo console_config.Repository, consoleConfig *interfaces.ConsoleConfig) error { - if interfaces.AuthEndpointTypes[consoleConfig.AuthEndpointType] == interfaces.Local { +func saveConsoleConfig(consoleRepo console_config.Repository, consoleConfig *api.ConsoleConfig) error { + if api.AuthEndpointTypes[consoleConfig.AuthEndpointType] == api.Local { return saveLocalUserConsoleConfig(consoleRepo, consoleConfig) } return saveUAAConsoleConfig(consoleRepo, consoleConfig) } -func saveLocalUserConsoleConfig(consoleRepo console_config.Repository, consoleConfig *interfaces.ConsoleConfig) error { +func saveLocalUserConsoleConfig(consoleRepo console_config.Repository, consoleConfig *api.ConsoleConfig) error { log.Debug("saveLocalUserConsoleConfig") @@ -161,7 +162,7 @@ func saveLocalUserConsoleConfig(consoleRepo console_config.Repository, consoleCo return nil } -func saveUAAConsoleConfig(consoleRepo console_config.Repository, consoleConfig *interfaces.ConsoleConfig) error { +func saveUAAConsoleConfig(consoleRepo console_config.Repository, consoleConfig *api.ConsoleConfig) error { log.Debugf("Saving ConsoleConfig: %+v", consoleConfig) if err := consoleRepo.SetValue(systemGroupName, "UAA_ENDPOINT", consoleConfig.UAAEndpoint.String()); err != nil { @@ -217,18 +218,18 @@ func (p *portalProxy) setupSaveConfig(c echo.Context) error { err = saveConsoleConfig(consoleRepo, consoleConfig) if err != nil { - return interfaces.NewHTTPShadowError( + return api.NewHTTPShadowError( http.StatusInternalServerError, "Failed to store Console configuration data", "Console configuration data storage failed due to %s", err) } // If setting up with a local admin user, then log the user in - if interfaces.AuthEndpointTypes[consoleConfig.AuthEndpointType] == interfaces.Local { + if api.AuthEndpointTypes[consoleConfig.AuthEndpointType] == api.Local { consoleConfig.LocalUser = "admin" if consoleConfig.IsSetupComplete() { p.GetConfig().ConsoleConfig.AuthEndpointType = "local" - p.InitStratosAuthService(interfaces.Local) + p.InitStratosAuthService(api.Local) c.Request().Form.Add("username", "admin") c.Request().Form.Add("password", consoleConfig.LocalUserPassword) c.Request().RequestURI = "/pp/v1/login" @@ -241,31 +242,31 @@ func (p *portalProxy) setupSaveConfig(c echo.Context) error { return nil } -func (p *portalProxy) initialiseConsoleConfig(envLookup *env.VarSet) (*interfaces.ConsoleConfig, error) { +func (p *portalProxy) initialiseConsoleConfig(envLookup *env.VarSet) (*api.ConsoleConfig, error) { log.Debug("initialiseConsoleConfig") - consoleConfig := &interfaces.ConsoleConfig{} + consoleConfig := &api.ConsoleConfig{} if err := config.Load(consoleConfig, envLookup.Lookup); err != nil { - return consoleConfig, fmt.Errorf("Unable to load Console configuration. %v", err) + return consoleConfig, fmt.Errorf("unable to load Console configuration. %v", err) } if len(consoleConfig.AuthEndpointType) == 0 { //return consoleConfig, errors.New("AUTH_ENDPOINT_TYPE not found") //Until front-end support is implemented, default to "remote" if AUTH_ENDPOINT_TYPE is not set - consoleConfig.AuthEndpointType = string(interfaces.Remote) + consoleConfig.AuthEndpointType = string(api.Remote) } - val, endpointTypeSupported := interfaces.AuthEndpointTypes[consoleConfig.AuthEndpointType] + val, endpointTypeSupported := api.AuthEndpointTypes[consoleConfig.AuthEndpointType] if endpointTypeSupported { - if val == interfaces.AuthNone { + if val == api.AuthNone { return consoleConfig, nil - } else if val == interfaces.Local { + } else if val == api.Local { //Auth endpoint type is set to "local", so load the local user config err := initialiseLocalUsersConfiguration(consoleConfig, p) if err != nil { return consoleConfig, err } - } else if val == interfaces.Remote { + } else if val == api.Remote { // Auth endpoint type is set to "remote", so need to load local user config vars // Default authorization endpoint to be UAA endpoint if consoleConfig.AuthorizationEndpoint == nil { @@ -284,7 +285,7 @@ func (p *portalProxy) initialiseConsoleConfig(envLookup *env.VarSet) (*interface return consoleConfig, nil } -func initialiseLocalUsersConfiguration(consoleConfig *interfaces.ConsoleConfig, p *portalProxy) error { +func initialiseLocalUsersConfiguration(consoleConfig *api.ConsoleConfig, p *portalProxy) error { var err error localUserName, found := p.Env().Lookup("LOCAL_USER") @@ -310,7 +311,7 @@ func initialiseLocalUsersConfiguration(consoleConfig *interfaces.ConsoleConfig, return setupInitialiseLocalUsersConfiguration(consoleConfig, p) } -func setupInitialiseLocalUsersConfiguration(consoleConfig *interfaces.ConsoleConfig, p *portalProxy) error { +func setupInitialiseLocalUsersConfiguration(consoleConfig *api.ConsoleConfig, p *portalProxy) error { localUsersRepo, err := localusers.NewPgsqlLocalUsersRepository(p.DatabaseConnectionPool) if err != nil { @@ -327,7 +328,7 @@ func setupInitialiseLocalUsersConfiguration(consoleConfig *interfaces.ConsoleCon } scope := consoleConfig.LocalUserScope email := "" - user := interfaces.LocalUser{UserGUID: userGUID, PasswordHash: passwordHash, Username: consoleConfig.LocalUser, Email: email, Scope: scope, GivenName: "Admin", FamilyName: "User"} + user := api.LocalUser{UserGUID: userGUID, PasswordHash: passwordHash, Username: consoleConfig.LocalUser, Email: email, Scope: scope, GivenName: "Admin", FamilyName: "User"} // Don't add the user if they already exist _, err = localUsersRepo.FindUserGUID(consoleConfig.LocalUser) @@ -423,7 +424,7 @@ func checkSetupComplete(portalProxy *portalProxy) bool { portalProxy.Config.ConsoleConfig = consoleConfig portalProxy.Config.SSOLogin = consoleConfig.UseSSO portalProxy.Config.AuthEndpointType = consoleConfig.AuthEndpointType - portalProxy.InitStratosAuthService(interfaces.AuthEndpointTypes[consoleConfig.AuthEndpointType]) + portalProxy.InitStratosAuthService(api.AuthEndpointTypes[consoleConfig.AuthEndpointType]) } return consoleConfig.IsSetupComplete() diff --git a/src/jetstream/setup_console_test.go b/src/jetstream/setup_console_test.go index c383cf80cb..7605ed4389 100644 --- a/src/jetstream/setup_console_test.go +++ b/src/jetstream/setup_console_test.go @@ -14,7 +14,7 @@ func TestConsoleSetup(t *testing.T) { Convey("Check that we can migrate data from the old console_config table", t, func() { - db, _, err := datastore.GetInMemorySQLLiteConnection() + db, err := datastore.GetInMemorySQLLiteConnection() if err != nil { t.Errorf("can not open sqlite database for testing: %v", err) } diff --git a/src/jetstream/version_info.go b/src/jetstream/version_info.go index 2dfce74c0c..dbfe31b43a 100644 --- a/src/jetstream/version_info.go +++ b/src/jetstream/version_info.go @@ -5,12 +5,12 @@ import ( "net/http" goosedbversion "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/goose-db-version" - "github.com/cloudfoundry-incubator/stratos/src/jetstream/repository/interfaces" + "github.com/cloudfoundry-incubator/stratos/src/jetstream/api" "github.com/labstack/echo/v4" log "github.com/sirupsen/logrus" ) -func (p *portalProxy) getVersionsData() (*interfaces.Versions, error) { +func (p *portalProxy) getVersionsData() (*api.Versions, error) { proxyVersion := p.Config.ConsoleVersion if proxyVersion == "" { proxyVersion = "dev" @@ -19,12 +19,12 @@ func (p *portalProxy) getVersionsData() (*interfaces.Versions, error) { dbVersionRepo, _ := goosedbversion.NewPostgresGooseDBVersionRepository(p.DatabaseConnectionPool) databaseVersionRec, err := dbVersionRepo.GetCurrentVersion() if err != nil { - return &interfaces.Versions{}, errors.New("Error trying to get current database version") + return &api.Versions{}, errors.New("Error trying to get current database version") } databaseVersion := databaseVersionRec.VersionID - resp := &interfaces.Versions{ + resp := &api.Versions{ ProxyVersion: proxyVersion, DatabaseVersion: databaseVersion, } diff --git a/src/test-e2e/helpers/request-helpers.ts b/src/test-e2e/helpers/request-helpers.ts index 714eabb5dc..d8c7d954f5 100644 --- a/src/test-e2e/helpers/request-helpers.ts +++ b/src/test-e2e/helpers/request-helpers.ts @@ -1,7 +1,7 @@ import { existsSync, readFileSync } from 'fs'; import { join } from 'path'; import { browser, promise } from 'protractor'; -import request from 'request-promise-native'; +import request from '@cypress/request'; import { E2E, e2e } from '../e2e'; import { ConsoleUserType } from './e2e-helpers'; diff --git a/src/test-e2e/helpers/uaa-request-helpers.ts b/src/test-e2e/helpers/uaa-request-helpers.ts index 8bd80a429d..bd8a123d08 100644 --- a/src/test-e2e/helpers/uaa-request-helpers.ts +++ b/src/test-e2e/helpers/uaa-request-helpers.ts @@ -1,5 +1,5 @@ import { promise } from 'protractor'; -import request from 'request-promise-native'; +import request from '@cypress/request'; import { e2e } from '../e2e'; import { E2EUaa } from '../e2e.types'; diff --git a/src/tsconfig.json b/src/tsconfig.json index a98e757ac3..f91f9f8608 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -33,7 +33,9 @@ "preserveSymlinks": true, "paths": { "@stratosui/core": ["frontend/packages/core/src/public-api.ts"], + "@stratosui/extension": ["frontend/packages/extension/src/public-api.ts"], "@stratosui/store": ["frontend/packages/store/src/public-api.ts"], + "@stratosui/shared": ["frontend/packages/shared/src/public-api.ts"], "@stratosui/store/testing": ["frontend/packages/store/testing/public-api.ts"], "@stratosui/cloud-foundry": ["frontend/packages/cloud-foundry/src/public_api.ts"], "@stratosui/cf-autoscaler": ["frontend/packages/cf-autoscaler/src/public_api.ts"], diff --git a/tsconfig.json b/tsconfig.json index 5ae45321ab..41492436c6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,6 +3,6 @@ "downlevelIteration": true, "module": "esnext", "rootDir": ".", - "target": "es2015" + "target": "es2020" } } diff --git a/website/docs/deploy/cloud-foundry/cloud-foundry.md b/website/docs/deploy/cloud-foundry/cloud-foundry.md index 4f76ddb15c..e2d5a94df7 100644 --- a/website/docs/deploy/cloud-foundry/cloud-foundry.md +++ b/website/docs/deploy/cloud-foundry/cloud-foundry.md @@ -134,7 +134,7 @@ Deploy Stratos using the [`splatform/stratos`](https://hub.docker.com/r/splatfor > **NOTE:** Your Cloud Foundry must have docker support [enabled](https://docs.cloudfoundry.org/adminguide/docker.html#enable). ``` -cf push console -o splatform/stratos:stable -m 128M -k 384M +cf push console -o splatform/stratos:stable -m 128M -k 512M ``` > Note: You can replace `console` in the command above with a name of your choice for the application @@ -148,7 +148,7 @@ Alternatively cf push using a manifest image: splatform/stratos:stable instances: 1 memory: 128M - disk_quota: 384M + disk_quota: 512M ``` - now, you can simply push it to Cloud Foundry: ```