diff --git a/.github/workflows/build-feature.yml b/.github/workflows/build-feature.yml
index 4575608d072..726a51b8532 100644
--- a/.github/workflows/build-feature.yml
+++ b/.github/workflows/build-feature.yml
@@ -25,7 +25,7 @@ jobs:
java-version: '8'
- name: Cache local Maven repository
- uses: actions/cache@v2.1.6
+ uses: actions/cache@v2.1.7
env:
cache-name: cache-mvn
with:
@@ -53,7 +53,6 @@ jobs:
mvn -B spring-javaformat:apply --no-transfer-progress
mvn -B verify -P coverage --no-transfer-progress -D maven.javadoc.skip=true
- - uses: codecov/codecov-action@v1
+ - uses: codecov/codecov-action@v2
with:
- file: ./**/target/site/jacoco/jacoco.xml
- name: codecov
+ files: "'*/jacoco.xml'"
diff --git a/.github/workflows/build-main.yml b/.github/workflows/build-main.yml
index 3d7d1fd0291..4f3c1209553 100644
--- a/.github/workflows/build-main.yml
+++ b/.github/workflows/build-main.yml
@@ -25,7 +25,7 @@ jobs:
java-version: '8'
- name: Cache local Maven repository
- uses: actions/cache@v2.1.6
+ uses: actions/cache@v2.1.7
env:
cache-name: cache-mvn
with:
@@ -53,10 +53,9 @@ jobs:
mvn -B spring-javaformat:apply --no-transfer-progress
mvn -B verify -P coverage --no-transfer-progress -D maven.javadoc.skip=true
- - uses: codecov/codecov-action@v1
+ - uses: codecov/codecov-action@v2
with:
- file: ./**/target/site/jacoco/jacoco.xml
- name: codecov
+ files: "'*/jacoco.xml'"
publish-snapshot:
needs: build
@@ -72,7 +71,7 @@ jobs:
java-version: '8'
- name: Cache local Maven repository
- uses: actions/cache@v2.1.6
+ uses: actions/cache@v2.1.7
env:
cache-name: cache-mvn
with:
@@ -108,7 +107,7 @@ jobs:
run: echo ${{ steps.project.outputs.version }}
- name: Deploy Asciidoc docs output to GitHub Pages
- uses: JamesIves/github-pages-deploy-action@4.1.5
+ uses: JamesIves/github-pages-deploy-action@4.1.8
with:
branch: gh-pages # The branch the action should deploy to.
folder: spring-boot-admin-docs/target/generated-docs # The folder the action should deploy.
diff --git a/.github/workflows/build-pullrequest.yml b/.github/workflows/build-pullrequest.yml
index 9b570bb35fa..318ca36378d 100644
--- a/.github/workflows/build-pullrequest.yml
+++ b/.github/workflows/build-pullrequest.yml
@@ -21,7 +21,7 @@ jobs:
java-version: '8'
- name: Cache local Maven repository
- uses: actions/cache@v2.1.6
+ uses: actions/cache@v2.1.7
env:
cache-name: cache-mvn
with:
@@ -49,7 +49,6 @@ jobs:
mvn -B spring-javaformat:apply --no-transfer-progress
mvn -B verify -P coverage --no-transfer-progress -D maven.javadoc.skip=true
- - uses: codecov/codecov-action@v1
+ - uses: codecov/codecov-action@v2
with:
- file: ./**/target/site/jacoco/jacoco.xml
- name: codecov
+ files: "'*/jacoco.xml'"
diff --git a/.github/workflows/release-to-maven-central.yml b/.github/workflows/release-to-maven-central.yml
index 05dbd8ec1fe..b11ca9ab81b 100644
--- a/.github/workflows/release-to-maven-central.yml
+++ b/.github/workflows/release-to-maven-central.yml
@@ -28,7 +28,7 @@ jobs:
gpg-passphrase: MAVEN_GPG_PASSPHRASE
- name: Cache local Maven repository
- uses: actions/cache@v2.1.6
+ uses: actions/cache@v2.1.7
env:
cache-name: cache-mvn
with:
@@ -60,7 +60,7 @@ jobs:
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
- name: Deploy Asciidoc docs output to GitHub Pages
- uses: JamesIves/github-pages-deploy-action@4.1.5
+ uses: JamesIves/github-pages-deploy-action@4.1.8
with:
branch: gh-pages # The branch the action should deploy to.
folder: spring-boot-admin-docs/target/generated-docs # The folder the action should deploy.
diff --git a/pom.xml b/pom.xml
index cc266a5e056..ac68d95eb43 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,8 +26,9 @@
Spring Boot Admin
https://github.com/codecentric/spring-boot-admin/
- 2.5.5-SNAPSHOT
+ 2.5.6-SNAPSHOT
1.8
+
${java.version}
${java.version}
@
@@ -36,14 +37,15 @@
2.5.6
- 2020.0.4
+ 2020.0.5
2.31.0
- 4.2.2
+ 4.2.4
3.0.2
- 4.1.0
+ 4.1.1
1.16.0
9.4.44.v20210927
+
3.2.0
3.8.1
@@ -60,7 +62,7 @@
3.2.0
3.2.1
3.3.2
- 1.6
+ 3.0.1
1.12.0
0.8.7
2.2.1
diff --git a/spring-boot-admin-build/pom.xml b/spring-boot-admin-build/pom.xml
index c6cda9ae6fb..29683798651 100644
--- a/spring-boot-admin-build/pom.xml
+++ b/spring-boot-admin-build/pom.xml
@@ -30,6 +30,38 @@
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.9
+
+
+ ch.qos.logback
+ logback-core
+ 1.2.9
+
+
+ org.apache.logging.log4j
+ log4j-to-slf4j
+ 2.16.0
+
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.16.0
+
+
+ org.thymeleaf
+ thymeleaf
+ 3.0.14.RELEASE
+
+
+ org.thymeleaf
+ thymeleaf-spring5
+ 3.0.14.RELEASE
+
+
org.springframework.boot
spring-boot-dependencies
diff --git a/spring-boot-admin-dependencies/pom.xml b/spring-boot-admin-dependencies/pom.xml
index 47df731dea8..5e8103df452 100644
--- a/spring-boot-admin-dependencies/pom.xml
+++ b/spring-boot-admin-dependencies/pom.xml
@@ -26,7 +26,7 @@
de.codecentric
spring-boot-admin
${revision}
- ..
+ ../pom.xml
diff --git a/spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/package-lock.json b/spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/package-lock.json
index 4d79ab2cb87..cfb1e112f8f 100644
--- a/spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/package-lock.json
+++ b/spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/package-lock.json
@@ -4,9 +4,10 @@
"requires": true,
"packages": {
"": {
+ "name": "spring-boot-admin-sample-custom-ui",
"dependencies": {
"babel-eslint": "10.1.0",
- "core-js": "3.17.3",
+ "core-js": "3.20.0",
"eslint-plugin-vue": "6.2.2"
},
"devDependencies": {
@@ -4674,9 +4675,9 @@
}
},
"node_modules/core-js": {
- "version": "3.17.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.17.3.tgz",
- "integrity": "sha512-lyvajs+wd8N1hXfzob1LdOCCHFU4bGMbqqmLn1Q4QlCpDqWPpGf+p0nj+LNrvDDG33j0hZXw2nsvvVpHysxyNw==",
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.0.tgz",
+ "integrity": "sha512-KjbKU7UEfg4YPpskMtMXPhUKn7m/1OdTHTVjy09ScR2LVaoUXe8Jh0UdvN2EKUR6iKTJph52SJP95mAB0MnVLQ==",
"hasInstallScript": true,
"funding": {
"type": "opencollective",
@@ -19053,9 +19054,9 @@
}
},
"core-js": {
- "version": "3.17.3",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.17.3.tgz",
- "integrity": "sha512-lyvajs+wd8N1hXfzob1LdOCCHFU4bGMbqqmLn1Q4QlCpDqWPpGf+p0nj+LNrvDDG33j0hZXw2nsvvVpHysxyNw=="
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.0.tgz",
+ "integrity": "sha512-KjbKU7UEfg4YPpskMtMXPhUKn7m/1OdTHTVjy09ScR2LVaoUXe8Jh0UdvN2EKUR6iKTJph52SJP95mAB0MnVLQ=="
},
"core-js-compat": {
"version": "3.17.3",
diff --git a/spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/package.json b/spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/package.json
index dab152a5482..e35f322c710 100644
--- a/spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/package.json
+++ b/spring-boot-admin-samples/spring-boot-admin-sample-custom-ui/package.json
@@ -8,7 +8,7 @@
},
"dependencies": {
"babel-eslint": "10.1.0",
- "core-js": "3.17.3",
+ "core-js": "3.20.0",
"eslint-plugin-vue": "6.2.2"
},
"devDependencies": {
diff --git a/spring-boot-admin-samples/spring-boot-admin-sample-eureka/src/main/docker/Dockerfile b/spring-boot-admin-samples/spring-boot-admin-sample-eureka/src/main/docker/Dockerfile
index 0a67ca55f26..fde36de487a 100644
--- a/spring-boot-admin-samples/spring-boot-admin-sample-eureka/src/main/docker/Dockerfile
+++ b/spring-boot-admin-samples/spring-boot-admin-sample-eureka/src/main/docker/Dockerfile
@@ -1,4 +1,4 @@
-FROM java:7
+FROM java:9
VOLUME /tmp
ADD target/spring-boot-admin-sample-eureka.jar /app.jar
RUN bash -c 'touch /app.jar'
diff --git a/spring-boot-admin-server-ui/.storybook/preview.js b/spring-boot-admin-server-ui/.storybook/preview.js
index 04de9c96924..60460106dd3 100644
--- a/spring-boot-admin-server-ui/.storybook/preview.js
+++ b/spring-boot-admin-server-ui/.storybook/preview.js
@@ -5,10 +5,17 @@ import Vue from "vue/dist/vue.js";
import components from "@/components";
import i18n from "@/i18n";
import VueI18n from "vue-i18n";
+import mappingsEndpoint from '@/mocks/instance/mappings';
+
+import { initialize, mswDecorator } from 'msw-storybook-addon';
+
+// Initialize MSW
+initialize();
Vue.use(VueI18n);
Vue.use(components);
+
export const parameters = {
actions: {argTypesRegex: "^on[A-Z].*"},
controls: {
@@ -17,6 +24,12 @@ export const parameters = {
date: /Date$/,
},
},
+ msw: {
+ handlers: {
+ auth: null,
+ others: [...mappingsEndpoint]
+ }
+ }
}
export const decorators = [
@@ -25,7 +38,8 @@ export const decorators = [
return Vue.extend({
i18n,
components: {wrapped},
- template: ``
+ template: `
+ `
})
- },
+ }, mswDecorator
]
diff --git a/spring-boot-admin-server-ui/package-lock.json b/spring-boot-admin-server-ui/package-lock.json
index 42b1b6714c7..499af52bffc 100644
--- a/spring-boot-admin-server-ui/package-lock.json
+++ b/spring-boot-admin-server-ui/package-lock.json
@@ -4,6 +4,7 @@
"requires": true,
"packages": {
"": {
+ "name": "spring-boot-admin-server-ui",
"dependencies": {
"@fortawesome/fontawesome-svg-core": "1.2.36",
"@fortawesome/free-brands-svg-icons": "5.15.4",
@@ -16,8 +17,8 @@
"bulma": "0.9.3",
"bulma-badge": "3.0.1",
"core-js": "3.17.3",
- "d3-array": "2.12.1",
- "d3-axis": "2.1.0",
+ "d3-array": "3.1.1",
+ "d3-axis": "3.0.0",
"d3-brush": "2.1.0",
"d3-scale": "3.3.0",
"d3-selection": "2.0.0",
@@ -31,7 +32,7 @@
"popper.js": "1.16.1",
"pretty-bytes": "5.6.0",
"resize-observer-polyfill": "1.5.1",
- "rxjs": "6.6.7",
+ "rxjs": "7.4.0",
"vue": "2.6.14",
"vue-clickaway2": "2.3.2",
"vue-i18n": "8.25.1",
@@ -62,7 +63,6 @@
"babel-loader": "8.2.2",
"babel-plugin-require-context-hook": "1.0.0",
"babel-plugin-transform-require-context": "0.1.1",
- "css-loader": "3.6.0",
"eslint": "6.8.0",
"eslint-plugin-vue": "6.2.2",
"html-loader": "1.3.2",
@@ -70,12 +70,13 @@
"jest-each": "26.6.2",
"jest-environment-jsdom-sixteen": "2.0.0",
"msw": "0.35.0",
+ "msw-storybook-addon": "1.5.0",
"node-sass": "6.0.1",
"sass-loader": "10.2.0",
"style-loader": "1.3.0",
"vue-loader": "15.9.8",
"vue-template-compiler": "2.6.14",
- "webpack-bundle-analyzer": "3.9.0"
+ "webpack-bundle-analyzer": "4.5.0"
},
"engines": {
"node": "~15",
@@ -3151,6 +3152,12 @@
"integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==",
"dev": true
},
+ "node_modules/@polka/url": {
+ "version": "1.0.0-next.21",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz",
+ "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==",
+ "dev": true
+ },
"node_modules/@popperjs/core": {
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.1.tgz",
@@ -5375,6 +5382,18 @@
"rxjs": "^6.4.0"
}
},
+ "node_modules/@types/inquirer/node_modules/rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
"node_modules/@types/is-function": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz",
@@ -8216,6 +8235,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/@vue/cli-service/node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
"node_modules/@vue/cli-service/node_modules/dir-glob": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
@@ -8261,6 +8286,15 @@
"webpack": "^4.0.0"
}
},
+ "node_modules/@vue/cli-service/node_modules/filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
"node_modules/@vue/cli-service/node_modules/fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
@@ -8655,6 +8689,42 @@
}
}
},
+ "node_modules/@vue/cli-service/node_modules/webpack-bundle-analyzer": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz",
+ "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1",
+ "bfj": "^6.1.1",
+ "chalk": "^2.4.1",
+ "commander": "^2.18.0",
+ "ejs": "^2.6.1",
+ "express": "^4.16.3",
+ "filesize": "^3.6.1",
+ "gzip-size": "^5.0.0",
+ "lodash": "^4.17.19",
+ "mkdirp": "^0.5.1",
+ "opener": "^1.5.1",
+ "ws": "^6.0.0"
+ },
+ "bin": {
+ "webpack-bundle-analyzer": "lib/bin/analyzer.js"
+ },
+ "engines": {
+ "node": ">= 6.14.4"
+ }
+ },
+ "node_modules/@vue/cli-service/node_modules/ws": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "dev": true,
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
"node_modules/@vue/cli-shared-utils": {
"version": "4.5.13",
"resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.13.tgz",
@@ -13985,17 +14055,23 @@
"dev": true
},
"node_modules/d3-array": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
- "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.1.tgz",
+ "integrity": "sha512-33qQ+ZoZlli19IFiQx4QEpf2CBEayMRzhlisJHSCsSUbDXv6ZishqS1x7uFVClKG4Wr7rZVHvaAttoLow6GqdQ==",
"dependencies": {
- "internmap": "^1.0.0"
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/d3-axis": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-2.1.0.tgz",
- "integrity": "sha512-z/G2TQMyuf0X3qP+Mh+2PimoJD41VOCjViJzT0BHeL/+JQAofkiWZbWxlwFGb1N8EN+Cl/CW+MUKbVzr1689Cw=="
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+ "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/d3-brush": {
"version": "2.1.0",
@@ -14063,6 +14139,14 @@
"d3-time-format": "2 - 3"
}
},
+ "node_modules/d3-scale/node_modules/d3-array": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
+ "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+ "dependencies": {
+ "internmap": "^1.0.0"
+ }
+ },
"node_modules/d3-selection": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-2.0.0.tgz",
@@ -14092,6 +14176,14 @@
"d3-time": "1 - 2"
}
},
+ "node_modules/d3-time/node_modules/d3-array": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
+ "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+ "dependencies": {
+ "internmap": "^1.0.0"
+ }
+ },
"node_modules/d3-timer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-2.0.0.tgz",
@@ -18656,6 +18748,18 @@
"node": ">=8"
}
},
+ "node_modules/inquirer/node_modules/rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
"node_modules/inquirer/node_modules/string-width": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
@@ -24679,6 +24783,19 @@
"url": "https://opencollective.com/mswjs"
}
},
+ "node_modules/msw-storybook-addon": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/msw-storybook-addon/-/msw-storybook-addon-1.5.0.tgz",
+ "integrity": "sha512-2TmCREX+lVFlYwu+l9bwoxeI5+iXinJ7xOAahDKNRhgIrymaRTjAmCQx3h2NT7DJDvZKQcPstgCdhl03Q7ocHA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/addons": "^6.0.0",
+ "is-node-process": "^1.0.1"
+ },
+ "peerDependencies": {
+ "msw": "^0.35.0"
+ }
+ },
"node_modules/msw/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -24818,15 +24935,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/msw/node_modules/rxjs": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.3.0.tgz",
- "integrity": "sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==",
- "dev": true,
- "dependencies": {
- "tslib": "~2.1.0"
- }
- },
"node_modules/msw/node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -24874,12 +24982,6 @@
"node": ">=8"
}
},
- "node_modules/msw/node_modules/tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
- "dev": true
- },
"node_modules/msw/node_modules/type-fest": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
@@ -29655,16 +29757,18 @@
}
},
"node_modules/rxjs": {
- "version": "6.6.7",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz",
+ "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==",
"dependencies": {
- "tslib": "^1.9.0"
- },
- "engines": {
- "npm": ">=2.0.0"
+ "tslib": "~2.1.0"
}
},
+ "node_modules/rxjs/node_modules/tslib": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
+ "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="
+ },
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -30493,6 +30597,32 @@
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
"dev": true
},
+ "node_modules/sirv": {
+ "version": "1.0.17",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.17.tgz",
+ "integrity": "sha512-qx9go5yraB7ekT7bCMqUHJ5jEaOC/GXBxUWv+jeWnb7WzHUFdcQPGWk7YmAwFBaQBrogpuSqd/azbC2lZRqqmw==",
+ "dev": true,
+ "dependencies": {
+ "@polka/url": "^1.0.0-next.20",
+ "mime": "^2.3.1",
+ "totalist": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/sirv/node_modules/mime": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
+ "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@@ -32468,6 +32598,15 @@
"integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
"dev": true
},
+ "node_modules/totalist": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz",
+ "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/tough-cookie": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
@@ -34358,54 +34497,123 @@
}
},
"node_modules/webpack-bundle-analyzer": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz",
- "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz",
+ "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==",
"dev": true,
"dependencies": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1",
- "bfj": "^6.1.1",
- "chalk": "^2.4.1",
- "commander": "^2.18.0",
- "ejs": "^2.6.1",
- "express": "^4.16.3",
- "filesize": "^3.6.1",
- "gzip-size": "^5.0.0",
- "lodash": "^4.17.19",
- "mkdirp": "^0.5.1",
- "opener": "^1.5.1",
- "ws": "^6.0.0"
+ "acorn": "^8.0.4",
+ "acorn-walk": "^8.0.0",
+ "chalk": "^4.1.0",
+ "commander": "^7.2.0",
+ "gzip-size": "^6.0.0",
+ "lodash": "^4.17.20",
+ "opener": "^1.5.2",
+ "sirv": "^1.0.7",
+ "ws": "^7.3.1"
},
"bin": {
"webpack-bundle-analyzer": "lib/bin/analyzer.js"
},
"engines": {
- "node": ">= 6.14.4"
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/webpack-bundle-analyzer/node_modules/acorn": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
+ "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/webpack-bundle-analyzer/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/webpack-bundle-analyzer/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/webpack-bundle-analyzer/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
},
- "node_modules/webpack-bundle-analyzer/node_modules/filesize": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
- "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "node_modules/webpack-bundle-analyzer/node_modules/gzip-size": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz",
+ "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==",
"dev": true,
+ "dependencies": {
+ "duplexer": "^0.1.2"
+ },
"engines": {
- "node": ">= 0.4.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/webpack-bundle-analyzer/node_modules/ws": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
- "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "node_modules/webpack-bundle-analyzer/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/webpack-bundle-analyzer/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": {
- "async-limiter": "~1.0.0"
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/webpack-chain": {
@@ -38270,6 +38478,12 @@
"integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==",
"dev": true
},
+ "@polka/url": {
+ "version": "1.0.0-next.21",
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz",
+ "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==",
+ "dev": true
+ },
"@popperjs/core": {
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.1.tgz",
@@ -39869,6 +40083,17 @@
"requires": {
"@types/through": "*",
"rxjs": "^6.4.0"
+ },
+ "dependencies": {
+ "rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ }
}
},
"@types/is-function": {
@@ -40321,6 +40546,7 @@
"integrity": "sha512-pM7CR3yXB6L8Gfn6EmX7FLNE3+V/15I3o33GkSNsWvgsMp6HVGXKkXgojrcfUUauyL1LZOdvTmu4enU2RePGHw==",
"dev": true,
"requires": {
+ "@babel/core": "^7.11.0",
"@babel/helper-compilation-targets": "^7.9.6",
"@babel/helper-module-imports": "^7.8.3",
"@babel/plugin-proposal-class-properties": "^7.8.3",
@@ -40333,6 +40559,7 @@
"@vue/babel-plugin-jsx": "^1.0.3",
"@vue/babel-preset-jsx": "^1.2.4",
"babel-plugin-dynamic-import-node": "^2.3.3",
+ "core-js": "^3.6.5",
"core-js-compat": "^3.6.5",
"semver": "^6.1.0"
}
@@ -42241,6 +42468,12 @@
"to-regex": "^3.0.1"
}
},
+ "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
+ },
"dir-glob": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
@@ -42274,6 +42507,12 @@
"schema-utils": "^2.5.0"
}
},
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true
+ },
"fill-range": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
@@ -42579,6 +42818,36 @@
"mime": "^2.4.4",
"schema-utils": "^2.5.0"
}
+ },
+ "webpack-bundle-analyzer": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz",
+ "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1",
+ "bfj": "^6.1.1",
+ "chalk": "^2.4.1",
+ "commander": "^2.18.0",
+ "ejs": "^2.6.1",
+ "express": "^4.16.3",
+ "filesize": "^3.6.1",
+ "gzip-size": "^5.0.0",
+ "lodash": "^4.17.19",
+ "mkdirp": "^0.5.1",
+ "opener": "^1.5.1",
+ "ws": "^6.0.0"
+ }
+ },
+ "ws": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
}
}
},
@@ -46887,17 +47156,17 @@
"dev": true
},
"d3-array": {
- "version": "2.12.1",
- "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
- "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.1.tgz",
+ "integrity": "sha512-33qQ+ZoZlli19IFiQx4QEpf2CBEayMRzhlisJHSCsSUbDXv6ZishqS1x7uFVClKG4Wr7rZVHvaAttoLow6GqdQ==",
"requires": {
- "internmap": "^1.0.0"
+ "internmap": "1 - 2"
}
},
"d3-axis": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-2.1.0.tgz",
- "integrity": "sha512-z/G2TQMyuf0X3qP+Mh+2PimoJD41VOCjViJzT0BHeL/+JQAofkiWZbWxlwFGb1N8EN+Cl/CW+MUKbVzr1689Cw=="
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+ "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw=="
},
"d3-brush": {
"version": "2.1.0",
@@ -46963,6 +47232,16 @@
"d3-interpolate": "1.2.0 - 2",
"d3-time": "^2.1.1",
"d3-time-format": "2 - 3"
+ },
+ "dependencies": {
+ "d3-array": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
+ "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+ "requires": {
+ "internmap": "^1.0.0"
+ }
+ }
}
},
"d3-selection": {
@@ -46984,6 +47263,16 @@
"integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==",
"requires": {
"d3-array": "2"
+ },
+ "dependencies": {
+ "d3-array": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
+ "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+ "requires": {
+ "internmap": "^1.0.0"
+ }
+ }
}
},
"d3-time-format": {
@@ -50652,6 +50941,15 @@
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
+ "rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
"string-width": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
@@ -55425,15 +55723,6 @@
"wcwidth": "^1.0.1"
}
},
- "rxjs": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.3.0.tgz",
- "integrity": "sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==",
- "dev": true,
- "requires": {
- "tslib": "~2.1.0"
- }
- },
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -55469,12 +55758,6 @@
"has-flag": "^4.0.0"
}
},
- "tslib": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
- "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
- "dev": true
- },
"type-fest": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
@@ -55515,6 +55798,16 @@
}
}
},
+ "msw-storybook-addon": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/msw-storybook-addon/-/msw-storybook-addon-1.5.0.tgz",
+ "integrity": "sha512-2TmCREX+lVFlYwu+l9bwoxeI5+iXinJ7xOAahDKNRhgIrymaRTjAmCQx3h2NT7DJDvZKQcPstgCdhl03Q7ocHA==",
+ "dev": true,
+ "requires": {
+ "@storybook/addons": "^6.0.0",
+ "is-node-process": "^1.0.1"
+ }
+ },
"multicast-dns": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
@@ -59282,11 +59575,18 @@
}
},
"rxjs": {
- "version": "6.6.7",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz",
+ "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==",
"requires": {
- "tslib": "^1.9.0"
+ "tslib": "~2.1.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
+ "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="
+ }
}
},
"safe-buffer": {
@@ -59986,6 +60286,25 @@
}
}
},
+ "sirv": {
+ "version": "1.0.17",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.17.tgz",
+ "integrity": "sha512-qx9go5yraB7ekT7bCMqUHJ5jEaOC/GXBxUWv+jeWnb7WzHUFdcQPGWk7YmAwFBaQBrogpuSqd/azbC2lZRqqmw==",
+ "dev": true,
+ "requires": {
+ "@polka/url": "^1.0.0-next.20",
+ "mime": "^2.3.1",
+ "totalist": "^1.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
+ "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
+ "dev": true
+ }
+ }
+ },
"sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@@ -61595,6 +61914,12 @@
"integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=",
"dev": true
},
+ "totalist": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz",
+ "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==",
+ "dev": true
+ },
"tough-cookie": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
@@ -63288,45 +63613,81 @@
}
},
"webpack-bundle-analyzer": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz",
- "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz",
+ "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==",
"dev": true,
"requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1",
- "bfj": "^6.1.1",
- "chalk": "^2.4.1",
- "commander": "^2.18.0",
- "ejs": "^2.6.1",
- "express": "^4.16.3",
- "filesize": "^3.6.1",
- "gzip-size": "^5.0.0",
- "lodash": "^4.17.19",
- "mkdirp": "^0.5.1",
- "opener": "^1.5.1",
- "ws": "^6.0.0"
+ "acorn": "^8.0.4",
+ "acorn-walk": "^8.0.0",
+ "chalk": "^4.1.0",
+ "commander": "^7.2.0",
+ "gzip-size": "^6.0.0",
+ "lodash": "^4.17.20",
+ "opener": "^1.5.2",
+ "sirv": "^1.0.7",
+ "ws": "^7.3.1"
},
"dependencies": {
+ "acorn": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
+ "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
+ "dev": true
+ },
+ "acorn-walk": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
+ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "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.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
"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==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true
},
- "filesize": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
- "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "gzip-size": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz",
+ "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.2"
+ }
+ },
+ "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
},
- "ws": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
- "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "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": {
- "async-limiter": "~1.0.0"
+ "has-flag": "^4.0.0"
}
}
}
diff --git a/spring-boot-admin-server-ui/package.json b/spring-boot-admin-server-ui/package.json
index 5a4a329713c..16637de1fdf 100644
--- a/spring-boot-admin-server-ui/package.json
+++ b/spring-boot-admin-server-ui/package.json
@@ -8,12 +8,12 @@
"lint": "vue-cli-service lint",
"lint:fix": "vue-cli-service lint --fix",
"watch": "vue-cli-service build --watch",
- "storybook": "start-storybook -p 6006",
+ "storybook": "start-storybook -p 6006 -s public",
"build-storybook": "build-storybook"
},
"engines": {
- "node": "~15",
- "npm": "~7"
+ "node": ">=15",
+ "npm": ">=7"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "1.2.36",
@@ -26,9 +26,9 @@
"axios": "0.21.4",
"bulma": "0.9.3",
"bulma-badge": "3.0.1",
- "core-js": "3.17.3",
- "d3-array": "2.12.1",
- "d3-axis": "2.1.0",
+ "core-js": "3.20.0",
+ "d3-array": "3.1.1",
+ "d3-axis": "3.0.0",
"d3-brush": "2.1.0",
"d3-scale": "3.3.0",
"d3-selection": "2.0.0",
@@ -42,10 +42,10 @@
"popper.js": "1.16.1",
"pretty-bytes": "5.6.0",
"resize-observer-polyfill": "1.5.1",
- "rxjs": "6.6.7",
+ "rxjs": "7.4.0",
"vue": "2.6.14",
"vue-clickaway2": "2.3.2",
- "vue-i18n": "8.25.1",
+ "vue-i18n": "8.26.7",
"vue-infinite-loading": "2.4.5",
"vue-router": "3.5.2"
},
@@ -69,24 +69,24 @@
"@vue/test-utils": "1.2.2",
"babel-core": "7.0.0-bridge.0",
"babel-eslint": "10.1.0",
- "babel-jest": "26.6.3",
+ "babel-jest": "27.4.5",
"babel-loader": "8.2.2",
"babel-plugin-require-context-hook": "1.0.0",
"babel-plugin-transform-require-context": "0.1.1",
- "css-loader": "3.6.0",
"eslint": "6.8.0",
"eslint-plugin-vue": "6.2.2",
"html-loader": "1.3.2",
- "jest": "26.6.3",
- "jest-each": "26.6.2",
+ "jest": "27.4.5",
+ "jest-each": "27.4.2",
"jest-environment-jsdom-sixteen": "2.0.0",
"msw": "0.35.0",
+ "msw-storybook-addon": "1.5.0",
"node-sass": "6.0.1",
"sass-loader": "12.4.0",
"style-loader": "1.3.0",
"vue-loader": "15.9.8",
"vue-template-compiler": "2.6.14",
- "webpack-bundle-analyzer": "3.9.0"
+ "webpack-bundle-analyzer": "4.5.0"
},
"eslintConfig": {
"root": true,
@@ -153,6 +153,9 @@
"json",
"vue"
],
+ "transformIgnorePatterns": [
+ "node_modules/(?!(d3-.*)/)"
+ ],
"transform": {
".+\\.vue$": "vue-jest",
".+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$": "jest-transform-stub",
@@ -168,5 +171,8 @@
"**/*.spec.js"
],
"testURL": "http://example.com"
+ },
+ "msw": {
+ "workerDirectory": "public"
}
}
diff --git a/spring-boot-admin-server-ui/pom.xml b/spring-boot-admin-server-ui/pom.xml
index cec0285b7a0..734966dbbfd 100644
--- a/spring-boot-admin-server-ui/pom.xml
+++ b/spring-boot-admin-server-ui/pom.xml
@@ -90,7 +90,7 @@
npm
- ci --prefer-offline --no-audit --verbose
+ ci --prefer-offline --no-audit
diff --git a/spring-boot-admin-server-ui/public/mockServiceWorker.js b/spring-boot-admin-server-ui/public/mockServiceWorker.js
new file mode 100644
index 00000000000..86167669ad2
--- /dev/null
+++ b/spring-boot-admin-server-ui/public/mockServiceWorker.js
@@ -0,0 +1,338 @@
+/* eslint-disable */
+/* tslint:disable */
+
+/**
+ * Mock Service Worker (0.35.0).
+ * @see https://github.com/mswjs/msw
+ * - Please do NOT modify this file.
+ * - Please do NOT serve this file on production.
+ */
+
+const INTEGRITY_CHECKSUM = 'f0a916b13c8acc2b526a03a6d26df85f'
+const bypassHeaderName = 'x-msw-bypass'
+const activeClientIds = new Set()
+
+self.addEventListener('install', function () {
+ return self.skipWaiting()
+})
+
+self.addEventListener('activate', async function (event) {
+ return self.clients.claim()
+})
+
+self.addEventListener('message', async function (event) {
+ const clientId = event.source.id
+
+ if (!clientId || !self.clients) {
+ return
+ }
+
+ const client = await self.clients.get(clientId)
+
+ if (!client) {
+ return
+ }
+
+ const allClients = await self.clients.matchAll()
+
+ switch (event.data) {
+ case 'KEEPALIVE_REQUEST': {
+ sendToClient(client, {
+ type: 'KEEPALIVE_RESPONSE',
+ })
+ break
+ }
+
+ case 'INTEGRITY_CHECK_REQUEST': {
+ sendToClient(client, {
+ type: 'INTEGRITY_CHECK_RESPONSE',
+ payload: INTEGRITY_CHECKSUM,
+ })
+ break
+ }
+
+ case 'MOCK_ACTIVATE': {
+ activeClientIds.add(clientId)
+
+ sendToClient(client, {
+ type: 'MOCKING_ENABLED',
+ payload: true,
+ })
+ break
+ }
+
+ case 'MOCK_DEACTIVATE': {
+ activeClientIds.delete(clientId)
+ break
+ }
+
+ case 'CLIENT_CLOSED': {
+ activeClientIds.delete(clientId)
+
+ const remainingClients = allClients.filter((client) => {
+ return client.id !== clientId
+ })
+
+ // Unregister itself when there are no more clients
+ if (remainingClients.length === 0) {
+ self.registration.unregister()
+ }
+
+ break
+ }
+ }
+})
+
+// Resolve the "master" client for the given event.
+// Client that issues a request doesn't necessarily equal the client
+// that registered the worker. It's with the latter the worker should
+// communicate with during the response resolving phase.
+async function resolveMasterClient(event) {
+ const client = await self.clients.get(event.clientId)
+
+ if (client.frameType === 'top-level') {
+ return client
+ }
+
+ const allClients = await self.clients.matchAll()
+
+ return allClients
+ .filter((client) => {
+ // Get only those clients that are currently visible.
+ return client.visibilityState === 'visible'
+ })
+ .find((client) => {
+ // Find the client ID that's recorded in the
+ // set of clients that have registered the worker.
+ return activeClientIds.has(client.id)
+ })
+}
+
+async function handleRequest(event, requestId) {
+ const client = await resolveMasterClient(event)
+ const response = await getResponse(event, client, requestId)
+
+ // Send back the response clone for the "response:*" life-cycle events.
+ // Ensure MSW is active and ready to handle the message, otherwise
+ // this message will pend indefinitely.
+ if (client && activeClientIds.has(client.id)) {
+ ;(async function () {
+ const clonedResponse = response.clone()
+ sendToClient(client, {
+ type: 'RESPONSE',
+ payload: {
+ requestId,
+ type: clonedResponse.type,
+ ok: clonedResponse.ok,
+ status: clonedResponse.status,
+ statusText: clonedResponse.statusText,
+ body:
+ clonedResponse.body === null ? null : await clonedResponse.text(),
+ headers: serializeHeaders(clonedResponse.headers),
+ redirected: clonedResponse.redirected,
+ },
+ })
+ })()
+ }
+
+ return response
+}
+
+async function getResponse(event, client, requestId) {
+ const { request } = event
+ const requestClone = request.clone()
+ const getOriginalResponse = () => fetch(requestClone)
+
+ // Bypass mocking when the request client is not active.
+ if (!client) {
+ return getOriginalResponse()
+ }
+
+ // Bypass initial page load requests (i.e. static assets).
+ // The absence of the immediate/parent client in the map of the active clients
+ // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet
+ // and is not ready to handle requests.
+ if (!activeClientIds.has(client.id)) {
+ return await getOriginalResponse()
+ }
+
+ // Bypass requests with the explicit bypass header
+ if (requestClone.headers.get(bypassHeaderName) === 'true') {
+ const cleanRequestHeaders = serializeHeaders(requestClone.headers)
+
+ // Remove the bypass header to comply with the CORS preflight check.
+ delete cleanRequestHeaders[bypassHeaderName]
+
+ const originalRequest = new Request(requestClone, {
+ headers: new Headers(cleanRequestHeaders),
+ })
+
+ return fetch(originalRequest)
+ }
+
+ // Send the request to the client-side MSW.
+ const reqHeaders = serializeHeaders(request.headers)
+ const body = await request.text()
+
+ const clientMessage = await sendToClient(client, {
+ type: 'REQUEST',
+ payload: {
+ id: requestId,
+ url: request.url,
+ method: request.method,
+ headers: reqHeaders,
+ cache: request.cache,
+ mode: request.mode,
+ credentials: request.credentials,
+ destination: request.destination,
+ integrity: request.integrity,
+ redirect: request.redirect,
+ referrer: request.referrer,
+ referrerPolicy: request.referrerPolicy,
+ body,
+ bodyUsed: request.bodyUsed,
+ keepalive: request.keepalive,
+ },
+ })
+
+ switch (clientMessage.type) {
+ case 'MOCK_SUCCESS': {
+ return delayPromise(
+ () => respondWithMock(clientMessage),
+ clientMessage.payload.delay,
+ )
+ }
+
+ case 'MOCK_NOT_FOUND': {
+ return getOriginalResponse()
+ }
+
+ case 'NETWORK_ERROR': {
+ const { name, message } = clientMessage.payload
+ const networkError = new Error(message)
+ networkError.name = name
+
+ // Rejecting a request Promise emulates a network error.
+ throw networkError
+ }
+
+ case 'INTERNAL_ERROR': {
+ const parsedBody = JSON.parse(clientMessage.payload.body)
+
+ console.error(
+ `\
+[MSW] Uncaught exception in the request handler for "%s %s":
+
+${parsedBody.location}
+
+This exception has been gracefully handled as a 500 response, however, it's strongly recommended to resolve this error, as it indicates a mistake in your code. If you wish to mock an error response, please see this guide: https://mswjs.io/docs/recipes/mocking-error-responses\
+`,
+ request.method,
+ request.url,
+ )
+
+ return respondWithMock(clientMessage)
+ }
+ }
+
+ return getOriginalResponse()
+}
+
+self.addEventListener('fetch', function (event) {
+ const { request } = event
+ const accept = request.headers.get('accept') || ''
+
+ // Bypass server-sent events.
+ if (accept.includes('text/event-stream')) {
+ return
+ }
+
+ // Bypass navigation requests.
+ if (request.mode === 'navigate') {
+ return
+ }
+
+ // Opening the DevTools triggers the "only-if-cached" request
+ // that cannot be handled by the worker. Bypass such requests.
+ if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {
+ return
+ }
+
+ // Bypass all requests when there are no active clients.
+ // Prevents the self-unregistered worked from handling requests
+ // after it's been deleted (still remains active until the next reload).
+ if (activeClientIds.size === 0) {
+ return
+ }
+
+ const requestId = uuidv4()
+
+ return event.respondWith(
+ handleRequest(event, requestId).catch((error) => {
+ if (error.name === 'NetworkError') {
+ console.warn(
+ '[MSW] Successfully emulated a network error for the "%s %s" request.',
+ request.method,
+ request.url,
+ )
+ return
+ }
+
+ // At this point, any exception indicates an issue with the original request/response.
+ console.error(
+ `\
+[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`,
+ request.method,
+ request.url,
+ `${error.name}: ${error.message}`,
+ )
+ }),
+ )
+})
+
+function serializeHeaders(headers) {
+ const reqHeaders = {}
+ headers.forEach((value, name) => {
+ reqHeaders[name] = reqHeaders[name]
+ ? [].concat(reqHeaders[name]).concat(value)
+ : value
+ })
+ return reqHeaders
+}
+
+function sendToClient(client, message) {
+ return new Promise((resolve, reject) => {
+ const channel = new MessageChannel()
+
+ channel.port1.onmessage = (event) => {
+ if (event.data && event.data.error) {
+ return reject(event.data.error)
+ }
+
+ resolve(event.data)
+ }
+
+ client.postMessage(JSON.stringify(message), [channel.port2])
+ })
+}
+
+function delayPromise(cb, duration) {
+ return new Promise((resolve) => {
+ setTimeout(() => resolve(cb()), duration)
+ })
+}
+
+function respondWithMock(clientMessage) {
+ return new Response(clientMessage.payload.body, {
+ ...clientMessage.payload,
+ headers: clientMessage.payload.headers,
+ })
+}
+
+function uuidv4() {
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+ const r = (Math.random() * 16) | 0
+ const v = c == 'x' ? r : (r & 0x3) | 0x8
+ return v.toString(16)
+ })
+}
diff --git a/spring-boot-admin-server-ui/src/main/frontend/components/font-awesome-icon.js b/spring-boot-admin-server-ui/src/main/frontend/components/font-awesome-icon.js
index fb7da6d2b54..6045d50c431 100644
--- a/spring-boot-admin-server-ui/src/main/frontend/components/font-awesome-icon.js
+++ b/spring-boot-admin-server-ui/src/main/frontend/components/font-awesome-icon.js
@@ -44,6 +44,8 @@ import {faStepBackward} from '@fortawesome/free-solid-svg-icons/faStepBackward';
import {faStepForward} from '@fortawesome/free-solid-svg-icons/faStepForward';
import {faTimesCircle} from '@fortawesome/free-solid-svg-icons/faTimesCircle';
import {faTrash} from '@fortawesome/free-solid-svg-icons/faTrash';
+import {faRedo} from '@fortawesome/free-solid-svg-icons/faRedo';
+import {faSyncAlt} from '@fortawesome/free-solid-svg-icons/faSyncAlt';
import {faStopCircle as farStopCircle} from '@fortawesome/free-regular-svg-icons/faStopCircle';
import {faUserCircle} from '@fortawesome/free-solid-svg-icons/faUserCircle';
import {faWrench} from '@fortawesome/free-solid-svg-icons/faWrench';
@@ -80,6 +82,8 @@ library.add(
faStepForward,
faTimesCircle,
faTrash,
+ faRedo,
+ faSyncAlt,
faUserCircle,
faWrench,
//regular
diff --git a/spring-boot-admin-server-ui/src/main/frontend/components/sba-toggle-scope-button.spec.js b/spring-boot-admin-server-ui/src/main/frontend/components/sba-toggle-scope-button.spec.js
index 1c65f0698f2..ddca4cfe636 100644
--- a/spring-boot-admin-server-ui/src/main/frontend/components/sba-toggle-scope-button.spec.js
+++ b/spring-boot-admin-server-ui/src/main/frontend/components/sba-toggle-scope-button.spec.js
@@ -18,26 +18,28 @@ import {render} from '@/test-utils';
import SbaToggleScopeButton from './sba-toggle-scope-button';
import userEvent from '@testing-library/user-event';
import {screen} from '@testing-library/vue';
+import {mount} from '@vue/test-utils';
describe('SbaToggleScopeButton', function () {
- let emitted;
+ let wrapper;
beforeEach(() => {
- const vm = render(SbaToggleScopeButton, {props: {instanceCount: 10, scope: 'instance'}})
- emitted = vm.emitted;
+ wrapper = render(SbaToggleScopeButton, {props: {instanceCount: 2, scope: 'instance'}})
})
it('should emit changed scope when clicked', async () => {
userEvent.click(await screen.findByRole('button', {name: 'Instance'}));
- expect(emitted().changeScope[0]).toEqual(['application']);
+ expect(wrapper.emitted().changeScope[0]).toEqual(['application']);
});
it('should toggle the scope when clicked twice', async () => {
userEvent.click(await screen.findByRole('button', {name: 'Instance'}));
- userEvent.click(await screen.findByRole('button', {name: 'Application'}));
+ expect(wrapper.emitted().changeScope[0]).toEqual(['application']);
+
+ wrapper.updateProps({scope: 'application'})
- expect(emitted().changeScope[0]).toEqual(['application']);
- expect(emitted().changeScope[1]).toEqual(['instance']);
+ userEvent.click(await screen.findByRole('button', {name: 'Application'}));
+ expect(wrapper.emitted().changeScope[1]).toEqual(['instance']);
});
});
diff --git a/spring-boot-admin-server-ui/src/main/frontend/components/sba-toggle-scope-button.vue b/spring-boot-admin-server-ui/src/main/frontend/components/sba-toggle-scope-button.vue
index 74de38fd2e3..2c95f7a9b17 100644
--- a/spring-boot-admin-server-ui/src/main/frontend/components/sba-toggle-scope-button.vue
+++ b/spring-boot-admin-server-ui/src/main/frontend/components/sba-toggle-scope-button.vue
@@ -18,7 +18,7 @@
-
@@ -45,7 +45,15 @@