diff --git a/.env.unix.example b/.env.unix.example index eec8b3c7bde116df329651c2e18f6b1cd7ac1290..4e388f92928dcb7da1ed2de91c63966c591cc5d6 100644 --- a/.env.unix.example +++ b/.env.unix.example @@ -1,6 +1,6 @@ DBREPO_CLIENT_SECRET=MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG RABBITMQ_CLIENT_SECRET=JEC2FexxrX4N65fLeDGukAl6R3Lc9y0u -JWT_ISSUER=https://localhost:8443/realms/dbrepo +JWT_ISSUER=http://localhost/realms/dbrepo JWT_PUBKEY=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB JWT_CERT=MIICmzCCAYMCBgGG3GWyBTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZkYnJlcG8wHhcNMjMwMzEzMTkxMzE3WhcNMzMwMzEzMTkxNDU3WjARMQ8wDQYDVQQDDAZkYnJlcG8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqqcdDYFZZb28M0tEJzEP77FmD/Xqioyj9zWX6VwUSOMAgmMmn8eqs9hT9T0a+q4YTo9tUW1PNbUpwprA5b4Uk04DcIajxDVMUR/PjcHytmkqwVskq9AZW/Vngdoo+8tSbuIybwe/3Vwt266hbHpDcM97a+DXcYooRl7tQWCEX7RP27wQrMD9epDQ6IgKayZg9vC9/03dsIqwH9jXQRiZlFvwiEKhX2aY7lPGBaCK414JO00K/Z49iov9TRa/IYVbSt5qwgrx6DcqsBSPwOnI6A85UGfeUEZ/7coVJiL7RvBlsllapsL9eWTbQajVh94k9Ei3sibEPbtH+U2OAM78zAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAASnN1Cuif1sdfEK2kWAURSXGJCohCROLWdKFjaeHPRaEfpbFJsgxW0Yj3nwX5O3bUlOWoTyENwnXSsXMQsqnNi+At32CKaKO8+AkhAbgQL9F0B+KeJwmYv3cUj5N/LYkJjBvZBzUZ4Ugu5dcxH0k7AktLAIwimkyEnxTNolOA3UyrGGpREr8MCKWVr10RFuOpF/0CsJNNwbHXzalO9D756EUcRWZ9VSg6QVNso0YYRKTnILWDn9hcTRnqGy3SHo3anFTqQZ+BB57YbgFWy6udC0LYRB3zdp6zNti87eu/VEymiDY/mmo1AB8Tm0b6vxFz4AKcL3ax5qS6YnZ9efSzk= SHARED_FILESYSTEM=/tmp @@ -15,7 +15,7 @@ KEYCLOAK_ADMIN=fda KEYCLOAK_ADMIN_PASSWORD=fda BROKER_CONSUMERS=2 WEBSITE=http://localhost -GATEWAY_ENDPOINT=http://gateway-service:9095 +GATEWAY_ENDPOINT=http://gateway-service TOKEN_MAX=5 LOG_LEVEL=trace # error, warning, info, debug, trace DOI_URL="https://doi.org" diff --git a/.gitignore b/.gitignore index f31b325c3ffd0b323f5e80510a77c16cd0c473bc..35baef2b4c87969bc5c1cd847507a62840024b72 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,10 @@ fda-ui/ # Environment .env +# X509 +root.crt +intermediate.crt + # scanning .trivy/trivy-*.json diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ef44a843269e50e5b0502f84ea4441d5a96608a4..7265d00be31f281befcf517db487385abffc1441 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ before_script: - "docker version" - "docker compose version" - "docker system prune -f" - - "bash .gitlab/set-java.sh 11" + - "bash .gitlab/set-java.sh 17" - "mvn --version" - "python3 --version" - "df / -h" @@ -56,20 +56,6 @@ build-database-service: script: - "make build-database-service" -build-discovery-service: - stage: build-backend - needs: - - build-metadata-db - script: - - "make build-discovery-service" - -build-gateway-service: - stage: build-backend - needs: - - build-metadata-db - script: - - "make build-gateway-service" - build-query-service: stage: build-backend needs: @@ -178,23 +164,6 @@ test-database-service: coverage: '/Total.*?([0-9]{1,3})%/' timeout: 2 hour -test-discovery-service: - stage: test-backend - needs: - - build-discovery-service - script: - - "make test-discovery-service" - - "cat ./dbrepo-discovery-service/report/target/site/jacoco-aggregate/index.html | grep -o 'Total[^%]*%' | sed 's/<.*>/ /; s/Total/Jacoco Coverage Total:/'" - artifacts: - when: always - paths: - - ./dbrepo-discovery-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-discovery-service/discovery/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-discovery-service/discovery/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' - test-query-service: stage: test-backend needs: @@ -247,23 +216,6 @@ test-metadata-service: junit: ./dbrepo-metadata-service/rest-service/target/surefire-reports/TEST-*.xml coverage: '/Total.*?([0-9]{1,3})%/' -test-gateway-service: - stage: test-backend - needs: - - build-gateway-service - script: - - "make test-gateway-service" - - "echo 'Jacoco Coverage Total: 100%'" - artifacts: - when: always - paths: - - ./dbrepo-gateway-service/report/target/site/jacoco-aggregate/ - - ./dbrepo-metadata-service/gateway/target/surefire-reports/ - expire_in: 1 days - reports: - junit: ./dbrepo-gateway-service/gateway/target/surefire-reports/TEST-*.xml - coverage: '/Total.*?([0-9]{1,3})%/' - test-semantics-service: stage: test-backend needs: @@ -321,8 +273,6 @@ build-docker: - build-identifier-service - build-container-service - build-database-service - - build-discovery-service - - build-gateway-service - build-query-service - build-table-service - build-metadata-service @@ -342,6 +292,10 @@ scan-analyse-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -360,6 +314,10 @@ scan-authentication-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -378,6 +336,10 @@ scan-broker-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -396,6 +358,10 @@ scan-container-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -414,6 +380,10 @@ scan-database-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -428,28 +398,14 @@ scan-database-service: reports: container_scanning: ./.trivy/trivy-database-service-report.json -scan-discovery-service: - stage: scan-docker - needs: - - build-docker - allow_failure: true - before_script: - - docker logout ghcr.io - script: - - make scan-discovery-service - cache: - paths: - - .trivycache/ - artifacts: - when: always - expire_in: 1 days - reports: - container_scanning: ./.trivy/trivy-discovery-service-report.json - scan-gateway-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -468,6 +424,10 @@ scan-identifier-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -486,6 +446,10 @@ scan-metadata-db: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -504,6 +468,10 @@ scan-metadata-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -522,6 +490,10 @@ scan-proxy: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -540,6 +512,10 @@ scan-query-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -558,6 +534,10 @@ scan-search-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -576,6 +556,10 @@ scan-semantics-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -594,6 +578,10 @@ scan-table-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -612,6 +600,10 @@ scan-ui: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -630,6 +622,10 @@ scan-user-service: stage: scan-docker needs: - build-docker + only: + refs: + - dev + - master allow_failure: true before_script: - docker logout ghcr.io @@ -652,7 +648,6 @@ release-latest: - scan-broker-service - scan-container-service - scan-database-service - - scan-discovery-service - scan-gateway-service - scan-identifier-service - scan-metadata-db @@ -680,7 +675,6 @@ release-version: - scan-broker-service - scan-container-service - scan-database-service - - scan-discovery-service - scan-gateway-service - scan-identifier-service - scan-metadata-db diff --git a/.gitlab/clean.sh b/.gitlab/clean.sh deleted file mode 100755 index a9bf588e2f88457fdf73ac7361ef1d596fb81453..0000000000000000000000000000000000000000 --- a/.gitlab/clean.sh +++ /dev/null @@ -1 +0,0 @@ -#!/bin/bash diff --git a/.gitlab/set-java.sh b/.gitlab/set-java.sh old mode 100644 new mode 100755 diff --git a/Makefile b/Makefile index 7ec54ad9a2fc2e94ae7a95fdd5aab982335d4a28..875f5828988bb8d6756fc462d480a1d1d54aeb9b 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ TRIVY_VERSION ?= v0.41.0 all: -build-backend: build-metadata-db build-database-service build-query-service build-table-service build-identifier-service build-container-service build-discovery-service build-gateway-service build-metadata-service build-analyse-service build-user-service +build-backend: build-metadata-db build-database-service build-query-service build-table-service build-identifier-service build-container-service build-metadata-service build-analyse-service build-user-service build-metadata-db: mvn -f ./dbrepo-metadata-db/pom.xml clean install @@ -22,12 +22,6 @@ build-container-service: build-metadata-db build-database-service: build-metadata-db mvn -f ./dbrepo-database-service/pom.xml clean package -DskipTests -build-discovery-service: build-metadata-db - mvn -f ./dbrepo-discovery-service/pom.xml clean package -DskipTests - -build-gateway-service: build-metadata-db - mvn -f ./dbrepo-gateway-service/pom.xml clean package -DskipTests - build-query-service: build-metadata-db mvn -f ./dbrepo-query-service/pom.xml clean package -DskipTests @@ -154,7 +148,7 @@ release-search: tag-search release-metadata: tag-metadata docker push "dbrepo/metadata-service:${TAG}" -test-backend: test-container-service test-database-service test-discovery-service test-gateway-service test-query-service test-table-service test-identifier-service test-metadata-service test-semantics-service test-analyse-service test-user-service +test-backend: test-container-service test-database-service test-query-service test-table-service test-identifier-service test-metadata-service test-semantics-service test-analyse-service test-user-service test-identifier-service: clean build-metadata-db build-identifier-service mvn -f ./dbrepo-identifier-service/pom.xml clean test verify @@ -164,14 +158,9 @@ test-container-service: clean build-metadata-db build-container-service test-database-service: clean build-metadata-db build-database-service docker pull rabbitmq:3-management-alpine + docker pull elasticsearch:8.7.1 mvn -f ./dbrepo-database-service/pom.xml clean test verify -test-discovery-service: clean build-metadata-db build-discovery-service - mvn -f ./dbrepo-discovery-service/pom.xml clean test verify - -test-gateway-service: clean build-metadata-db build-gateway-service - mvn -f ./dbrepo-gateway-service/pom.xml clean test verify - test-query-service: clean build-metadata-db build-query-service mvn -f ./dbrepo-query-service/pom.xml clean test verify diff --git a/dbrepo-analyse-service/Dockerfile b/dbrepo-analyse-service/Dockerfile index 8c4afe9c114ea611171d6566f7b3a4f0fe3978d9..9e4c027a543e0bc3a00510d2f58ef6b4bf376dcd 100644 --- a/dbrepo-analyse-service/Dockerfile +++ b/dbrepo-analyse-service/Dockerfile @@ -1,26 +1,26 @@ -FROM python:3.9-slim -MAINTAINER Cornelia Michlits <cornelia.michlits@tuwien.ac.at> +FROM python:3.9-alpine +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +RUN apk update && apk --no-cache add build-base gcc python3-dev libpq-dev libffi-dev bash curl py3-pandas \ + py3-sqlalchemy py3-requests py3-gevent py3-psycopg2 + +WORKDIR /app + +COPY ./requirements.txt ./requirements.txt +RUN pip install -r requirements.txt > /dev/null + +COPY ./healthcheck.sh ./healthcheck.sh ENV FLASK_APP=app.py ENV FLASK_RUN_HOST=0.0.0.0 ENV PORT_APP=5000 ENV FLASK_ENV=production ENV HOSTNAME=analyse-service -ENV EUREKA_SERVER=http://discovery-service:9090/eureka/ -WORKDIR /app - -COPY requirements.txt requirements.txt - -RUN pip install -r requirements.txt > /dev/null - -HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD ./service_ready +HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD ["bash", "/app/healthcheck.sh"] COPY ./as-yml/ ./as-yml/ COPY ./*.py ./ -COPY ./service_ready ./ - -RUN chmod +x ./service_ready EXPOSE $PORT_APP diff --git a/dbrepo-analyse-service/app.py b/dbrepo-analyse-service/app.py index 38ea705005fc8985ed6d69d2fd7aa5d5a12b298d..2f4601669a25dff818eb0d4f1bbed1504c69784d 100644 --- a/dbrepo-analyse-service/app.py +++ b/dbrepo-analyse-service/app.py @@ -1,11 +1,9 @@ -import os from _csv import Error from flask import Flask, request, Response from determine_dt import determine_datatypes from determine_pk import determine_pk import logging -import py_eureka_client.eureka_client as eureka_client from flasgger import Swagger from flasgger.utils import swag_from from flasgger import LazyJSONEncoder @@ -148,11 +146,6 @@ def determinepk(): rest_server_port = 5000 -eureka_client.init(eureka_server=os.getenv('EUREKA_SERVER', 'http://localhost:9090/eureka/'), - app_name=os.getenv('HOSTNAME', 'analyse-service'), - instance_ip=os.getenv('HOSTNAME', 'analyse-service'), - instance_host=os.getenv('HOSTNAME', 'analyse-service'), - instance_port=rest_server_port) if __name__ == '__main__': http_server = WSGIServer(('', 5000), app) diff --git a/dbrepo-analyse-service/healthcheck.sh b/dbrepo-analyse-service/healthcheck.sh new file mode 100644 index 0000000000000000000000000000000000000000..01dd083f370ea41ff6bb73c626eb4fc089b76ad1 --- /dev/null +++ b/dbrepo-analyse-service/healthcheck.sh @@ -0,0 +1,5 @@ +#!/bin/bash +HTTP_CODE=$(curl --silent --output /dev/stderr --write-out "%{http_code}" 'http://0.0.0.0:5000/metrics') +if test $HTTP_CODE -ne 200; then + exit 1 +fi \ No newline at end of file diff --git a/dbrepo-analyse-service/requirements.txt b/dbrepo-analyse-service/requirements.txt index fb00deb887ccb648adb3871a391397b88f296d20..81e3eb123300e29ce57b2861b4f95636e1687e8b 100644 --- a/dbrepo-analyse-service/requirements.txt +++ b/dbrepo-analyse-service/requirements.txt @@ -1,14 +1,49 @@ +attrs==23.1.0 +certifi==2023.5.7 +chardet==5.1.0 +charset-normalizer==2.0.12 +click==8.1.3 +coverage==7.1.0 +docker==5.0.0 +exceptiongroup==1.1.1 +flasgger==0.9.5 +Flask==2.2.2 +gevent==21.8.0 +greenlet==1.1.3.post0 +html5lib==1.1 +idna==3.4 +importlib-metadata==6.6.0 +iniconfig==2.0.0 +itsdangerous==2.1.2 +Jinja2==3.1.2 +json-table-schema==0.2.1 +jsonschema==4.17.3 +lxml==4.9.2 +MarkupSafe==2.1.2 messytables==0.15.2 +mistune==2.0.5 +numpy==1.24.3 +packaging==23.1 pandas==1.2.3 -flask==2.1.2 -flasgger==0.9.5 +pluggy==1.0.0 +prometheus-client==0.16.0 +prometheus-flask-exporter==0.21.0 psycopg2-binary==2.8.6 -py-eureka-client==0.9.1 -docker==5.0.0 -sqlalchemy==1.4.15 -requests==2.26.0 -gevent==21.8.0 -markupsafe==2.0.1 -prometheus_flask_exporter==0.21.0 +pyrsistent==0.19.3 pytest==7.2.1 -coverage==7.1.0 \ No newline at end of file +python-dateutil==2.8.2 +python-magic==0.4.27 +pytz==2023.3 +PyYAML==6.0 +requests==2.26.0 +six==1.16.0 +SQLAlchemy==1.4.15 +tomli==2.0.1 +urllib3==1.26.15 +webencodings==0.5.1 +websocket-client==1.5.1 +Werkzeug==2.3.3 +xlrd==2.0.1 +zipp==3.15.0 +zope.event==4.6 +zope.interface==6.0 diff --git a/dbrepo-analyse-service/service_ready b/dbrepo-analyse-service/service_ready deleted file mode 100644 index c08320ed21abefccb54ec637d0c517b1d0e42559..0000000000000000000000000000000000000000 --- a/dbrepo-analyse-service/service_ready +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/local/bin/python -import socket -sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -result = sock.connect_ex(('127.0.0.1', 5000)) -if result == 0: - print("Port is open") - exit(0) -else: - print("Port is not open") - exit(1) -sock.close() \ No newline at end of file diff --git a/dbrepo-authentication-service/Dockerfile b/dbrepo-authentication-service/Dockerfile index 910e1acf169e1d2ce41e4aff7fc3158c938e1ae5..d5aae517441875eae082a8f1a4fffd5fe33dcf43 100644 --- a/dbrepo-authentication-service/Dockerfile +++ b/dbrepo-authentication-service/Dockerfile @@ -1,7 +1,6 @@ ###### FIRST STAGE ###### FROM keycloak/keycloak:21.0 as config MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> -LABEL service=authentication # Enable health and metrics support ENV KC_HEALTH_ENABLED=true @@ -13,8 +12,6 @@ ENV KC_DB=mariadb WORKDIR /opt/keycloak -COPY ./auth.keystore ./conf/server.keystore - RUN /opt/keycloak/bin/kc.sh build ###### SECOND STAGE ###### @@ -22,7 +19,7 @@ FROM redhat/ubi9-minimal as binary RUN microdnf update -y && microdnf install -y curl-minimal libcurl-minimal -###### FOURTH STAGE ###### +###### THIRD STAGE ###### FROM keycloak/keycloak:21.0 as runtime COPY --from=config /opt/keycloak/ /opt/keycloak/ @@ -35,8 +32,6 @@ COPY ./dbrepo-realm.json /opt/keycloak/data/import/dbrepo-realm.json WORKDIR /app -COPY ./service-register.sh ./service-register.sh -COPY ./docker-entrypoint.sh ./docker-entrypoint.sh COPY ./healthcheck.sh ./healthcheck.sh ENV METADATA_USERNAME=root @@ -54,4 +49,4 @@ ENV KEYCLOAK_ADMIN_PASSWORD=fda HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD ["bash", "/app/healthcheck.sh"] -ENTRYPOINT ["bash", "/app/docker-entrypoint.sh"] +ENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start-dev", "--import-realm"] diff --git a/dbrepo-authentication-service/auth.keystore b/dbrepo-authentication-service/auth.keystore deleted file mode 100644 index e5fbb780a18153b3ccd70ed3e4a21c0203fbf86c..0000000000000000000000000000000000000000 Binary files a/dbrepo-authentication-service/auth.keystore and /dev/null differ diff --git a/dbrepo-authentication-service/dbrepo-realm.json b/dbrepo-authentication-service/dbrepo-realm.json index c3b1302374829703fd21ad3adc553d65ac8d9bf2..e2fc0ac59053bfaf65b27253d44479db4b5aa4ef 100644 --- a/dbrepo-authentication-service/dbrepo-realm.json +++ b/dbrepo-authentication-service/dbrepo-realm.json @@ -26,7 +26,7 @@ "oauth2DeviceCodeLifespan" : 600, "oauth2DevicePollingInterval" : 5, "enabled" : true, - "sslRequired" : "external", + "sslRequired" : "none", "registrationAllowed" : false, "registrationEmailAsUsername" : false, "rememberMe" : false, @@ -909,7 +909,7 @@ "otpPolicyLookAheadWindow" : 1, "otpPolicyPeriod" : 30, "otpPolicyCodeReusable" : false, - "otpSupportedApplications" : [ "totpAppGoogleName", "totpAppFreeOTPName", "totpAppMicrosoftAuthenticatorName" ], + "otpSupportedApplications" : [ "totpAppFreeOTPName", "totpAppMicrosoftAuthenticatorName", "totpAppGoogleName" ], "webAuthnPolicyRpEntityName" : "keycloak", "webAuthnPolicySignatureAlgorithms" : [ "ES256" ], "webAuthnPolicyRpId" : "", @@ -1838,7 +1838,40 @@ "enabledEventTypes" : [ "SEND_RESET_PASSWORD", "UPDATE_CONSENT_ERROR", "GRANT_CONSENT", "VERIFY_PROFILE_ERROR", "REMOVE_TOTP", "REVOKE_GRANT", "UPDATE_TOTP", "LOGIN_ERROR", "CLIENT_LOGIN", "RESET_PASSWORD_ERROR", "IMPERSONATE_ERROR", "CODE_TO_TOKEN_ERROR", "CUSTOM_REQUIRED_ACTION", "OAUTH2_DEVICE_CODE_TO_TOKEN_ERROR", "RESTART_AUTHENTICATION", "IMPERSONATE", "UPDATE_PROFILE_ERROR", "LOGIN", "OAUTH2_DEVICE_VERIFY_USER_CODE", "UPDATE_PASSWORD_ERROR", "CLIENT_INITIATED_ACCOUNT_LINKING", "TOKEN_EXCHANGE", "AUTHREQID_TO_TOKEN", "LOGOUT", "REGISTER", "DELETE_ACCOUNT_ERROR", "CLIENT_REGISTER", "IDENTITY_PROVIDER_LINK_ACCOUNT", "DELETE_ACCOUNT", "UPDATE_PASSWORD", "CLIENT_DELETE", "FEDERATED_IDENTITY_LINK_ERROR", "IDENTITY_PROVIDER_FIRST_LOGIN", "CLIENT_DELETE_ERROR", "VERIFY_EMAIL", "CLIENT_LOGIN_ERROR", "RESTART_AUTHENTICATION_ERROR", "EXECUTE_ACTIONS", "REMOVE_FEDERATED_IDENTITY_ERROR", "TOKEN_EXCHANGE_ERROR", "PERMISSION_TOKEN", "SEND_IDENTITY_PROVIDER_LINK_ERROR", "EXECUTE_ACTION_TOKEN_ERROR", "SEND_VERIFY_EMAIL", "OAUTH2_DEVICE_AUTH", "EXECUTE_ACTIONS_ERROR", "REMOVE_FEDERATED_IDENTITY", "OAUTH2_DEVICE_CODE_TO_TOKEN", "IDENTITY_PROVIDER_POST_LOGIN", "IDENTITY_PROVIDER_LINK_ACCOUNT_ERROR", "OAUTH2_DEVICE_VERIFY_USER_CODE_ERROR", "UPDATE_EMAIL", "REGISTER_ERROR", "REVOKE_GRANT_ERROR", "EXECUTE_ACTION_TOKEN", "LOGOUT_ERROR", "UPDATE_EMAIL_ERROR", "CLIENT_UPDATE_ERROR", "AUTHREQID_TO_TOKEN_ERROR", "UPDATE_PROFILE", "CLIENT_REGISTER_ERROR", "FEDERATED_IDENTITY_LINK", "SEND_IDENTITY_PROVIDER_LINK", "SEND_VERIFY_EMAIL_ERROR", "RESET_PASSWORD", "CLIENT_INITIATED_ACCOUNT_LINKING_ERROR", "OAUTH2_DEVICE_AUTH_ERROR", "UPDATE_CONSENT", "REMOVE_TOTP_ERROR", "VERIFY_EMAIL_ERROR", "SEND_RESET_PASSWORD_ERROR", "CLIENT_UPDATE", "CUSTOM_REQUIRED_ACTION_ERROR", "IDENTITY_PROVIDER_POST_LOGIN_ERROR", "UPDATE_TOTP_ERROR", "CODE_TO_TOKEN", "VERIFY_PROFILE", "GRANT_CONSENT_ERROR", "IDENTITY_PROVIDER_FIRST_LOGIN_ERROR" ], "adminEventsEnabled" : false, "adminEventsDetailsEnabled" : false, - "identityProviders" : [ ], + "identityProviders" : [ { + "alias" : "saml", + "displayName" : "", + "internalId" : "4a2378b1-4e46-4783-a663-b33f3bd95061", + "providerId" : "saml", + "enabled" : true, + "updateProfileFirstLoginMode" : "on", + "trustEmail" : false, + "storeToken" : false, + "addReadTokenRoleOnCreate" : false, + "authenticateByDefault" : false, + "linkOnly" : false, + "firstBrokerLoginFlowAlias" : "first broker login", + "config" : { + "validateSignature" : "false", + "postBindingLogout" : "false", + "nameIDPolicyFormat" : "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent", + "postBindingResponse" : "false", + "entityId" : "https://dbrepo2.ec.tuwien.ac.at/realms/dbrepo", + "backchannelSupported" : "false", + "signSpMetadata" : "false", + "wantAssertionsEncrypted" : "false", + "loginHint" : "false", + "allowCreate" : "true", + "wantAssertionsSigned" : "false", + "postBindingAuthnRequest" : "false", + "forceAuthn" : "false", + "attributeConsumingServiceIndex" : "0", + "singleSignOnServiceUrl" : "https://idp.zid.tuwien.ac.at/", + "wantAuthnRequestsSigned" : "false", + "allowedClockSkew" : "0", + "principalType" : "Subject NameID" + } + } ], "identityProviderMappers" : [ ], "components" : { "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy" : [ { @@ -1899,7 +1932,7 @@ "subType" : "authenticated", "subComponents" : { }, "config" : { - "allowed-protocol-mapper-types" : [ "oidc-full-name-mapper", "oidc-usermodel-property-mapper", "oidc-usermodel-attribute-mapper", "saml-user-property-mapper", "saml-role-list-mapper", "oidc-address-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-user-attribute-mapper" ] + "allowed-protocol-mapper-types" : [ "oidc-usermodel-attribute-mapper", "oidc-full-name-mapper", "oidc-usermodel-property-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-user-property-mapper", "saml-role-list-mapper", "oidc-address-mapper", "saml-user-attribute-mapper" ] } }, { "id" : "3ab11d74-5e76-408a-b85a-26bf8950f979", @@ -1908,7 +1941,7 @@ "subType" : "anonymous", "subComponents" : { }, "config" : { - "allowed-protocol-mapper-types" : [ "oidc-usermodel-attribute-mapper", "saml-role-list-mapper", "oidc-full-name-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-user-attribute-mapper", "saml-user-property-mapper", "oidc-address-mapper", "oidc-usermodel-property-mapper" ] + "allowed-protocol-mapper-types" : [ "saml-user-property-mapper", "oidc-usermodel-attribute-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-role-list-mapper", "oidc-address-mapper", "oidc-usermodel-property-mapper", "saml-user-attribute-mapper", "oidc-full-name-mapper" ] } } ], "org.keycloak.keys.KeyProvider" : [ { @@ -1960,7 +1993,7 @@ "internationalizationEnabled" : false, "supportedLocales" : [ ], "authenticationFlows" : [ { - "id" : "85d85037-1863-4869-b9ab-09582853f779", + "id" : "7e7d6810-5b6c-4ec6-865c-5f0b62ec56d7", "alias" : "Account verification options", "description" : "Method with which to verity the existing account", "providerId" : "basic-flow", @@ -1982,7 +2015,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "e89d11ed-c578-409a-aaed-d00db2951f66", + "id" : "6d972ab3-0618-4971-b44a-0fc0d11c7280", "alias" : "Authentication Options", "description" : "Authentication options.", "providerId" : "basic-flow", @@ -2011,7 +2044,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "5bfb765d-30bf-4708-b85e-01beb0813a75", + "id" : "821a14e0-ef26-4b07-b716-fa34393eda56", "alias" : "Browser - Conditional OTP", "description" : "Flow to determine if the OTP is required for the authentication", "providerId" : "basic-flow", @@ -2033,7 +2066,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "dfe729c0-df4b-4b9b-8170-fd29d703f691", + "id" : "e70eadbd-4c39-4cfd-86ac-e50acc753b1b", "alias" : "Direct Grant - Conditional OTP", "description" : "Flow to determine if the OTP is required for the authentication", "providerId" : "basic-flow", @@ -2055,7 +2088,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "e52f6f8c-edd8-42eb-a956-1e642d054a09", + "id" : "4e35af97-acf4-4ca8-bc81-0477c1adfb6d", "alias" : "First broker login - Conditional OTP", "description" : "Flow to determine if the OTP is required for the authentication", "providerId" : "basic-flow", @@ -2077,7 +2110,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "0fcdfbb3-4e4f-4c55-9e06-9baf3afef314", + "id" : "2e0bd063-274a-4aab-a5f0-038a0bca5b98", "alias" : "Handle Existing Account", "description" : "Handle what to do if there is existing account with same email/username like authenticated identity provider", "providerId" : "basic-flow", @@ -2099,7 +2132,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "a3db4f3a-a772-4530-b948-c2ea688dc993", + "id" : "6a20fab2-44bb-4451-b29a-6fb7e14a52ce", "alias" : "Reset - Conditional OTP", "description" : "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.", "providerId" : "basic-flow", @@ -2121,7 +2154,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "d540d238-e69c-4eb1-8238-bf43c9f59118", + "id" : "159d7398-74a7-4f60-a3fd-eb2df46f5ce7", "alias" : "User creation or linking", "description" : "Flow for the existing/non-existing user alternatives", "providerId" : "basic-flow", @@ -2144,7 +2177,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "b0b433e3-3a58-4915-8833-ad55fef4aab7", + "id" : "85a66c55-4665-4ba0-bec9-7254eb8e5895", "alias" : "Verify Existing Account by Re-authentication", "description" : "Reauthentication of existing account", "providerId" : "basic-flow", @@ -2166,7 +2199,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "68ec036a-f399-4980-80b7-a27867f5e650", + "id" : "c002e6da-2397-4fae-8d48-1eec3719ca15", "alias" : "browser", "description" : "browser based authentication", "providerId" : "basic-flow", @@ -2202,7 +2235,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "aa32f681-942b-4194-b8df-124f210bcaa9", + "id" : "a03631cf-2fea-4a12-a35c-8137023503bd", "alias" : "clients", "description" : "Base authentication for clients", "providerId" : "client-flow", @@ -2238,7 +2271,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "1169765a-7850-4a9a-9a72-9a9dcf75ac8b", + "id" : "a89940e4-bf4d-4a04-8fdf-dcf775336b20", "alias" : "direct grant", "description" : "OpenID Connect Resource Owner Grant", "providerId" : "basic-flow", @@ -2267,7 +2300,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "60f23852-a761-4290-982b-c51876f4c382", + "id" : "2dc2582b-be6f-4d9a-b545-b2c0e79a3581", "alias" : "docker auth", "description" : "Used by Docker clients to authenticate against the IDP", "providerId" : "basic-flow", @@ -2282,7 +2315,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "a09aa7bd-3f8f-444d-83d0-f095b5f7c6bb", + "id" : "09e56692-226f-4384-85e0-e33463cdb226", "alias" : "first broker login", "description" : "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", "providerId" : "basic-flow", @@ -2305,7 +2338,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "85d2028a-ab84-4fcb-8088-94c927051018", + "id" : "1439c900-92e0-4230-a1a7-ae82c3b8ddc9", "alias" : "forms", "description" : "Username, password, otp and other auth forms.", "providerId" : "basic-flow", @@ -2327,7 +2360,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "43ffa27d-3940-4b9b-857d-85f2b3729710", + "id" : "4cc3bb1b-e85d-447e-b50e-1afbe107bafe", "alias" : "http challenge", "description" : "An authentication flow based on challenge-response HTTP Authentication Schemes", "providerId" : "basic-flow", @@ -2349,7 +2382,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "2e900379-7ae7-431d-a586-2014f7688aa0", + "id" : "04c49d80-30e4-4a37-b1c7-4d18c1b6a7f1", "alias" : "registration", "description" : "registration flow", "providerId" : "basic-flow", @@ -2365,7 +2398,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "844942ca-41ae-4d50-b3ab-7815d9df6332", + "id" : "85abb75a-0774-4b2d-8a71-2a92b0cfb639", "alias" : "registration form", "description" : "registration form", "providerId" : "form-flow", @@ -2401,7 +2434,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "7c108a2a-abbd-462e-a9fc-917f28b67f80", + "id" : "948f68c1-015b-4349-a56f-6ee177d558ce", "alias" : "reset credentials", "description" : "Reset credentials for a user if they forgot their password or something", "providerId" : "basic-flow", @@ -2437,7 +2470,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "b47ae4b9-a177-44ef-b41e-c7e5da6220c7", + "id" : "6046d416-4a88-4af6-b440-9fbc87fba478", "alias" : "saml ecp", "description" : "SAML ECP Profile Authentication Flow", "providerId" : "basic-flow", @@ -2453,13 +2486,13 @@ } ] } ], "authenticatorConfig" : [ { - "id" : "81c9b7e4-2574-46b1-8a2a-e35edc716c1c", + "id" : "3c91aefc-127f-4722-8375-72e8434d6266", "alias" : "create unique user config", "config" : { "require.password.update.after.registration" : "false" } }, { - "id" : "14491568-0d51-4082-9bb2-216d3cb4ab34", + "id" : "1041c583-4682-44a8-b61b-9712bd4987c4", "alias" : "review profile config", "config" : { "update.profile.on.first.login" : "missing" diff --git a/dbrepo-authentication-service/docker-entrypoint.sh b/dbrepo-authentication-service/docker-entrypoint.sh deleted file mode 100644 index d8e0fdcd850f1e8f867b99c22926aef8c341589e..0000000000000000000000000000000000000000 --- a/dbrepo-authentication-service/docker-entrypoint.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -/app/service-register.sh authentication-service 8443 8080 -(while sleep 60; do bash /app/service-register.sh authentication-service 8443 8080; done) & - -/opt/keycloak/bin/kc.sh start-dev --import-realm diff --git a/dbrepo-authentication-service/service-register.sh b/dbrepo-authentication-service/service-register.sh deleted file mode 100755 index 2d7f64be971f7e14fad690f3e6a9b708f092ab26..0000000000000000000000000000000000000000 --- a/dbrepo-authentication-service/service-register.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash - -# $1 is used as the host name. - -EUREKA_HOST="discovery-service" -EUREKA_PORT="9090" -EUREKA_URI="http://$EUREKA_HOST:$EUREKA_PORT" - -SERVICE_NAME="$1" -SERVICE_PROTOCOL="http" -SERVICE_HOST="$1" -SECURE_PORT="${2:-9000}" -SERVICE_PORT="${3:-9000}" - -SERVICE_URI="$SERVICE_PROTOCOL://$SERVICE_HOST:$SERVICE_PORT" -HOME_URI="$SERVICE_URI/realms/dbrepo" -HEALTH_URI="$SERVICE_URI/health" - -# This is the URL shown in the "status" field in the -# instances section of the eureka dashboard. -# -# It's up to you to decide what the URL points to. Some -# information or status endpoint might be good. -STATUS_URI="$SERVICE_URI/health" - -# This is the name displayed to the right of the status -# on the eureka dashbard. If the app (FAKE_SERVICE) is -# registered with more than one hostname, they will be -# displayed as a comma-separated list. This hostname -# is part of the heartbeat message. -# -# If you'll have more than one host per service, -# make sure they have different host names. -HOST_NAME="${1:-fake01}" - -# Everyone of these parameters seem to be required. I don't know -# anything about secureVipAddress and vipAddress. -# -# dataCenterInfo must have a name of "MyOwn" or "Amazon". -# -# status can be UP, DOWN, STARTING, OUT_OF_SERVICE, UNKNOWN. -# if the registration status is STARTING, then the service -# will never be evicted. Also, simply sending a Heartbeat -# does not change the status. -# -# The metadata fields can be any information you want associated -# with a service. I recommend keeping it short. -# - -cat <<EOF > /tmp/json.json -{ - "instance": { - "instanceId": "$SERVICE_NAME:$SERVICE_NAME:$SERVICE_PORT", - "hostName": "$HOST_NAME", - "app": "$SERVICE_NAME", - "ipAddr": "$SERVICE_HOST", - "status": "UP", - "dataCenterInfo": { - "@class": "com.netflix.appinfo.MyDataCenterInfo", - "name": "MyOwn" - }, - "healthCheckUrl": "$HEALTH_URI", - "homePageUrl": "$HOME_URI", - "leaseInfo": { - "evictionDurationInSecs": 90 - }, - "metadata": { - "zone": "default", - "management.port": "8443" - }, - "port": { - "\$": "$SERVICE_PORT", - "@enabled": "true" - }, - "securePort": { - "\$": "$SECURE_PORT", - "@enabled": "true" - }, - "vipAddress": "$SERVICE_HOST", - "secureVipAddress": "$SERVICE_HOST", - "statusPageUrl": "$STATUS_URI" - } -} -EOF - -curl --header "content-type: application/json" --data-binary @/tmp/json.json --silent $EUREKA_URI/eureka/apps/$SERVICE_NAME diff --git a/dbrepo-broker-service/Dockerfile b/dbrepo-broker-service/Dockerfile index 1b46c7899b8e9ab615e4e8d8f4e3876f09887106..8dcb22970b3c2cb5cbd4379b4316995e79e38252 100644 --- a/dbrepo-broker-service/Dockerfile +++ b/dbrepo-broker-service/Dockerfile @@ -5,9 +5,7 @@ MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> ###### SECOND STAGE ###### FROM rabbitmq:3-management-alpine as runtime -ENV PYTHONUNBUFFERED=1 -ENV JWT_PUBKEY=public-key -ENV JWT_CERT=cert +ENV RABBITMQ_DEFAULT_VHOST=dbrepo RUN apk --no-cache add curl @@ -15,13 +13,13 @@ COPY ./rabbitmq.conf /etc/rabbitmq/rabbitmq.conf WORKDIR /app +ENV JWT_PUBKEY=public-key +ENV JWT_CERT=cert + COPY ./init.sh ./init.sh -COPY ./service-register.sh ./service-register.sh COPY ./service_ready /usr/bin/service_ready COPY ./docker-entrypoint.sh ./docker-entrypoint.sh -RUN chmod +x ./service-register.sh - HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD service_ready ENTRYPOINT [ "bash", "/app/docker-entrypoint.sh" ] \ No newline at end of file diff --git a/dbrepo-broker-service/docker-entrypoint.sh b/dbrepo-broker-service/docker-entrypoint.sh index 788bd0723fcc9d632b1c7713dcfeb14f490d2806..b062814baf3ea77ece53a565e36f9abf0b20e1eb 100755 --- a/dbrepo-broker-service/docker-entrypoint.sh +++ b/dbrepo-broker-service/docker-entrypoint.sh @@ -6,8 +6,4 @@ bash ./init.sh # enable prometheus plugin (sleep 10; rabbitmq-plugins enable rabbitmq_prometheus rabbitmq_mqtt rabbitmq_auth_backend_oauth2 rabbitmq_auth_mechanism_ssl; touch /ready) & -# register with discovery service -/app/service-register.sh broker-service 15672 15672 -(while sleep 60; do /app/service-register.sh broker-service 15672 15672; done) & - rabbitmq-server \ No newline at end of file diff --git a/dbrepo-broker-service/service-register.sh b/dbrepo-broker-service/service-register.sh deleted file mode 100755 index 6cda6f4300050619f8edd2ce09a7c224e5bf5512..0000000000000000000000000000000000000000 --- a/dbrepo-broker-service/service-register.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash - -# $1 is used as the host name. - -EUREKA_HOST="discovery-service" -EUREKA_PORT="9090" -EUREKA_URI="http://$EUREKA_HOST:$EUREKA_PORT" - -SERVICE_NAME="$1" -SERVICE_PROTOCOL="http" -SERVICE_HOST="$1" -SECURE_PORT="${2:-9000}" -SERVICE_PORT="${3:-9000}" - -SERVICE_URI="$SERVICE_PROTOCOL://$SERVICE_HOST:$SERVICE_PORT" -HOME_URI="$SERVICE_URI/realms/dbrepo" -HEALTH_URI="$SERVICE_URI/health" - -# This is the URL shown in the "status" field in the -# instances section of the eureka dashboard. -# -# It's up to you to decide what the URL points to. Some -# information or status endpoint might be good. -STATUS_URI="$SERVICE_URI/health" - -# This is the name displayed to the right of the status -# on the eureka dashbard. If the app (FAKE_SERVICE) is -# registered with more than one hostname, they will be -# displayed as a comma-separated list. This hostname -# is part of the heartbeat message. -# -# If you'll have more than one host per service, -# make sure they have different host names. -HOST_NAME="${1:-fake01}" - -# Everyone of these parameters seem to be required. I don't know -# anything about secureVipAddress and vipAddress. -# -# dataCenterInfo must have a name of "MyOwn" or "Amazon". -# -# status can be UP, DOWN, STARTING, OUT_OF_SERVICE, UNKNOWN. -# if the registration status is STARTING, then the service -# will never be evicted. Also, simply sending a Heartbeat -# does not change the status. -# -# The metadata fields can be any information you want associated -# with a service. I recommend keeping it short. -# - -cat <<EOF > /tmp/json.json -{ - "instance": { - "instanceId": "$SERVICE_NAME:$SERVICE_NAME:$SERVICE_PORT", - "hostName": "$HOST_NAME", - "app": "$SERVICE_NAME", - "ipAddr": "$SERVICE_HOST", - "status": "UP", - "dataCenterInfo": { - "@class": "com.netflix.appinfo.MyDataCenterInfo", - "name": "MyOwn" - }, - "healthCheckUrl": "$HEALTH_URI", - "homePageUrl": "$HOME_URI", - "leaseInfo": { - "evictionDurationInSecs": 90 - }, - "metadata": { - "zone": "default", - "management.port": "15672" - }, - "port": { - "\$": "$SERVICE_PORT", - "@enabled": "true" - }, - "securePort": { - "\$": "$SECURE_PORT", - "@enabled": "false" - }, - "vipAddress": "$SERVICE_HOST", - "secureVipAddress": "$SERVICE_HOST", - "statusPageUrl": "$STATUS_URI" - } -} -EOF - -curl --header "content-type: application/json" --data-binary @/tmp/json.json --silent $EUREKA_URI/eureka/apps/$SERVICE_NAME diff --git a/dbrepo-container-service/Dockerfile b/dbrepo-container-service/Dockerfile index cab97691b1873da1c6b5e1597ada8e3b1c7cfe1e..2ddbfd3f85a3fc34da1ecc6503d2f3314377f2b4 100644 --- a/dbrepo-container-service/Dockerfile +++ b/dbrepo-container-service/Dockerfile @@ -3,7 +3,8 @@ FROM dbrepo-metadata-db:latest as dependency MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> ###### SECOND STAGE ###### -FROM maven:slim as build +FROM maven:3-openjdk-17 as build +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> COPY ./pom.xml ./ @@ -19,7 +20,10 @@ COPY ./report ./report RUN mvn -q clean package -DskipTests ###### THIRD STAGE ###### -FROM openjdk:11-jre-slim as runtime +FROM openjdk:17-alpine as runtime +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +RUN apk --no-cache add bash ENV METADATA_DB=fda ENV METADATA_USERNAME=root @@ -31,7 +35,7 @@ ENV USER_NETWORK=userdb ENV LOG_LEVEL=debug ENV DBREPO_CLIENT_SECRET=client-secret ENV CLIENT_ID=dbrepo-client -ENV JWT_ISSUER=http://localhost:8080/realms/dbrepo +ENV JWT_ISSUER=http://localhost/realms/dbrepo ENV JWT_PUBKEY=public-key WORKDIR /app diff --git a/dbrepo-container-service/pom.xml b/dbrepo-container-service/pom.xml index 8aa570d6a9d0cc0e55008680f3673039bae9c1e5..286be07560852c79f76480948c12b3e0bd97b218 100644 --- a/dbrepo-container-service/pom.xml +++ b/dbrepo-container-service/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.3.10.RELEASE</version> + <version>3.0.6</version> </parent> <groupId>at.tuwien</groupId> @@ -22,21 +22,16 @@ </modules> <properties> - <java.version>11</java.version> - <spring-cloud.version>3.0.1</spring-cloud.version> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <docker.version>3.2.7</docker.version> - <swagger.version>2.2.2</swagger.version> - <jacoco.version>0.8.7</jacoco.version> - <sqlserver.version>9.2.1.jre11</sqlserver.version> + <java.version>17</java.version> + <spring-cloud.version>4.0.2</spring-cloud.version> + <mapstruct.version>1.5.5.Final</mapstruct.version> + <docker.version>3.3.0</docker.version> + <swagger.version>2.2.9</swagger.version> + <jacoco.version>0.8.10</jacoco.version> <jwt.version>4.3.0</jwt.version> </properties> <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-webflux</artifactId> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> @@ -79,7 +74,7 @@ <dependency> <groupId>io.swagger.core.v3</groupId> <artifactId>swagger-core</artifactId> - <version>2.2.2</version> + <version>${swagger.version}</version> </dependency> <!-- Data Source --> <dependency> @@ -109,16 +104,6 @@ <artifactId>mariadb-java-client</artifactId> <version>${mariadb.version}</version> </dependency> - <dependency> - <groupId>mysql</groupId> - <artifactId>mysql-connector-java</artifactId> - <version>${mysql.version}</version> - </dependency> - <dependency> - <groupId>com.microsoft.sqlserver</groupId> - <artifactId>mssql-jdbc</artifactId> - <version>${sqlserver.version}</version> - </dependency> <!-- Testing --> <dependency> <groupId>org.springframework.boot</groupId> diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java index 38d02adb7b4ad5b9aa706cb4136c14d11890bdb7..8f69d140c8386a5f0f6ca1df4b392c5610b7c98e 100644 --- a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java +++ b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ContainerEndpoint.java @@ -6,7 +6,6 @@ import at.tuwien.entities.container.Container; import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.mapper.ContainerMapper; -import at.tuwien.service.ContainerService; import at.tuwien.service.UserService; import at.tuwien.service.impl.ContainerServiceImpl; import io.micrometer.core.annotation.Timed; @@ -22,12 +21,11 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContext; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.List; import java.util.Optional; diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java index fbd45d747b9dcf75567fa740f5b436411ed0db52..aa854398e960e056ada4920b73ebddcdc2031900 100644 --- a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java +++ b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/endpoints/ImageEndpoint.java @@ -24,8 +24,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.List; import java.util.stream.Collectors; diff --git a/dbrepo-container-service/rest-service/src/main/resources/application-local.yml b/dbrepo-container-service/rest-service/src/main/resources/application-local.yml index ca57158d4d162611602df256c838fdb3c2bb4b08..16147161785a7dc27dca23df5963b6d129a8fc10 100644 --- a/dbrepo-container-service/rest-service/src/main/resources/application-local.yml +++ b/dbrepo-container-service/rest-service/src/main/resources/application-local.yml @@ -24,6 +24,7 @@ spring: loadbalancer.ribbon.enabled: false rabbitmq: host: localhost + virtual-host: dbrepo username: fda password: fda management.endpoints.web.exposure.include: health,info,prometheus @@ -36,18 +37,13 @@ logging: root: warn at.tuwien.: trace org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: container-service - non-secure-port: 9091 - client.serviceUrl.defaultZone: http://localhost:9090/eureka/ fda: network: userdb mount.path: /tmp ready.path: ./ready jwt: - issuer: https://localhost:8443/realms/dbrepo + issuer: http://localhost/realms/dbrepo public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB client_secret: client-secret client_id: dbrepo-client - gateway.endpoint: http://localhost:9095 \ No newline at end of file + gateway.endpoint: http://localhost \ No newline at end of file diff --git a/dbrepo-container-service/rest-service/src/main/resources/application.yml b/dbrepo-container-service/rest-service/src/main/resources/application.yml index 4d1061d16429fb302b5ac943666a22dcf3fe4e7a..51a75828390349483877afca20c08ed4cc90109b 100644 --- a/dbrepo-container-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-container-service/rest-service/src/main/resources/application.yml @@ -24,6 +24,7 @@ spring: loadbalancer.ribbon.enabled: false rabbitmq: host: broker-service + virtual-host: dbrepo username: "${BROKER_USERNAME}" password: "${BROKER_PASSWORD}" management.endpoints.web.exposure.include: health,info,prometheus @@ -36,11 +37,6 @@ logging: root: warn at.tuwien.: "${LOG_LEVEL}" org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: container-service - non-secure-port: 9091 - client.serviceUrl.defaultZone: http://discovery-service:9090/eureka/ fda: network: "${USER_NETWORK}" mount.path: "${SHARED_FILESYSTEM}" @@ -50,4 +46,4 @@ fda: public_key: "${JWT_PUBKEY}" client_secret: "${DBREPO_CLIENT_SECRET}" client_id: "${CLIENT_ID}" - gateway.endpoint: http://gateway-service:9095 \ No newline at end of file + gateway.endpoint: http://gateway-service \ No newline at end of file diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java index e16d70f74a3b12ad2829e4c7bc7eb1f0ef9a6308..066294a208391c94bdd9b8f0a2a9aad4c29ca4ef 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java +++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java @@ -18,11 +18,9 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.AccessDeniedException; -import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException; import org.springframework.security.test.context.support.WithAnonymousUser; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -219,6 +217,8 @@ public class ImageEndpointUnitTest extends BaseUnitTest { public void delete_hasRole_succeeds() throws ImageNotFoundException { /* mock */ + when(imageRepository.existsById(IMAGE_1_ID)) + .thenReturn(true); when(userRepository.findByUsername(USER_2_USERNAME)) .thenReturn(Optional.of(USER_2)); diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java index 97aa1edfd0f155704e63a467f1f0f5714ee2bea9..9c6cd35a83a32be64c353145a053fb9e2539efd1 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java +++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java @@ -3,7 +3,6 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.api.container.image.ImageCreateDto; import at.tuwien.config.ReadyConfig; -import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.exception.*; import at.tuwien.repository.jpa.ContainerRepository; import at.tuwien.repository.jpa.ImageRepository; diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java index c86d1f2ee9a3a9157de87ba13f9a3132ca2bc923..8da465bcabe2b9d873932887b67e8bb287ee22fb 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java +++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java @@ -16,8 +16,8 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.junit.jupiter.SpringExtension; -import javax.persistence.EntityNotFoundException; -import javax.validation.ConstraintViolationException; +import jakarta.persistence.EntityNotFoundException; +import jakarta.validation.ConstraintViolationException; import java.security.Principal; import java.util.List; import java.util.Optional; @@ -158,6 +158,8 @@ public class ImageServiceUnitTest extends BaseUnitTest { public void delete_succeeds() throws ImageNotFoundException { /* mock */ + when(imageRepository.existsById(IMAGE_1_ID)) + .thenReturn(true); doNothing() .when(imageRepository) .deleteById(IMAGE_1_ID); @@ -170,6 +172,8 @@ public class ImageServiceUnitTest extends BaseUnitTest { public void delete_notFound_fails() { /* mock */ + when(imageRepository.existsById(IMAGE_1_ID)) + .thenReturn(false); doThrow(EntityNotFoundException.class) .when(imageRepository) .deleteById(IMAGE_1_ID); diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java index 57a97cf3ae13086c3b48557a39d2416c62ca970b..d7b341c23a0ac741cf6422906c1cc20c984ae038 100644 --- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java +++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java @@ -2,6 +2,7 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.config.ReadyConfig; +import at.tuwien.exception.ImageNotFoundException; import at.tuwien.repository.jpa.ImageRepository; import at.tuwien.repository.jpa.UserRepository; import at.tuwien.service.impl.ImageServiceImpl; @@ -46,8 +47,8 @@ public class PersistenceIntegrationTest extends BaseUnitTest { public void delete_notExists_fails() { /* test */ - assertThrows(UnexpectedRollbackException.class, () -> { - imageService.delete(IMAGE_2_ID); + assertThrows(ImageNotFoundException.class, () -> { + imageService.delete(9999L); }); } diff --git a/dbrepo-container-service/rest-service/src/test/resources/application.properties b/dbrepo-container-service/rest-service/src/test/resources/application.properties index 6fffd501c901b37d9bb4b6662472bcba70c64e77..246afd93696a55296d38085f6c82c24876e4be1b 100644 --- a/dbrepo-container-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-container-service/rest-service/src/test/resources/application.properties @@ -9,7 +9,8 @@ spring.cloud.config.discovery.enabled = false spring.cloud.config.enabled = false # disable datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA +# spring 6 fix https://github.com/h2database/h2database/issues/3363 +spring.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=VALUE,KEY;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-container-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java index b2b01c42ee9868215962426b18b3a70450bff7ac..92b60f4f8a5ed8a566e2504d71b63478b1593f68 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ b/dbrepo-container-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java @@ -6,6 +6,10 @@ import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -16,10 +20,6 @@ import org.springframework.security.web.authentication.WebAuthenticationDetailsS import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-container-service/services/src/main/java/at/tuwien/config/JacksonConfig.java index fba7f99cf2bf1cbb12ac51cd6fd5b80751ff43c1..c4944a469174ad1962d5c54cc483400dbee12f1d 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ b/dbrepo-container-service/services/src/main/java/at/tuwien/config/JacksonConfig.java @@ -19,7 +19,6 @@ public class JacksonConfig { @Bean public ObjectMapper objectMapper() throws JsonProcessingException { final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); objectMapper.registerModule(new Jdk8Module()); objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-container-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java index 5724f37ead9f6c73b81ced1d049aa9b200372bda..c12c18252c51f43494eb1558d0ba6d06261ef6a6 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ b/dbrepo-container-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java @@ -9,14 +9,16 @@ import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.util.matcher.OrRequestMatcher; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; @Configuration @EnableWebSecurity @@ -27,15 +29,26 @@ import javax.servlet.http.HttpServletResponse; bearerFormat = "JWT", scheme = "bearer" ) -public class WebSecurityConfig extends WebSecurityConfigurerAdapter { +public class WebSecurityConfig { @Bean public AuthTokenFilter authTokenFilter() { return new AuthTokenFilter(); } - @Override - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + final OrRequestMatcher internalEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/actuator/prometheus/**", "GET") + ); + final OrRequestMatcher publicEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/api/container/**", "GET"), + new AntPathRequestMatcher("/api/image/**", "GET"), + new AntPathRequestMatcher("/v3/api-docs.yaml"), + new AntPathRequestMatcher("/v3/api-docs/**"), + new AntPathRequestMatcher("/swagger-ui/**"), + new AntPathRequestMatcher("/swagger-ui.html") + ); /* enable CORS and disable CSRF */ http = http.cors().and().csrf().disable(); /* set session management to stateless */ @@ -54,22 +67,18 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { } ).and(); /* set permissions on endpoints */ - http.authorizeRequests() + http.authorizeHttpRequests() /* our internal endpoints */ - .antMatchers(HttpMethod.GET, "/actuator/prometheus/**").permitAll() + .requestMatchers(internalEndpoints).permitAll() /* our public endpoints */ - .antMatchers(HttpMethod.GET, "/api/container/**").permitAll() - .antMatchers(HttpMethod.GET, "/api/image/**").permitAll() - .antMatchers("/v3/api-docs.yaml", - "/v3/api-docs/**", - "/swagger-ui/**", - "/swagger-ui.html").permitAll() + .requestMatchers(publicEndpoints).permitAll() /* our private endpoints */ .anyRequest().authenticated(); /* add JWT token filter */ http.addFilterBefore(authTokenFilter(), UsernamePasswordAuthenticationFilter.class ); + return http.build(); } @Bean @@ -77,7 +86,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); - config.addAllowedOrigin("*"); + config.addAllowedOriginPattern("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java index a3f620572aabc234756f2a151c192f7d86e95832..8c18fc898711887755d17b4661182df37f2f6cc1 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java +++ b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java @@ -25,7 +25,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; -import org.springframework.util.SocketUtils; import org.springframework.transaction.annotation.Transactional; @@ -71,10 +70,8 @@ public class ContainerServiceImpl implements ContainerService { throw new ImageNotFoundException("image was not found in metadata database."); } /* entity */ - final Integer availableTcpPort = SocketUtils.findAvailableTcpPort(10000); Container container = new Container(); container.setImageId(image.get().getId()); - container.setPort(availableTcpPort); container.setName(createDto.getName()); container.setInternalName(containerMapper.containerToInternalContainerName(container)); /* check duplicate */ @@ -92,11 +89,10 @@ public class ContainerServiceImpl implements ContainerService { /* create host mapping */ final HostConfig hostConfig = this.hostConfig .withNetworkMode(dockerDaemonConfig.getUserNetwork()) - .withBinds(Bind.parse(dockerDaemonConfig.getMountPath() + ":/tmp"), Bind.parse(response.getName() + ":/var/lib/mysql")) - .withPortBindings(PortBinding.parse(availableTcpPort + ":" + image.get().getDefaultPort())); - log.debug("container has network {}, volume bind {}, volume bind {} and port bind {}", + .withBinds(Bind.parse(dockerDaemonConfig.getMountPath() + ":/tmp"), Bind.parse(response.getName() + ":/var/lib/mysql")); + log.debug("container has network {}, volume bind {}, volume bind {}", dockerDaemonConfig.getUserNetwork(), dockerDaemonConfig.getMountPath() + ":/tmp", - response.getName() + ":/var/lib/mysql", availableTcpPort + ":" + image.get().getDefaultPort()); + response.getName() + ":/var/lib/mysql"); log.trace("host config {}", hostConfig); final User user = userService.findByUsername(principal.getName()); container.setCreatedBy(user.getId()); diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java index ccb3dbae797cfd70d52009355c2f07405a78082b..d1cf69056a02d8e04e980c8b8d3cea90294f8cd0 100644 --- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java +++ b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java @@ -2,7 +2,6 @@ package at.tuwien.service.impl; import at.tuwien.api.container.image.ImageChangeDto; import at.tuwien.api.container.image.ImageCreateDto; -import at.tuwien.api.container.image.ImageEnvItemDto; import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.container.image.ContainerImageEnvironmentItem; import at.tuwien.exception.*; @@ -21,11 +20,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.stereotype.Service; -import org.springframework.transaction.UnexpectedRollbackException; import org.springframework.transaction.annotation.Transactional; -import javax.persistence.EntityNotFoundException; -import javax.validation.ConstraintViolationException; +import jakarta.persistence.EntityNotFoundException; +import jakarta.validation.ConstraintViolationException; import java.security.Principal; import java.time.Duration; import java.time.Instant; @@ -128,6 +126,9 @@ public class ImageServiceImpl implements ImageService { @Override @Transactional public void delete(Long imageId) throws ImageNotFoundException { + if (!imageRepository.existsById(imageId)) { + throw new ImageNotFoundException("Image with id " + imageId + " not found"); + } try { imageRepository.deleteById(imageId); log.info("Deleted image {}", imageId); diff --git a/dbrepo-database-service/Dockerfile b/dbrepo-database-service/Dockerfile index b181da3570e0e9461a27a3b91be26e2d85ae151b..0b19effac9546e50027dff3db4486dd5975b19a7 100644 --- a/dbrepo-database-service/Dockerfile +++ b/dbrepo-database-service/Dockerfile @@ -3,7 +3,8 @@ FROM dbrepo-metadata-db:latest as dependency MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> ###### SECOND STAGE ###### -FROM maven:slim as build +FROM maven:3-openjdk-17 as build +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> COPY ./pom.xml ./ @@ -19,7 +20,10 @@ COPY ./report ./report RUN mvn -q clean package -DskipTests ###### THIRD STAGE ###### -FROM openjdk:11-jre-slim as runtime +FROM openjdk:17-alpine as runtime +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +RUN apk --no-cache add bash ENV METADATA_DB=fda ENV METADATA_USERNAME=root @@ -29,11 +33,11 @@ ENV BROKER_PASSWORD=fda ENV SEARCH_ENDPOINT=search-service ENV SEARCH_USERNAME=elastic ENV SEARCH_PASSWORD=elastic -ENV GATEWAY_ENDPOINT=http://gateway-service:9095 +ENV GATEWAY_ENDPOINT=http://gateway-service ENV LOG_LEVEL=debug ENV DBREPO_CLIENT_SECRET=client-secret ENV CLIENT_ID=dbrepo-client -ENV JWT_ISSUER=http://localhost:8080/realms/dbrepo +ENV JWT_ISSUER=http://localhost/realms/dbrepo ENV JWT_PUBKEY=public-key WORKDIR /app @@ -47,4 +51,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./database-service.ja EXPOSE 9092 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./database-service.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./database-service.jar"] diff --git a/dbrepo-database-service/pom.xml b/dbrepo-database-service/pom.xml index c86fd2464296304442a513cb70d1050fe4a16389..414a7afe17da563adbfdd88d3808a216cd6b9451 100644 --- a/dbrepo-database-service/pom.xml +++ b/dbrepo-database-service/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.3.10.RELEASE</version> + <version>3.0.6</version> </parent> <groupId>at.tuwien</groupId> @@ -22,23 +22,18 @@ </modules> <properties> - <java.version>11</java.version> - <spring-cloud.version>3.0.1</spring-cloud.version> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <docker.version>3.2.7</docker.version> - <testcontainers.version>1.15.2</testcontainers.version> - <swagger.version>2.1.7</swagger.version> - <springfox.version>3.0.0</springfox.version> - <jacoco.version>0.8.7</jacoco.version> - <hibernate-c3po.version>5.6.3.Final</hibernate-c3po.version> + <java.version>17</java.version> + <spring-cloud.version>4.0.2</spring-cloud.version> + <mapstruct.version>1.5.5.Final</mapstruct.version> + <docker.version>3.3.0</docker.version> + <swagger.version>2.2.9</swagger.version> + <jacoco.version>0.8.10</jacoco.version> <jwt.version>4.3.0</jwt.version> + <c3p0.version>0.9.5.5</c3p0.version> + <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> </properties> <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-webflux</artifactId> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> @@ -80,9 +75,11 @@ </dependency> <!-- elasticsearch --> <dependency> - <groupId>org.springframework.data</groupId> - <artifactId>spring-data-elasticsearch</artifactId> + <groupId>co.elastic.clients</groupId> + <artifactId>elasticsearch-java</artifactId> + <version>${elasticsearch-client.version}</version> </dependency> + <!-- AMQP --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> @@ -93,6 +90,16 @@ <version>${spring-cloud.version}</version> </dependency> <!-- Data Source --> + <dependency> + <groupId>com.mchange</groupId> + <artifactId>c3p0</artifactId> + <version>${c3p0.version}</version> + </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-c3p0</artifactId> + <version>${c3p0-hibernate.version}</version> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> @@ -121,11 +128,6 @@ <version>${project.version}</version> <scope>compile</scope> </dependency> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-c3p0</artifactId> - <version>${hibernate-c3po.version}</version> - </dependency> <!-- Testing --> <dependency> <groupId>org.springframework.boot</groupId> @@ -194,12 +196,6 @@ <artifactId>amqp-client</artifactId> <version>${rabbit-amqp-client.version}</version> </dependency> - <!-- Gateway --> - <dependency> - <groupId>org.projectreactor</groupId> - <artifactId>reactor-spring</artifactId> - <version>1.0.1.RELEASE</version> - </dependency> </dependencies> <build> @@ -226,8 +222,9 @@ <exclude>at/tuwien/utils/**/*</exclude> <exclude>at/tuwien/handlers/**/*</exclude> <exclude>at/tuwien/seeder/**/*</exclude> + <exclude>at/tuwien/auth/**/*</exclude> <exclude>**/HibernateConnector.class</exclude> - <exclude>**/FdaDatabaseManagingApplication.class</exclude> + <exclude>**/DbrepoDatabaseManagingApplication.class</exclude> </excludes> </configuration> <executions> diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java index a05d168cff50ca9447942d4da26a2bc05a19baf8..955f7e8816d1a25ba894b3bdf624a4e96c07862b 100644 --- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java +++ b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/AccessEndpoint.java @@ -7,10 +7,7 @@ import at.tuwien.api.error.ApiErrorDto; import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.exception.*; import at.tuwien.mapper.DatabaseMapper; -import at.tuwien.repository.jpa.DatabaseAccessRepository; import at.tuwien.service.AccessService; -import at.tuwien.service.ContainerService; -import at.tuwien.service.DatabaseService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -24,9 +21,9 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import java.security.Principal; @Log4j2 diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java index d2f571e4d2fab5b4d864306fd3a005595dd67551..63114d8ccee3353eca4e90fc34f36dfb98e65f3a 100644 --- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java +++ b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java @@ -26,8 +26,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.List; import java.util.stream.Collectors; diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java index 3a05bdad9dfc92cfa7027dbed423c00b47a45deb..8a2a9e62e49443ae50902a4fe854dff7cf21e511 100644 --- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java +++ b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/LicenseEndpoint.java @@ -19,7 +19,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; import java.util.List; import java.util.stream.Collectors; diff --git a/dbrepo-database-service/rest-service/src/main/resources/application-local.yml b/dbrepo-database-service/rest-service/src/main/resources/application-local.yml index c6bb7a1caaa6caf9aa606d0a8764a2cfb03b1e03..1d647d4d6f0a05a54e73dc6fb159cb2f2b8baabc 100644 --- a/dbrepo-database-service/rest-service/src/main/resources/application-local.yml +++ b/dbrepo-database-service/rest-service/src/main/resources/application-local.yml @@ -24,8 +24,13 @@ spring: loadbalancer.ribbon.enabled: false rabbitmq: host: localhost + virtual-host: dbrepo username: fda password: fda + elasticsearch: + password: elastic + username: elastic + uris: http://localhost:9200 management.endpoints.web.exposure.include: health,info,prometheus server: port: 9092 @@ -35,20 +40,11 @@ logging: root: warn at.tuwien.: info org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: database-service - non-secure-port: 9092 - client.serviceUrl.defaultZone: http://localhost:9090/eureka/ fda: - elastic: - endpoint: localhost:9200 - username: elastic - password: elastic ready.path: ./ready jwt: - issuer: https://localhost:8443/realms/dbrepo + issuer: http://localhost/realms/dbrepo public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB client_secret: client-secret client_id: dbrepo-client - gateway.endpoint: http://localhost:9095 \ No newline at end of file + gateway.endpoint: http://localhost \ No newline at end of file diff --git a/dbrepo-database-service/rest-service/src/main/resources/application.yml b/dbrepo-database-service/rest-service/src/main/resources/application.yml index 434d09b0be7696113f76f5b2b35f589f46a30b1d..f3bbe67a229ca7e98b6c58647c2a50baea698eb0 100644 --- a/dbrepo-database-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-database-service/rest-service/src/main/resources/application.yml @@ -24,8 +24,13 @@ spring: loadbalancer.ribbon.enabled: false rabbitmq: host: broker-service + virtual-host: dbrepo username: "${BROKER_USERNAME}" password: "${BROKER_PASSWORD}" + elasticsearch: + password: "${ELASTIC_PASSWORD}" + username: elastic + uris: http://search-service:9200 management.endpoints.web.exposure.include: health,info,prometheus server: port: 9092 @@ -35,16 +40,7 @@ logging: root: warn at.tuwien.: "${LOG_LEVEL}" org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: database-service - non-secure-port: 9092 - client.serviceUrl.defaultZone: http://discovery-service:9090/eureka/ fda: - elastic: - endpoint: search-service:9200 - username: elastic - password: "${ELASTIC_PASSWORD}" ready.path: /ready jwt: issuer: "${JWT_ISSUER}" diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java index bf74ff488ba38a31ffc2963ab1a517153acc68b2..ac03038159766dd43803905ef9a2c90df841e20c 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java @@ -14,6 +14,7 @@ import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.mapper.AccessMapper; import at.tuwien.repository.jpa.*; +import at.tuwien.service.AccessService; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.Disabled; @@ -26,6 +27,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.test.context.support.WithAnonymousUser; import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; @@ -33,7 +35,8 @@ import java.util.Optional; import java.util.UUID; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.when; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @@ -50,7 +53,7 @@ public class AccessEndpointUnitTest extends BaseUnitTest { private Channel channel; @MockBean - private DatabaseAccessRepository databaseAccessRepository; + private AccessService accessService; @MockBean private DatabaseRepository databaseRepository; @@ -84,6 +87,20 @@ public class AccessEndpointUnitTest extends BaseUnitTest { }); } + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"create-database-access"}) + public void create_succeeds() throws UserNotFoundException, NotAllowedException, QueryMalformedException, + DatabaseNotFoundException, DatabaseMalformedException, AccessDeniedException { + + /* mock */ + doNothing() + .when(accessService) + .create(eq(CONTAINER_1_ID), eq(DATABASE_1_ID), any(DatabaseGiveAccessDto.class)); + + /* test */ + generic_create(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, null, USER_2_USERNAME, USER_2, USER_1_PRINCIPAL); + } + @Test @WithAnonymousUser public void find_anonymous_fails() { @@ -100,16 +117,16 @@ public class AccessEndpointUnitTest extends BaseUnitTest { /* test */ assertThrows(AccessDeniedException.class, () -> { - generic_find(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, null, USER_2_USERNAME, USER_2_ID, USER_1_PRINCIPAL); + generic_find(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, null, USER_2_USERNAME, USER_2_ID, USER_2_PRINCIPAL); }); } @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"check-database-access"}) - public void find_hasRoleHasAccess_fails() throws AccessDeniedException, NotAllowedException { + public void find_hasRoleHasAccess_succeeds() throws AccessDeniedException, NotAllowedException { /* test */ - generic_find(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, DATABASE_1_USER_1_READ_ACCESS, USER_2_USERNAME, USER_2_ID, USER_1_PRINCIPAL); + generic_find(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, DATABASE_1_USER_1_READ_ACCESS, USER_1_USERNAME, USER_1_ID, USER_1_PRINCIPAL); } @Test @@ -154,13 +171,64 @@ public class AccessEndpointUnitTest extends BaseUnitTest { }); } + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"update-database-access"}) + public void update_succeeds() throws UserNotFoundException, AccessDeniedException, NotAllowedException, + QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException { + + /* mock */ + when(userRepository.findByUsername(USER_1_USERNAME)) + .thenReturn(Optional.of(USER_1)); + doNothing() + .when(accessService) + .update(eq(CONTAINER_1_ID), eq(DATABASE_1_ID), eq(USER_2_USERNAME), any(DatabaseModifyAccessDto.class)); + + /* test */ + generic_update(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, DATABASE_1_USER_2_WRITE_OWN_ACCESS, USER_2_USERNAME, USER_1_PRINCIPAL); + } + + @Test + @WithAnonymousUser + public void revoke_anonymous_fails() { + + /* test */ + assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { + generic_revoke(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1_USER_1_WRITE_ALL_ACCESS, USER_2_USERNAME, USER_1_PRINCIPAL); + }); + } + + @Test + @WithMockUser(username = USER_4_USERNAME) + public void revoke_noRoleNoAccess_fails() { + + /* test */ + assertThrows(org.springframework.security.access.AccessDeniedException.class, () -> { + generic_revoke(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1_USER_1_WRITE_ALL_ACCESS, USER_2_USERNAME, USER_4_PRINCIPAL); + }); + } + + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"delete-database-access"}) + public void revoke_succeeds() throws UserNotFoundException, NotAllowedException, + QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException, AccessDeniedException { + + /* mock */ + doNothing() + .when(accessService) + .delete(CONTAINER_1_ID, DATABASE_1_ID, USER_2_USERNAME); + + /* test */ + generic_revoke(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1_USER_1_WRITE_ALL_ACCESS, USER_2_USERNAME, USER_1_PRINCIPAL); + } + /* ################################################################################################### */ /* ## GENERIC TEST CASES ## */ /* ################################################################################################### */ protected void generic_create(Long containerId, Long databaseId, Database database, DatabaseAccess access, String username, User user, Principal principal) throws UserNotFoundException, - NotAllowedException, QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException { + NotAllowedException, QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException, + AccessDeniedException { final DatabaseGiveAccessDto request = DatabaseGiveAccessDto.builder() .username(username) .type(AccessTypeDto.READ) @@ -171,12 +239,15 @@ public class AccessEndpointUnitTest extends BaseUnitTest { .thenReturn(Optional.of(database)); when(userRepository.findByUsername(username)) .thenReturn(Optional.of(user)); - if (access == null) { - when(databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username)) - .thenReturn(Optional.empty()); + if (access != null) { + log.trace("mock access {} for user with username {} for database with id {}", access.getType(), username, databaseId); + when(accessService.find(databaseId, username)) + .thenReturn(access); } else { - when(databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username)) - .thenReturn(Optional.of(access)); + log.trace("mock no access for user with username {} for database with id {}", username, databaseId); + doThrow(AccessDeniedException.class) + .when(accessService) + .find(databaseId, username); } /* test */ @@ -193,17 +264,14 @@ public class AccessEndpointUnitTest extends BaseUnitTest { when(databaseRepository.findById(databaseId)) .thenReturn(Optional.of(database)); if (access != null) { - when(databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username)) - .thenReturn(Optional.of(access)); - when(databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, principal.getName())) - .thenReturn(Optional.of(DatabaseAccess.builder() - .type(access.getType()) - .hdbid(databaseId) - .huserid(username.equals(USER_1_USERNAME) ? USER_1_ID : USER_2_ID) - .build())); + log.trace("mock access {} for user with username {} for database with id {}", access.getType(), username, databaseId); + when(accessService.find(databaseId, username)) + .thenReturn(access); } else { - when(databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username)) - .thenReturn(Optional.empty()); + log.trace("mock no access for user with username {} for database with id {}", username, databaseId); + doThrow(AccessDeniedException.class) + .when(accessService) + .find(databaseId, username); } /* test */ @@ -226,12 +294,15 @@ public class AccessEndpointUnitTest extends BaseUnitTest { /* mock */ when(databaseRepository.findById(databaseId)) .thenReturn(Optional.of(database)); - if (access == null) { - when(databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username)) - .thenReturn(Optional.empty()); + if (access != null) { + log.trace("mock access {} for user with username {} for database with id {}", access.getType(), username, databaseId); + when(accessService.find(databaseId, username)) + .thenReturn(access); } else { - when(databaseAccessRepository.findByDatabaseIdAndUsername(databaseId, username)) - .thenReturn(Optional.of(access)); + log.trace("mock no access for user with username {} for database with id {}", username, databaseId); + doThrow(AccessDeniedException.class) + .when(accessService) + .find(databaseId, username); } /* test */ @@ -240,4 +311,26 @@ public class AccessEndpointUnitTest extends BaseUnitTest { assertNull(response.getBody()); } + protected void generic_revoke(Long containerId, Long databaseId, DatabaseAccess access, String username, + Principal principal) throws AccessDeniedException, NotAllowedException, + UserNotFoundException, QueryMalformedException, DatabaseNotFoundException, DatabaseMalformedException { + + /* mock */ + if (access != null) { + log.trace("mock access {} for user with username {} for database with id {}", access.getType(), username, databaseId); + when(accessService.find(databaseId, username)) + .thenReturn(access); + } else { + log.trace("mock no access for user with username {} for database with id {}", username, databaseId); + doThrow(AccessDeniedException.class) + .when(accessService) + .find(databaseId, username); + } + + /* test */ + final ResponseEntity<?> response = accessEndpoint.revoke(containerId, databaseId, username, principal); + assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); + assertNull(response.getBody()); + } + } diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java index 6b8259fa0f0125ebd81fa0232474014456e35d4a..c32330b76d496cf6232be98a237062ee37f156d4 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java @@ -2,6 +2,7 @@ package at.tuwien.endpoint; import at.tuwien.BaseUnitTest; import at.tuwien.api.database.*; +import at.tuwien.config.H2Utils; import at.tuwien.config.IndexConfig; import at.tuwien.config.ReadyConfig; import at.tuwien.endpoints.DatabaseEndpoint; @@ -11,8 +12,8 @@ import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.exception.*; import at.tuwien.repository.elastic.DatabaseIdxRepository; import at.tuwien.repository.jpa.*; -import at.tuwien.service.MessageQueueService; -import at.tuwien.service.QueryStoreService; +import at.tuwien.service.*; +import at.tuwien.service.impl.MariaDbServiceImpl; import at.tuwien.test.BaseTest; import com.rabbitmq.client.Channel; import lombok.With; @@ -27,6 +28,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException; import org.springframework.security.test.context.support.WithAnonymousUser; import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; @@ -35,8 +37,7 @@ import java.util.Optional; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @Log4j2 @SpringBootTest @@ -59,19 +60,22 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { private MessageQueueService messageQueueService; @MockBean - private DatabaseIdxRepository databaseIdxRepository; + private AccessService accessService; @MockBean - private DatabaseAccessRepository databaseAccessRepository; + private ContainerService containerService; + + @MockBean + private MariaDbServiceImpl databaseService; @MockBean private QueryStoreService queryStoreService; @MockBean - private ContainerRepository containerRepository; + private DatabaseIdxRepository databaseIdxRepository; @MockBean - private DatabaseRepository databaseRepository; + private DatabaseAccessRepository databaseAccessRepository; @MockBean private IdentifierRepository identifierRepository; @@ -113,13 +117,15 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_2_USERNAME, authorities = {"create-database"}) - public void create_hasRoleForeign_fails() { + public void create_hasRoleForeign_fails() throws ContainerNotFoundException { final DatabaseCreateDto request = DatabaseCreateDto.builder() .name(DATABASE_1_NAME) .isPublic(DATABASE_1_PUBLIC) .build(); /* mock */ + when(containerService.find(CONTAINER_1_ID)) + .thenReturn(CONTAINER_1); when(userRepository.findByUsername(USER_2_USERNAME)) .thenReturn(Optional.of(USER_2)); @@ -129,6 +135,43 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { }); } + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"create-database"}) + public void create_succeeds() throws UserNotFoundException, BrokerVirtualHostGrantException, + DatabaseNameExistsException, NotAllowedException, ContainerConnectionException, DatabaseMalformedException, + QueryStoreException, DatabaseConnectionException, QueryMalformedException, DatabaseNotFoundException, + ImageNotSupportedException, AmqpException, BrokerVirtualHostCreationException, ContainerNotFoundException { + final DatabaseCreateDto request = DatabaseCreateDto.builder() + .name(DATABASE_1_NAME) + .isPublic(DATABASE_1_PUBLIC) + .build(); + + /* mock */ + when(userRepository.findByUsername(USER_1_USERNAME)) + .thenReturn(Optional.of(USER_1)); + when(containerService.find(CONTAINER_1_ID)) + .thenReturn(CONTAINER_1); + when(databaseService.create(CONTAINER_1_ID, request, USER_1_PRINCIPAL)) + .thenReturn(DATABASE_1); + doNothing() + .when(messageQueueService) + .createUser(USER_1); + doNothing() + .when(messageQueueService) + .createExchange(DATABASE_1, USER_1_PRINCIPAL); + doNothing() + .when(messageQueueService) + .updatePermissions(USER_1_PRINCIPAL); + doNothing() + .when(queryStoreService) + .create(CONTAINER_1_ID, DATABASE_1_ID, USER_1_PRINCIPAL); + when(databaseAccessRepository.save(any(DatabaseAccess.class))) + .thenReturn(DATABASE_1_USER_1_WRITE_ALL_ACCESS); + + /* test */ + create_generic(CONTAINER_1_ID, CONTAINER_1, DATABASE_1_ID, null, request, USER_1_PRINCIPAL); + } + @Test @WithAnonymousUser public void list_anonymous_succeeds() { @@ -247,7 +290,7 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_2_USERNAME, authorities = {"modify-database-owner"}) - public void transfer_hasRoleForeign_fails() { + public void transfer_hasRoleForeign_fails() throws DatabaseNotFoundException { final DatabaseTransferDto request = DatabaseTransferDto.builder() .username(USER_4_USERNAME) .build(); @@ -255,8 +298,8 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { /* mock */ when(userRepository.findByUsername(USER_2_USERNAME)) .thenReturn(Optional.of(USER_2)); - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.of(DATABASE_1)); + when(databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID)) + .thenReturn(DATABASE_1); /* test */ assertThrows(NotAllowedException.class, () -> { @@ -276,8 +319,8 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { .thenReturn(Optional.of(USER_1)); when(userRepository.findByUsername(USER_4_USERNAME)) .thenReturn(Optional.of(USER_4)); - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.of(DATABASE_1)); + when(databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID)) + .thenReturn(DATABASE_1); /* test */ databaseEndpoint.transfer(CONTAINER_1_ID, DATABASE_1_ID, request, USER_1_PRINCIPAL); @@ -285,7 +328,7 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = {"modify-database-owner"}) - public void transfer_hasRoleUserNotExists_succeeds() { + public void transfer_hasRoleUserNotExists_succeeds() throws DatabaseNotFoundException, UserNotFoundException { final DatabaseTransferDto request = DatabaseTransferDto.builder() .username("foobar") .build(); @@ -293,8 +336,11 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { /* mock */ when(userRepository.findByUsername(USER_1_USERNAME)) .thenReturn(Optional.of(USER_1)); - when(databaseRepository.findById(DATABASE_1_ID)) - .thenReturn(Optional.of(DATABASE_1)); + when(databaseService.findById(CONTAINER_1_ID, DATABASE_1_ID)) + .thenReturn(DATABASE_1); + doThrow(UserNotFoundException.class) + .when(databaseService) + .transfer(CONTAINER_1_ID, DATABASE_1_ID, request); /* test */ assertThrows(UserNotFoundException.class, () -> { @@ -343,6 +389,22 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { findById_generic(CONTAINER_3_ID, CONTAINER_3, DATABASE_3_ID, DATABASE_3, USER_1_PRINCIPAL); } + @Test + @WithMockUser(username = USER_1_USERNAME, authorities = {"find-database"}) + public void findById_ownerSeesAccessRights_succeeds() throws AccessDeniedException, + DatabaseNotFoundException { + + /* mock */ + when(accessService.list(DATABASE_1_ID)) + .thenReturn(List.of(DATABASE_1_USER_1_WRITE_ALL_ACCESS, DATABASE_1_USER_2_READ_ACCESS)); + + /* test */ + final DatabaseDto response = findById_generic(CONTAINER_1_ID, CONTAINER_1, DATABASE_1_ID, DATABASE_1, USER_1_PRINCIPAL); + final List<DatabaseAccessDto> accessList = response.getAccesses(); + assertNotNull(accessList); + assertEquals(2, accessList.size()); + } + @Test @WithAnonymousUser public void delete_anonymous_fails() { @@ -381,12 +443,10 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { public void list_generic(Long containerId, Long databaseId, Container container, List<Database> databases, Principal principal) { /* mock */ - when(containerRepository.findById(containerId)) - .thenReturn(Optional.of(container)); - when(databaseRepository.findAll(containerId)) - .thenReturn(databases); when(identifierRepository.findByDatabaseId(databaseId)) .thenReturn(List.of()); + when(databaseService.findAll(containerId)) + .thenReturn(databases); /* test */ final ResponseEntity<List<DatabaseBriefDto>> response = databaseEndpoint.list(containerId, principal); @@ -403,17 +463,6 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { ImageNotSupportedException, AmqpException, BrokerVirtualHostCreationException, ContainerNotFoundException, BrokerVirtualHostGrantException { /* mock */ - when(containerRepository.findById(containerId)) - .thenReturn(Optional.of(container)); - if (database != null) { - when(databaseRepository.findById(databaseId)) - .thenReturn(Optional.of(database)); - } else { - when(databaseRepository.findById(databaseId)) - .thenReturn(Optional.empty()); - } - when(databaseRepository.save(any(Database.class))) - .thenReturn(database); doNothing() .when(messageQueueService) .createExchange(database, principal); @@ -428,7 +477,7 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { /* test */ final ResponseEntity<DatabaseBriefDto> response = databaseEndpoint.create(containerId, data, principal); - assertEquals(HttpStatus.ACCEPTED, response.getStatusCode()); + assertEquals(HttpStatus.CREATED, response.getStatusCode()); assertNotNull(response.getBody()); } @@ -437,12 +486,16 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { throws NotAllowedException, DatabaseNotFoundException, UserNotFoundException { /* mock */ - when(containerRepository.findById(containerId)) - .thenReturn(Optional.of(container)); - when(databaseRepository.findById(databaseId)) - .thenReturn(Optional.of(database)); - when(databaseRepository.save(any(Database.class))) - .thenReturn(database); + if (database != null) { + when(databaseService.findById(containerId, databaseId)) + .thenReturn(database); + when(databaseService.visibility(containerId, databaseId, data)) + .thenReturn(database); + } else { + doThrow(DatabaseNotFoundException.class) + .when(databaseService) + .findById(containerId, databaseId); + } when(databaseIdxRepository.save(any(DatabaseDto.class))) .thenReturn(dto); @@ -452,29 +505,25 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { assertNotNull(response.getBody()); } - public void findById_generic(Long containerId, Container container, Long databaseId, Database database, - Principal principal) throws DatabaseNotFoundException, AccessDeniedException { + public DatabaseDto findById_generic(Long containerId, Container container, Long databaseId, Database database, + Principal principal) throws DatabaseNotFoundException, AccessDeniedException { /* mock */ - if (container != null) { - when(containerRepository.findById(containerId)) - .thenReturn(Optional.of(container)); - } else { - when(containerRepository.findById(containerId)) - .thenReturn(Optional.empty()); - } if (database != null) { - when(databaseRepository.findById(databaseId)) - .thenReturn(Optional.of(database)); + when(databaseService.findById(containerId, databaseId)) + .thenReturn(database); } else { - when(databaseRepository.findById(databaseId)) - .thenReturn(Optional.empty()); + doThrow(DatabaseNotFoundException.class) + .when(databaseService) + .findById(containerId, databaseId); } /* test */ final ResponseEntity<DatabaseDto> response = databaseEndpoint.findById(containerId, databaseId, principal); assertEquals(HttpStatus.OK, response.getStatusCode()); - assertNotNull(response.getBody()); + final DatabaseDto body = response.getBody(); + assertNotNull(body); + return body; } public void delete_generic(Long containerId, Container container, Long databaseId, Database database, @@ -483,13 +532,13 @@ public class DatabaseEndpointUnitTest extends BaseUnitTest { AmqpException, BrokerVirtualHostCreationException, ContainerNotFoundException, DatabaseMalformedException, BrokerVirtualHostGrantException { /* mock */ - when(containerRepository.findById(containerId)) - .thenReturn(Optional.of(container)); - when(databaseRepository.findById(databaseId)) - .thenReturn(Optional.of(database)); - if (username != null) { - when(databaseRepository.findPublicOrMine(containerId, databaseId, username)) - .thenReturn(Optional.of(database)); + if (database != null) { + when(databaseService.findById(containerId, databaseId)) + .thenReturn(database); + } else { + doThrow(DatabaseNotFoundException.class) + .when(databaseService) + .findById(containerId, databaseId); } /* test */ diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java index 81673c913ae36e187f249a38be432d7ab75c039d..b102cbf8519f3389df6983a4a507faead88c70f9 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java @@ -16,6 +16,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.List; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java index 866ae4ae48e69e2e46fb971aab55150af68f085d..4d920fbbbe30bb091672a3b349f6d9eb0d1886d0 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java @@ -102,6 +102,21 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { brokerServiceGateway.grantPermission(USER_1_USERNAME, VIRTUAL_HOST_EXCHANGE_UPDATE_DTO); } + @Test + public void grantPermission_invalidResponseCode_fails() { + final ResponseEntity<Void> mock = ResponseEntity.status(HttpStatus.UNAUTHORIZED) + .build(); + + /* mock */ + when(restTemplate.exchange(any(URI.class), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + .thenReturn(mock); + + /* test */ + assertThrows(BrokerVirtualHostGrantException.class, () -> { + brokerServiceGateway.grantPermission(USER_1_USERNAME, VIRTUAL_HOST_EXCHANGE_UPDATE_DTO); + }); + } + @Test public void grantPermission_virtualHostNoRightsBefore_succeeds() throws BrokerVirtualHostGrantException { final ResponseEntity<Void> mock = ResponseEntity.status(HttpStatus.CREATED) @@ -128,4 +143,47 @@ public class BrokerServiceGatewayTest extends BaseUnitTest { brokerServiceGateway.grantPermission(USER_1_USERNAME, VIRTUAL_HOST_GRANT_DTO); } + @Test + public void grantPermission_invalidResponseCode2_fails() { + final ResponseEntity<Void> mock = ResponseEntity.status(HttpStatus.ACCEPTED) + .build(); + + /* mock */ + when(restTemplate.exchange(any(URI.class), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + .thenReturn(mock); + + /* test */ + assertThrows(BrokerVirtualHostGrantException.class, () -> { + brokerServiceGateway.grantPermission(USER_1_USERNAME, VIRTUAL_HOST_GRANT_DTO); + }); + } + + @Test + public void createUser_succeeds() throws BrokerVirtualHostCreationException { + final ResponseEntity<Void> mock = ResponseEntity.status(HttpStatus.NO_CONTENT) + .build(); + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + .thenReturn(mock); + + /* test */ + brokerServiceGateway.createUser(USER_1_USERNAME); + } + + @Test + public void createUser_invalidResponseCode_fails() { + final ResponseEntity<Void> mock = ResponseEntity.status(HttpStatus.ACCEPTED) + .build(); + + /* mock */ + when(restTemplate.exchange(anyString(), eq(HttpMethod.PUT), any(HttpEntity.class), eq(Void.class))) + .thenReturn(mock); + + /* test */ + assertThrows(BrokerVirtualHostCreationException.class, () -> { + brokerServiceGateway.createUser(USER_1_USERNAME); + }); + } + } diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java index 5c9a0bbdce047b2f7f7092f3d889d686a806105e..bcb86edb3372d4f70ca65bd13212657b159427c4 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java @@ -71,9 +71,6 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { @Autowired private RealmRepository realmRepository; - @Autowired - private H2Utils h2Utils; - private final static String BIND_WEATHER = new File("../../dbrepo-metadata-db/test/src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; @BeforeAll @@ -93,7 +90,6 @@ public class AccessServiceIntegrationTest extends BaseUnitTest { afterEach(); DockerConfig.createAllNetworks(); /* metadata database */ - h2Utils.runScript("schema.sql"); realmRepository.save(REALM_DBREPO); imageRepository.save(IMAGE_1); userRepository.save(USER_1_SIMPLE); diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java index 1d08e45ee886f353c4c00b64ed199542929a5a5b..a530ea55f1073b9b96d9c96a35168900557259cb 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java @@ -3,6 +3,7 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.api.database.AccessTypeDto; import at.tuwien.api.database.DatabaseModifyAccessDto; +import at.tuwien.config.H2Utils; import at.tuwien.config.IndexConfig; import at.tuwien.config.ReadyConfig; import at.tuwien.entities.database.AccessType; @@ -12,6 +13,7 @@ import at.tuwien.exception.NotAllowedException; import at.tuwien.repository.jpa.*; import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java index f1a930c9f37b4f8181f893e1a49e71c687fb9109..1117c0b9a8f7935e5186113617326c8d5155874f 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java @@ -8,7 +8,6 @@ import at.tuwien.entities.database.Database; import at.tuwien.repository.elastic.DatabaseIdxRepository; import at.tuwien.repository.jpa.ContainerRepository; import at.tuwien.repository.jpa.DatabaseRepository; -import at.tuwien.repository.jpa.ImageRepository; import at.tuwien.repository.jpa.UserRepository; import at.tuwien.service.impl.MariaDbServiceImpl; import com.rabbitmq.client.Channel; @@ -58,9 +57,6 @@ public class DatabaseServiceComponentTest extends BaseUnitTest { @Autowired private MariaDbServiceImpl databaseService; - @Autowired - private H2Utils h2Utils; - private final static String BIND_MUSICOLOGY = new File("../../dbrepo-metadata-db/test/src/test/resources/musicology").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; @BeforeAll @@ -78,8 +74,6 @@ public class DatabaseServiceComponentTest extends BaseUnitTest { @BeforeEach public void beforeEach() { afterEach(); - /* metadata database */ - h2Utils.runScript("schema.sql"); } @AfterEach diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java index 85c0e90563f84b52898d42a6693f46b6ebc45542..dde3a3f802b268d79d5e9b9f3f2a2e3ce9ab085e 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java @@ -3,13 +3,15 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; import at.tuwien.api.database.DatabaseCreateDto; import at.tuwien.api.database.DatabaseDto; +import at.tuwien.api.database.DatabaseModifyVisibilityDto; +import at.tuwien.api.database.DatabaseTransferDto; import at.tuwien.config.DockerConfig; import at.tuwien.config.IndexConfig; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.ReadyConfig; import at.tuwien.entities.database.Database; import at.tuwien.entities.user.User; -import at.tuwien.exception.QueryMalformedException; +import at.tuwien.exception.*; import at.tuwien.repository.elastic.DatabaseIdxRepository; import at.tuwien.repository.jpa.*; import at.tuwien.service.impl.MariaDbServiceImpl; @@ -73,8 +75,8 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { @Autowired private MariaDbConfig mariaDbConfig; + private final static String BIND_WEATHER = new File("../../dbrepo-metadata-db/test/src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; private final static String BIND_ZOO = new File("../../dbrepo-metadata-db/test/src/test/resources/zoo").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; - private final static String BIND_MUSICOLOGY = new File("../../dbrepo-metadata-db/test/src/test/resources/musicology").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; @BeforeAll @@ -96,9 +98,9 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { /* metadata database */ imageRepository.save(IMAGE_1); realmRepository.save(REALM_DBREPO); - userRepository.save(USER_1_SIMPLE); - userRepository.save(USER_2_SIMPLE); - userRepository.save(USER_3_SIMPLE); + userRepository.save(USER_1); + userRepository.save(USER_2); + userRepository.save(USER_3); } @AfterEach @@ -257,6 +259,51 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest { generic_user_insert("junit1", "junit1"); } + @Test + public void delete_succeeds() throws InterruptedException, QueryMalformedException, UserNotFoundException, + DatabaseConnectionException, DatabaseNotFoundException, ImageNotSupportedException, + ContainerNotFoundException, DatabaseMalformedException { + + /* mock */ + DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1_SIMPLE, CONTAINER_1_ENV); + DockerConfig.startContainer(CONTAINER_1_SIMPLE); + containerRepository.save(CONTAINER_1); + databaseRepository.save(DATABASE_1); + + /* test */ + databaseService.delete(CONTAINER_1_ID, DATABASE_1_ID, USER_1_PRINCIPAL); + } + + @Test + public void visibility_succeeds() throws DatabaseNotFoundException { + final DatabaseModifyVisibilityDto request = DatabaseModifyVisibilityDto.builder() + .isPublic(true) + .build(); + + /* mock */ + containerRepository.save(CONTAINER_1_SIMPLE); + databaseRepository.save(DATABASE_1); + + /* test */ + final Database response = databaseService.visibility(CONTAINER_1_ID, DATABASE_1_ID, request); + assertTrue(response.getIsPublic()); + } + + @Test + public void transfer_succeeds() throws DatabaseNotFoundException, UserNotFoundException { + final DatabaseTransferDto request = DatabaseTransferDto.builder() + .username(USER_2_USERNAME) + .build(); + + /* mock */ + containerRepository.save(CONTAINER_1_SIMPLE); + databaseRepository.save(DATABASE_1); + + /* test */ + final Database response = databaseService.transfer(CONTAINER_1_ID, DATABASE_1_ID, request); + assertEquals(USER_2_ID, response.getOwnedBy()); + } + /* ################################################################################################### */ /* ## GENERIC TEST CASES ## */ /* ################################################################################################### */ diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..d442fccb1bcfc13ad97ae50b8e48a699be9f4ca8 --- /dev/null +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java @@ -0,0 +1,98 @@ +package at.tuwien.service; + +import at.tuwien.BaseUnitTest; +import at.tuwien.config.DockerConfig; +import at.tuwien.config.IndexConfig; +import at.tuwien.config.ReadyConfig; +import at.tuwien.entities.identifier.Identifier; +import at.tuwien.entities.identifier.IdentifierType; +import at.tuwien.exception.AmqpException; +import at.tuwien.exception.IdentifierNotFoundException; +import at.tuwien.gateway.BrokerServiceGateway; +import at.tuwien.repository.jpa.*; +import at.tuwien.service.impl.RabbitMqServiceImpl; +import at.tuwien.utils.AmqpUtils; +import com.rabbitmq.client.Channel; +import lombok.extern.log4j.Log4j2; +import org.apache.http.auth.BasicUserPrincipal; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.security.Principal; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; + +@Log4j2 +@SpringBootTest +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +@ExtendWith(SpringExtension.class) +public class IdentifierServiceIntegrationTest extends BaseUnitTest { + + @MockBean + private ReadyConfig readyConfig; + + @MockBean + private IndexConfig indexConfig; + + @MockBean + private Channel channel; + + @Autowired + private RealmRepository realmRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private ContainerRepository containerRepository; + + @Autowired + private ImageRepository imageRepository; + + @Autowired + private DatabaseRepository databaseRepository; + + @Autowired + private IdentifierRepository identifierRepository; + + @Autowired + private IdentifierService identifierService; + + @BeforeEach + public void beforeEach() { + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1); + imageRepository.save(IMAGE_1); + containerRepository.save(CONTAINER_1_SIMPLE); + databaseRepository.save(DATABASE_1_SIMPLE); + identifierRepository.save(IDENTIFIER_1); + } + + @Test + public void findAll_succeeds() { + + /* test */ + final List<Identifier> response = identifierService.findAll(DATABASE_1_ID); + assertEquals(1, response.size()); + } + + @Test + public void find_notFound_fails() { + + /* test */ + final List<Identifier> response = identifierService.findAll(DATABASE_2_ID); + assertEquals(0, response.size()); + } + + +} diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..98ae89f24169005a2e0caa5cd9035351365b9d7b --- /dev/null +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java @@ -0,0 +1,76 @@ +package at.tuwien.service; + +import at.tuwien.BaseUnitTest; +import at.tuwien.config.IndexConfig; +import at.tuwien.config.ReadyConfig; +import at.tuwien.entities.database.License; +import at.tuwien.entities.identifier.Identifier; +import at.tuwien.exception.LicenseNotFoundException; +import at.tuwien.repository.jpa.*; +import com.rabbitmq.client.Channel; +import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@Log4j2 +@SpringBootTest +@ExtendWith(SpringExtension.class) +public class LicenseServiceIntegrationTest extends BaseUnitTest { + + @MockBean + private ReadyConfig readyConfig; + + @MockBean + private IndexConfig indexConfig; + + @MockBean + private Channel channel; + + @Autowired + private LicenseRepository licenseRepository; + + @Autowired + private LicenseService licenseService; + + @BeforeEach + public void beforeEach() { + licenseRepository.save(LICENSE_1); + } + + @Test + public void findAll_succeeds() { + + /* test */ + final List<License> response = licenseService.findAll(); + assertEquals(1, response.size()); + } + + @Test + public void find_succeeds() throws LicenseNotFoundException { + + /* test */ + final License response = licenseService.find(LICENSE_1_IDENTIFIER); + assertEquals(LICENSE_1_IDENTIFIER, response.getIdentifier()); + } + + @Test + public void find_fails() { + + /* test */ + assertThrows(LicenseNotFoundException.class, () -> { + licenseService.find("CC0"); + }); + } + +} diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java similarity index 75% rename from dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java rename to dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java index 5912c4ea9d8371a511ba7a0daa287ad309bbae86..17e63a0882420e21a3f84ce24b0f3e0851adaff6 100644 --- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AmqpServiceIntegrationTest.java +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java @@ -5,6 +5,8 @@ import at.tuwien.config.DockerConfig; import at.tuwien.config.IndexConfig; import at.tuwien.config.ReadyConfig; import at.tuwien.exception.AmqpException; +import at.tuwien.exception.BrokerVirtualHostCreationException; +import at.tuwien.exception.BrokerVirtualHostGrantException; import at.tuwien.gateway.BrokerServiceGateway; import at.tuwien.repository.jpa.DatabaseRepository; import at.tuwien.service.impl.RabbitMqServiceImpl; @@ -24,14 +26,13 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.when; @Log4j2 @SpringBootTest @ExtendWith(SpringExtension.class) -public class AmqpServiceIntegrationTest extends BaseUnitTest { +public class MessageQueueServiceIntegrationTest extends BaseUnitTest { @MockBean private ReadyConfig readyConfig; @@ -49,7 +50,7 @@ public class AmqpServiceIntegrationTest extends BaseUnitTest { private Channel channel; @Autowired - private RabbitMqServiceImpl amqpService; + private RabbitMqServiceImpl messageQueueService; @Autowired private AmqpUtils amqpUtils; @@ -71,10 +72,9 @@ public class AmqpServiceIntegrationTest extends BaseUnitTest { @Test public void createExchange_succeeds() throws AmqpException { - final Principal principal = new BasicUserPrincipal(USER_1_USERNAME); /* test */ - amqpService.createExchange(DATABASE_1, principal); + messageQueueService.createExchange(DATABASE_1, USER_1_PRINCIPAL); assertTrue(amqpUtils.exchangeExists(DATABASE_1_EXCHANGE)); } @@ -82,10 +82,24 @@ public class AmqpServiceIntegrationTest extends BaseUnitTest { public void deleteExchange_succeeds() throws AmqpException { /* test */ - amqpService.deleteExchange(DATABASE_1); + messageQueueService.deleteExchange(DATABASE_1); assertFalse(amqpUtils.exchangeExists(DATABASE_1_EXCHANGE)); } + @Test + public void createUser_succeeds() throws BrokerVirtualHostCreationException { + + /* test */ + messageQueueService.createUser(USER_1); + } + + @Test + public void updatePermissions_succeeds() throws BrokerVirtualHostGrantException { + + /* test */ + messageQueueService.updatePermissions(USER_1_PRINCIPAL); + } + @Test public void init_succeeds() throws AmqpException { @@ -95,7 +109,7 @@ public class AmqpServiceIntegrationTest extends BaseUnitTest { /* test */ assertFalse(amqpUtils.exchangeExists(DATABASE_1_EXCHANGE)); - amqpService.init(); + messageQueueService.init(); assertTrue(amqpUtils.exchangeExists(DATABASE_1_EXCHANGE)); } diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b01dcfbd68b57d4ee5271443a86633303b15f9a0 --- /dev/null +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java @@ -0,0 +1,82 @@ +package at.tuwien.service; + +import at.tuwien.BaseUnitTest; +import at.tuwien.config.DockerConfig; +import at.tuwien.config.IndexConfig; +import at.tuwien.config.ReadyConfig; +import at.tuwien.exception.AmqpException; +import at.tuwien.gateway.BrokerServiceGateway; +import at.tuwien.repository.jpa.DatabaseRepository; +import at.tuwien.service.impl.RabbitMqServiceImpl; +import at.tuwien.utils.AmqpUtils; +import com.rabbitmq.client.BuiltinExchangeType; +import com.rabbitmq.client.Channel; +import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.io.IOException; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.when; + +@Log4j2 +@SpringBootTest +@ExtendWith(SpringExtension.class) +public class MessageQueueServiceUnitTest extends BaseUnitTest { + + @MockBean + private ReadyConfig readyConfig; + + @MockBean + private IndexConfig indexConfig; + + @MockBean + private DatabaseRepository databaseRepository; + + @MockBean + private BrokerServiceGateway brokerServiceGateway; + + @MockBean + private Channel channel; + + @Autowired + private RabbitMqServiceImpl messageQueueService; + + @Test + public void createExchange_fails() throws IOException { + + /* mock */ + doThrow(IOException.class) + .when(channel) + .exchangeDeclare(DATABASE_1_EXCHANGE, BuiltinExchangeType.DIRECT, true); + + /* test */ + assertThrows(AmqpException.class, () -> { + messageQueueService.createExchange(DATABASE_1, USER_1_PRINCIPAL); + }); + } + + @Test + public void deleteExchange_fails() throws IOException { + + /* mock */ + doThrow(IOException.class) + .when(channel) + .exchangeDelete(DATABASE_1_EXCHANGE); + + /* test */ + assertThrows(AmqpException.class, () -> { + messageQueueService.deleteExchange(DATABASE_1); + }); + } + +} diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e52110c7ff7cca2c40b13b091c7d0f4bb8359be1 --- /dev/null +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java @@ -0,0 +1,114 @@ +package at.tuwien.service; + +import at.tuwien.BaseUnitTest; +import at.tuwien.config.DockerConfig; +import at.tuwien.config.IndexConfig; +import at.tuwien.config.ReadyConfig; +import at.tuwien.entities.user.User; +import at.tuwien.exception.*; +import at.tuwien.mapper.DatabaseMapper; +import at.tuwien.repository.jpa.*; +import at.tuwien.service.impl.HibernateConnector; +import at.tuwien.service.impl.QueryStoreServiceImpl; +import com.mchange.v2.c3p0.ComboPooledDataSource; +import com.rabbitmq.client.Channel; +import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.io.File; +import java.sql.Connection; +import java.sql.SQLException; + +@Log4j2 +@SpringBootTest +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +@ExtendWith(SpringExtension.class) +public class QueryStoreServiceIntegrationTest extends BaseUnitTest { + + @MockBean + private ReadyConfig readyConfig; + + @MockBean + private IndexConfig indexConfig; + + @MockBean + private Channel channel; + + @Autowired + private RealmRepository realmRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private ContainerRepository containerRepository; + + @Autowired + private ImageRepository imageRepository; + + @Autowired + private DatabaseRepository databaseRepository; + + @Autowired + private QueryStoreServiceImpl queryStoreService; + + @Autowired + private DatabaseMapper databaseMapper; + + private final static String BIND_WEATHER = new File("../../dbrepo-metadata-db/test/src/test/resources/weather").toPath().toAbsolutePath() + ":/docker-entrypoint-initdb.d"; + + @BeforeEach + public void beforeEach() { + afterEach(); + /* create network */ + DockerConfig.createAllNetworks(); + /* metadata database */ + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1); + imageRepository.save(IMAGE_1); + containerRepository.save(CONTAINER_1_SIMPLE); + databaseRepository.save(DATABASE_1_SIMPLE); + } + + @AfterEach + public void afterEach() { + DockerConfig.removeAllContainers(); + DockerConfig.removeAllNetworks(); + } + + @Test + public void create_succeeds() throws UserNotFoundException, QueryStoreException, DatabaseConnectionException, + DatabaseNotFoundException, DatabaseMalformedException, InterruptedException { + + /* mock */ + DockerConfig.createContainer(null, CONTAINER_1, CONTAINER_1_ENV); + DockerConfig.startContainer(CONTAINER_1); + + /* test */ + queryStoreService.create(CONTAINER_1_ID, DATABASE_1_ID, USER_1_PRINCIPAL); + } + + @Test + public void executeQuery_succeeds() throws SQLException, InterruptedException { + final User root = databaseMapper.containerToPrivilegedUser(CONTAINER_1); + final ComboPooledDataSource dataSource = HibernateConnector.getDataSource(CONTAINER_1_IMAGE, CONTAINER_1, DATABASE_1, root); + + /* mock */ + DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1, CONTAINER_1_ENV); + DockerConfig.startContainer(CONTAINER_1); + + /* test */ + try { + final Connection connection = dataSource.getConnection(); + queryStoreService.executeQuery(connection, "UPDATE weather_location SET lat=48.2049358, lng=16.3769348 WHERE location = ?", "Vienna"); + } finally { + dataSource.close(); + } + } +} diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6c4c0d0b74bc6b2d2b414adfe87accd87f2c93b4 --- /dev/null +++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java @@ -0,0 +1,92 @@ +package at.tuwien.service; + +import at.tuwien.BaseUnitTest; +import at.tuwien.config.IndexConfig; +import at.tuwien.config.ReadyConfig; +import at.tuwien.entities.database.License; +import at.tuwien.entities.user.User; +import at.tuwien.exception.LicenseNotFoundException; +import at.tuwien.exception.UserNotFoundException; +import at.tuwien.repository.jpa.LicenseRepository; +import at.tuwien.repository.jpa.RealmRepository; +import at.tuwien.repository.jpa.UserRepository; +import com.rabbitmq.client.Channel; +import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.List; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@Log4j2 +@SpringBootTest +@ExtendWith(SpringExtension.class) +public class UserServiceIntegrationTest extends BaseUnitTest { + + @MockBean + private ReadyConfig readyConfig; + + @MockBean + private IndexConfig indexConfig; + + @MockBean + private Channel channel; + + @Autowired + private RealmRepository realmRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserService userService; + + @BeforeEach + public void beforeEach() { + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1); + } + + @Test + public void findByUsername_succeeds() throws UserNotFoundException { + + /* test */ + final User response = userService.findByUsername(USER_1_USERNAME); + assertEquals(USER_1_ID, response.getId()); + } + + @Test + public void findByUsername_fails() { + + /* test */ + assertThrows(UserNotFoundException.class, () -> { + userService.findByUsername("notexisting"); + }); + } + + @Test + public void find_succeeds() throws UserNotFoundException { + + /* test */ + final User response = userService.find(USER_1_ID); + assertEquals(USER_1_ID, response.getId()); + } + + @Test + public void find_fails() { + + /* test */ + assertThrows(UserNotFoundException.class, () -> { + userService.find(UUID.fromString("deadbeef-20bc-4191-acb2-77a3afcae32f")); + }); + } + +} diff --git a/dbrepo-database-service/rest-service/src/test/resources/application.properties b/dbrepo-database-service/rest-service/src/test/resources/application.properties index 39754c60cf9c42418990f0aaaf318fc5bf16c4a8..2387763b3a8016a0151a2b563694b1608c50b8b8 100644 --- a/dbrepo-database-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-database-service/rest-service/src/test/resources/application.properties @@ -9,7 +9,8 @@ spring.cloud.config.discovery.enabled=false spring.cloud.config.enabled=false # disable datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA +# spring 6 fix https://github.com/h2database/h2database/issues/3363 +spring.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=VALUE,KEY;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password @@ -24,6 +25,7 @@ logging.level.at.tuwien.=trace # rabbitmq fda.gateway.endpoint=http://dbrepo-broker-service:15672 spring.rabbitmq.host=dbrepo-broker-service +spring.rabbitmq.virtual-host=/ spring.rabbitmq.username=guest spring.rabbitmq.password=guest diff --git a/dbrepo-database-service/rest-service/src/test/resources/schema.sql b/dbrepo-database-service/rest-service/src/test/resources/schema.sql deleted file mode 100644 index 906d8df808fa8f79c1f7c1c26088c55da6c9ee9b..0000000000000000000000000000000000000000 --- a/dbrepo-database-service/rest-service/src/test/resources/schema.sql +++ /dev/null @@ -1,25 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS `fda`; -SET SCHEMA `fda`; -DROP TABLE IF EXISTS fda.mdb_concepts; -CREATE TABLE IF NOT EXISTS fda.mdb_concepts -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); -DROP TABLE IF EXISTS fda.mdb_units; -CREATE TABLE IF NOT EXISTS fda.mdb_units -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); --- Modified for H2 --- Assume id=1 is invalid --- Assume id=2 is still valid token --- CREATE VIEW IF NOT EXISTS fda.mdb_invalid_tokens AS --- (SELECT `id`, `token_hash`, `creator`, `created`, `expires`, `last_used` FROM fda.`mdb_tokens` WHERE `id` = 1); \ No newline at end of file diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-database-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java index b2b01c42ee9868215962426b18b3a70450bff7ac..92b60f4f8a5ed8a566e2504d71b63478b1593f68 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java @@ -6,6 +6,10 @@ import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -16,10 +20,6 @@ import org.springframework.security.web.authentication.WebAuthenticationDetailsS import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/AmqpConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/AmqpConfig.java index c2a27f37f7f6aa79c91d7a3e275d1e0c2f44b433..1c493eb9ddc3a2d5e40ab5e44d5857ead3305ee5 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/AmqpConfig.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/config/AmqpConfig.java @@ -18,6 +18,9 @@ public class AmqpConfig { @Value("${spring.rabbitmq.host}") private String ampqHost; + @Value("${spring.rabbitmq.virtual-host}") + private String virtualHost; + @Value("${spring.rabbitmq.username}") private String ampqUsername; @@ -28,6 +31,7 @@ public class AmqpConfig { public Channel getChannel() throws IOException, TimeoutException { final ConnectionFactory factory = new ConnectionFactory(); factory.setHost(ampqHost); + factory.setVirtualHost(virtualHost); factory.setUsername(ampqUsername); factory.setPassword(ampqPassword); final Connection connection = factory.newConnection(); diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java index dd42aa517fb5bda732d39a5660918bbe61cfc6ce..58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java @@ -1,42 +1,45 @@ package at.tuwien.config; +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.json.jackson.JacksonJsonpMapper; +import co.elastic.clients.transport.ElasticsearchTransport; +import co.elastic.clients.transport.rest_client.RestClientTransport; import lombok.extern.log4j.Log4j2; -import org.elasticsearch.client.RestHighLevelClient; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.elasticsearch.client.RestClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.elasticsearch.client.ClientConfiguration; -import org.springframework.data.elasticsearch.client.RestClients; -import org.springframework.data.elasticsearch.core.ElasticsearchOperations; -import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; @Log4j2 @Configuration public class ElasticsearchConfig { - @Value("${fda.elastic.endpoint}") + @Value("${spring.elasticsearch.uris}") private String elasticEndpoint; - @Value("${fda.elastic.username}") + @Value("${spring.elasticsearch.username}") private String elasticUsername; - @Value("${fda.elastic.password}") + @Value("${spring.elasticsearch.password}") private String elasticPassword; @Bean - public RestHighLevelClient client() { + public ElasticsearchClient elasticsearchClient() { log.debug("elastic endpoint={}", elasticEndpoint); - final ClientConfiguration clientConfiguration = ClientConfiguration.builder() - .connectedTo(elasticEndpoint) - .withBasicAuth(elasticUsername, elasticPassword) + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword)); + final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint)) + .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder + .setDefaultCredentialsProvider(credentialsProvider)) .build(); - return RestClients.create(clientConfiguration) - .rest(); - } - - @Bean - public ElasticsearchOperations elasticsearchTemplate() { - return new ElasticsearchRestTemplate(client()); + ElasticsearchTransport transport = new RestClientTransport( + restClient, new JacksonJsonpMapper()); + return new ElasticsearchClient(transport); } } \ No newline at end of file diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/JacksonConfig.java index fba7f99cf2bf1cbb12ac51cd6fd5b80751ff43c1..c4944a469174ad1962d5c54cc483400dbee12f1d 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/config/JacksonConfig.java @@ -19,7 +19,6 @@ public class JacksonConfig { @Bean public ObjectMapper objectMapper() throws JsonProcessingException { final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); objectMapper.registerModule(new Jdk8Module()); objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java index afff7f2dada93e811b56959c1eca37e92fe08546..7ee0e81e221d269441eb653f86b2cbfba4954552 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java @@ -9,14 +9,16 @@ import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.util.matcher.OrRequestMatcher; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; @Configuration @EnableWebSecurity @@ -27,15 +29,25 @@ import javax.servlet.http.HttpServletResponse; bearerFormat = "JWT", scheme = "bearer" ) -public class WebSecurityConfig extends WebSecurityConfigurerAdapter { +public class WebSecurityConfig { @Bean public AuthTokenFilter authTokenFilter() { return new AuthTokenFilter(); } - @Override - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + final OrRequestMatcher internalEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/actuator/prometheus/**", "GET") + ); + final OrRequestMatcher publicEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/api/container/**/database/**", "GET"), + new AntPathRequestMatcher("/v3/api-docs.yaml"), + new AntPathRequestMatcher("/v3/api-docs/**"), + new AntPathRequestMatcher("/swagger-ui/**"), + new AntPathRequestMatcher("/swagger-ui.html") + ); /* enable CORS and disable CSRF */ http = http.cors().and().csrf().disable(); /* set session management to stateless */ @@ -54,21 +66,18 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { } ).and(); /* set permissions on endpoints */ - http.authorizeRequests() + http.authorizeHttpRequests() /* our internal endpoints */ - .antMatchers(HttpMethod.GET, "/actuator/prometheus/**").permitAll() + .requestMatchers(internalEndpoints).permitAll() /* our public endpoints */ - .antMatchers(HttpMethod.GET, "/api/container/**/database/**").permitAll() - .antMatchers("/v3/api-docs.yaml", - "/v3/api-docs/**", - "/swagger-ui/**", - "/swagger-ui.html").permitAll() + .requestMatchers(publicEndpoints).permitAll() /* our private endpoints */ .anyRequest().authenticated(); /* add JWT token filter */ http.addFilterBefore(authTokenFilter(), UsernamePasswordAuthenticationFilter.class ); + return http.build(); } @Bean @@ -76,7 +85,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); - config.addAllowedOrigin("*"); + config.addAllowedOriginPattern("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java index 49f89002d7702da8cd3a6af6735a0751ea6f7181..f161f6c3ea2e33f2a50953a7868033464d226902 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java @@ -45,7 +45,7 @@ public class BrokerServiceGatewayImpl implements BrokerServiceGateway { @Override public void grantPermission(String username, ExchangeUpdatePermissionsDto data) throws BrokerVirtualHostGrantException { - final URI grantUri = URI.create(gatewayConfig.getGatewayEndpoint() + "/api/broker/topic-permissions/%2F/" + username); + final URI grantUri = URI.create(gatewayConfig.getGatewayEndpoint() + "/api/broker/topic-permissions/dbrepo/" + username); final ResponseEntity<Void> response = restTemplate.exchange(grantUri, HttpMethod.PUT, new HttpEntity<>(data), Void.class); if (!response.getStatusCode().equals(HttpStatus.CREATED) && !response.getStatusCode().equals(HttpStatus.NO_CONTENT)) { @@ -73,7 +73,7 @@ public class BrokerServiceGatewayImpl implements BrokerServiceGateway { @Override public void grantPermission(String username, GrantVirtualHostPermissionsDto data) throws BrokerVirtualHostGrantException { - final URI grantUri = URI.create(gatewayConfig.getGatewayEndpoint() + "/api/broker/permissions/%2F/" + username); + final URI grantUri = URI.create(gatewayConfig.getGatewayEndpoint() + "/api/broker/permissions/dbrepo/" + username); final ResponseEntity<Void> response = restTemplate.exchange(grantUri, HttpMethod.PUT, new HttpEntity<>(data), Void.class); if (!response.getStatusCode().equals(HttpStatus.CREATED) && !response.getStatusCode().equals(HttpStatus.NO_CONTENT)) { diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java index 6b5efff253ed7d4ec815edbdc3ed8de6d7360746..e10324b97ac79ec7c69e15cf0b401fde75a36a7c 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/DatabaseService.java @@ -5,10 +5,12 @@ import at.tuwien.api.database.DatabaseModifyVisibilityDto; import at.tuwien.api.database.DatabaseTransferDto; import at.tuwien.entities.database.Database; import at.tuwien.exception.*; +import org.springframework.stereotype.Service; import java.security.Principal; import java.util.List; +@Service public interface DatabaseService { /** diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/IdentifierService.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/IdentifierService.java index a60abddb2bf996f01c0aaf0b6ebe99e774775080..2059be0057c18c93df7843c7956ef3ff77abcffc 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/IdentifierService.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/IdentifierService.java @@ -9,7 +9,12 @@ import java.util.List; @Service public interface IdentifierService { - List<Identifier> findAll(Long databaseId); - Identifier find(Long databaseId, IdentifierType type) throws IdentifierNotFoundException; + /** + * Finds all identifiers in the metadata database for a database with given id. + * + * @param databaseId The database id. + * @return The list of identifiers. + */ + List<Identifier> findAll(Long databaseId); } diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/MessageQueueService.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/MessageQueueService.java index 16dcd2a550ec06aaf66a6960107be2caa71622d0..fb1a90439bbb54abea38161a90c3d26938e425ca 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/MessageQueueService.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/MessageQueueService.java @@ -4,7 +4,7 @@ import at.tuwien.entities.database.Database; import at.tuwien.entities.user.User; import at.tuwien.exception.*; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import java.security.Principal; public interface MessageQueueService { diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/QueryStoreService.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/QueryStoreService.java index 4762de2c2443bf90bb5df04c3db4fc2e9b323899..308ebfed90037615d126f118d6f0c80c4595da12 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/QueryStoreService.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/QueryStoreService.java @@ -6,5 +6,17 @@ import java.security.Principal; public interface QueryStoreService { + /** + * Creates the query store in the database with given container id. + * + * @param containerId The container id. + * @param databaseId The database id. + * @param principal The principal of the user. + * @throws DatabaseNotFoundException + * @throws DatabaseConnectionException + * @throws DatabaseMalformedException + * @throws UserNotFoundException + * @throws QueryStoreException + */ void create(Long containerId, Long databaseId, Principal principal) throws DatabaseNotFoundException, DatabaseConnectionException, DatabaseMalformedException, UserNotFoundException, QueryStoreException; } diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java index 39532d846313238c616c801c97aea666959ee4aa..b5629aa17ab6d341161598ce1fb02ec7285fcc36 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java @@ -12,11 +12,11 @@ import org.springframework.stereotype.Service; @Service public abstract class HibernateConnector { - protected static ComboPooledDataSource getDataSource(ContainerImage image, Container container, User user) { + public static ComboPooledDataSource getDataSource(ContainerImage image, Container container, User user) { return getDataSource(image, container, null, user); } - protected static ComboPooledDataSource getDataSource(ContainerImage image, Container container, Database database, + public static ComboPooledDataSource getDataSource(ContainerImage image, Container container, Database database, User user) { final ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setJdbcUrl(url(image, container, database)); diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java index 988e18fb8ccf2c55159d3c9cd3a4bb1ed34ce36d..687a630b49e1359158528685a0cae8e691b2fc5d 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java @@ -28,13 +28,4 @@ public class IdentifierServiceImpl implements IdentifierService { return identifierRepository.findByDatabaseId(databaseId); } - @Override - public Identifier find(Long databaseId, IdentifierType type) throws IdentifierNotFoundException { - final Optional<Identifier> optional = identifierRepository.findByDatabaseIdAndType(databaseId, type); - if (optional.isEmpty()) { - throw new IdentifierNotFoundException("Failed to find identifier"); - } - return optional.get(); - } - } diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java index 69b821408c10d2cf1fe200ed8ca42805ce11fba5..3723ccaae88b0ad247a4be97e018962c48ae918e 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java @@ -65,8 +65,8 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe database = databaseRepository.findPublicOrMine(containerId, databaseId, principal.getName()); } if (database.isEmpty()) { - log.error("Failed to find database"); - throw new DatabaseNotFoundException("Failed to find database"); + log.error("Failed to find database with id {}", databaseId); + throw new DatabaseNotFoundException("Failed to find database with id "+ databaseId); } return database.get(); } @@ -77,7 +77,7 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe final Optional<Database> database = databaseRepository.findById(databaseId); if (database.isEmpty()) { log.error("Failed to find database with id {}", databaseId); - throw new DatabaseNotFoundException("could not find database with this id"); + throw new DatabaseNotFoundException("could not find database with id " + databaseId); } return database.get(); } @@ -180,6 +180,7 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe } @Override + @Transactional public Database transfer(Long containerId, Long databaseId, DatabaseTransferDto transferDto) throws DatabaseNotFoundException, UserNotFoundException { /* check */ diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java index d0d8d1e78d110a289ab6173d9b229b9cb4c9b9ef..838efb1d95e1f553ab84de8dd970806adffb0a5c 100644 --- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java +++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/QueryStoreServiceImpl.java @@ -11,6 +11,7 @@ import com.mchange.v2.c3p0.ComboPooledDataSource; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.security.Principal; @@ -32,6 +33,7 @@ public class QueryStoreServiceImpl extends HibernateConnector implements QuerySt } @Override + @Transactional(rollbackFor = DatabaseMalformedException.class) public void create(Long containerId, Long databaseId, Principal principal) throws DatabaseNotFoundException, DatabaseConnectionException, DatabaseMalformedException, UserNotFoundException, QueryStoreException { final Database database = databaseService.findById(containerId, databaseId); @@ -56,12 +58,12 @@ public class QueryStoreServiceImpl extends HibernateConnector implements QuerySt log.trace("created query store in database {}", database); } - private void executeQuery(Connection connection, String statement, String... data) throws SQLException { + public void executeQuery(Connection connection, String statement, String... data) throws SQLException { log.debug("execute query, statement={}", statement); final PreparedStatement pstmt = connection.prepareStatement(statement); if (data.length > 0) { for (int i = 0; i < data.length; i++) { - pstmt.setString(i, data[i]); + pstmt.setString(i + 1, data[i]); } } pstmt.executeUpdate(); diff --git a/dbrepo-discovery-service/.gitignore b/dbrepo-discovery-service/.gitignore deleted file mode 100644 index b60573d098237e09a5c4eabeae2ccda891966c09..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -## Generated -rest-service/ready - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-discovery-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-discovery-service/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba269cd38f8965cef786729790945d9537..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/dbrepo-discovery-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-discovery-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/dbrepo-discovery-service/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/dbrepo-discovery-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-discovery-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-discovery-service/Dockerfile b/dbrepo-discovery-service/Dockerfile deleted file mode 100644 index b216c09e0936a2af0b4f12f097a99723ab65bc7f..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### SECOND STAGE ###### -FROM maven:slim as build - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./rest-service ./rest-service -COPY ./services ./services -COPY ./report ./report - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -###### THIRD STAGE ###### -FROM openjdk:11-jre-slim as runtime - -ENV METADATA_DB=fda -ENV METADATA_USERNAME=postgres -ENV METADATA_PASSWORD=postgres -ENV LOG_LEVEL=debug - -COPY ./service_ready /usr/bin -RUN chmod +x /usr/bin/service_ready - -HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD service_ready - -COPY --from=build ./rest-service/target/rest-service-*.jar ./rest-service.jar - -EXPOSE 9090 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./rest-service.jar"] diff --git a/dbrepo-discovery-service/mvnw b/dbrepo-discovery-service/mvnw deleted file mode 100755 index dea2123dccdfdb51caebcfe8e5964494fdeb2a89..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-at.tuwien.gateway.config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-discovery-service/mvnw.cmd b/dbrepo-discovery-service/mvnw.cmd deleted file mode 100644 index 4a6729c8ab8f9413d3e6956fdef16f3621367758..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.at.tuwien.gateway.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.at.tuwien.gateway.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/dbrepo-discovery-service/pom.xml b/dbrepo-discovery-service/pom.xml deleted file mode 100644 index c7b10ef2f4cda0937bdd5737f8d38d6ab477267d..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/pom.xml +++ /dev/null @@ -1,131 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>2.3.10.RELEASE</version> - </parent> - - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-discovery-service</artifactId> - <version>1.2.0</version> - <name>dbrepo-discovery-service</name> - <description>Demo project for Spring Boot</description> - - <packaging>pom</packaging> - <modules> - <module>report</module> - <module>rest-service</module> - <module>services</module> - </modules> - - <properties> - <java.version>11</java.version> - <spring-cloud.version>3.0.1</spring-cloud.version> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-web</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-bootstrap</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> - <version>${spring-cloud.version}</version> - </dependency> - <!-- Data Source --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>${mariadb.version}</version> - </dependency> - <!-- Monitoring --> - <dependency> - <groupId>io.micrometer</groupId> - <artifactId>micrometer-registry-prometheus</artifactId> - <scope>runtime</scope> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/utils/**/*</exclude> - <exclude>at/tuwien/seeder/**/*</exclude> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>**/DbrepoDiscoveryServiceApplication.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-discovery-service/report/pom.xml b/dbrepo-discovery-service/report/pom.xml deleted file mode 100644 index e5f5fcaad75a161a5c72d3df824ad95fa797e0fd..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/report/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-discovery-service</artifactId> - <version>1.2.0</version> - </parent> - - <artifactId>report</artifactId> - <version>1.2.0</version> - <name>dbrepo-discovery-service-report</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-discovery-service/rest-service/pom.xml b/dbrepo-discovery-service/rest-service/pom.xml deleted file mode 100644 index 453330597b6bee2a57cbd803fadf4f5f58a99557..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-discovery-service</artifactId> - <version>1.2.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.2.0</version> - <name>dbrepo-discovery-service-discovery</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>services</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - -</project> \ No newline at end of file diff --git a/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/DbrepoDiscoveryServiceApplication.java b/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/DbrepoDiscoveryServiceApplication.java deleted file mode 100644 index 6561edd18f7cefbf79d75824a8a16a887f147ca4..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/DbrepoDiscoveryServiceApplication.java +++ /dev/null @@ -1,15 +0,0 @@ -package at.tuwien; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; - -@SpringBootApplication -@EnableEurekaServer -public class DbrepoDiscoveryServiceApplication { - - public static void main(String[] args) { - SpringApplication.run(DbrepoDiscoveryServiceApplication.class, args); - } - -} diff --git a/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index cb0c9ffc9ee477fe22ec4a9ceb75d804285efe6f..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -package at.tuwien.config; - -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.client.support.BasicAuthenticationInterceptor; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.DefaultUriBuilderFactory; - -@Getter -@Configuration -public class GatewayConfig { - - @Value("${fda.gateway.endpoint}") - private String gatewayEndpoint; - - @Value("${spring.rabbitmq.username}") - private String brokerUsername; - - @Value("${spring.rabbitmq.password}") - private String brokerPassword; - - @Bean("brokerRestTemplate") - public RestTemplate brokerRestTemplate() { - final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); - restTemplate.getInterceptors() - .add(new BasicAuthenticationInterceptor(brokerUsername, brokerPassword)); - return restTemplate; - } -} diff --git a/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index fba7f99cf2bf1cbb12ac51cd6fd5b80751ff43c1..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,31 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java b/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java deleted file mode 100644 index 0bee3b961edd4ca456f0243c8eede630a4a54716..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package at.tuwien.config; - -import com.google.common.io.Files; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.event.EventListener; - -import java.io.File; -import java.io.IOException; - -@Configuration -public class ReadyConfig { - - @Value("${fda.ready.path}") - private String readyPath; - - @EventListener(ApplicationReadyEvent.class) - public void init() throws IOException { - Files.touch(new File(readyPath)); - } - -} diff --git a/dbrepo-discovery-service/rest-service/src/main/resources/application-local.yml b/dbrepo-discovery-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index 1ab259ae3fe70e9b2b3e44c9f46c7dea341cc81a..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,54 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://localhost:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: root - password: dbrepo - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: discovery-service - rabbitmq: - host: localhost - username: fda - password: fda - cloud: - loadbalancer.ribbon.enabled: false - gateway: - httpclient: - ssl: - useInsecureTrustManager: true -management.endpoints.web.exposure.include: health,info,prometheus -server: - port: 9090 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: info - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - client: - register-with-eureka: false - fetch-registry: false - serviceUrl.defaultZone: http://localhost:9090/eureka/ - instance: - hostname: discovery-service - non-secure-port-enabled: false - secure-port-enabled: true - secure-port: 9090 -fda: - ready.path: ./ready - gateway.endpoint: http://localhost:9095 \ No newline at end of file diff --git a/dbrepo-discovery-service/rest-service/src/main/resources/application.yml b/dbrepo-discovery-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index 3d691f1015f4b01cb4335c8835f0ae07dc112785..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,48 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:mariadb://metadata-db:3306/fda - driver-class-name: org.mariadb.jdbc.Driver - username: "${METADATA_USERNAME}" - password: "${METADATA_PASSWORD}" - jpa: - show-sql: false - database-platform: org.hibernate.dialect.MariaDBDialect - hibernate: - ddl-auto: validate - open-in-view: false - properties: - hibernate: - jdbc: - time_zone: UTC - application: - name: discovery-service - rabbitmq: - host: broker-service - username: "${BROKER_USERNAME}" - password: "${BROKER_PASSWORD}" - cloud: - loadbalancer.ribbon.enabled: false -management.endpoints.web.exposure.include: health,info,prometheus -server: - port: 9090 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - client: - register-with-eureka: false - fetch-registry: false - serviceUrl.defaultZone: http://discovery-service:9090/eureka/ - instance: - hostname: discovery-service - non-secure-port-enabled: false - secure-port-enabled: true - secure-port: 9090 -fda: - ready.path: /ready - gateway.endpoint: "${GATEWAY_ENDPOINT}" \ No newline at end of file diff --git a/dbrepo-discovery-service/rest-service/src/main/resources/config.properties b/dbrepo-discovery-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-discovery-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/dbrepo-discovery-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java deleted file mode 100644 index c5adb93d3dddc50757d88380ed50857a1e034610..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java +++ /dev/null @@ -1,9 +0,0 @@ -package at.tuwien; - -import at.tuwien.test.BaseTest; -import org.springframework.test.context.TestPropertySource; - -@TestPropertySource(locations = "classpath:application.properties") -public abstract class BaseUnitTest extends BaseTest { - -} \ No newline at end of file diff --git a/dbrepo-discovery-service/rest-service/src/test/java/at/tuwien/MockServiceIntegrationTest.java b/dbrepo-discovery-service/rest-service/src/test/java/at/tuwien/MockServiceIntegrationTest.java deleted file mode 100644 index 329ae7be2373a0eeb6eca51d5b16183d91ab3ed1..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/src/test/java/at/tuwien/MockServiceIntegrationTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package at.tuwien; - -import at.tuwien.config.H2Utils; -import at.tuwien.service.MockService; -import lombok.extern.log4j.Log4j2; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import static org.junit.jupiter.api.Assertions.assertTrue; - - -@Log4j2 -@SpringBootTest -public class MockServiceIntegrationTest extends BaseUnitTest { - - @Autowired - private H2Utils h2Utils; - - @Autowired - private MockService mockService; - - @BeforeEach - public void beforeEach() { - h2Utils.runScript("schema.sql"); - } - - @Test - public void mock_succeeds() { - - /* test */ - final Boolean response = mockService.mock(); - assertTrue(response); - } - -} diff --git a/dbrepo-discovery-service/rest-service/src/test/resources/application.properties b/dbrepo-discovery-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 1caa6874366e985b357c2d5b32bd12316edf0de3..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,11 +0,0 @@ -# enable local spring profile -spring.profiles.active=local - -# disable datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.jpa.hibernate.ddl-auto=create-drop -spring.jpa.show-sql=false \ No newline at end of file diff --git a/dbrepo-discovery-service/rest-service/src/test/resources/schema.sql b/dbrepo-discovery-service/rest-service/src/test/resources/schema.sql deleted file mode 100644 index 906d8df808fa8f79c1f7c1c26088c55da6c9ee9b..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/rest-service/src/test/resources/schema.sql +++ /dev/null @@ -1,25 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS `fda`; -SET SCHEMA `fda`; -DROP TABLE IF EXISTS fda.mdb_concepts; -CREATE TABLE IF NOT EXISTS fda.mdb_concepts -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); -DROP TABLE IF EXISTS fda.mdb_units; -CREATE TABLE IF NOT EXISTS fda.mdb_units -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); --- Modified for H2 --- Assume id=1 is invalid --- Assume id=2 is still valid token --- CREATE VIEW IF NOT EXISTS fda.mdb_invalid_tokens AS --- (SELECT `id`, `token_hash`, `creator`, `created`, `expires`, `last_used` FROM fda.`mdb_tokens` WHERE `id` = 1); \ No newline at end of file diff --git a/dbrepo-discovery-service/service_ready b/dbrepo-discovery-service/service_ready deleted file mode 100644 index b2e4f9df6804f249ba8aadd72f742929072badaa..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/service_ready +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -if [ -f /ready ]; then - echo "service is ready and accepting connections" - exit 0 -fi -exit 1 \ No newline at end of file diff --git a/dbrepo-discovery-service/services/pom.xml b/dbrepo-discovery-service/services/pom.xml deleted file mode 100644 index 8ac4f5a15d79b5e1d2663e37c38120e5e7065963..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/services/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>dbrepo-discovery-service</artifactId> - <groupId>at.tuwien</groupId> - <version>1.2.0</version> - </parent> - - <artifactId>services</artifactId> - <version>1.2.0</version> - <name>dbrepo-discovery-service-services</name> - -</project> \ No newline at end of file diff --git a/dbrepo-discovery-service/services/src/main/java/at/tuwien/service/MockService.java b/dbrepo-discovery-service/services/src/main/java/at/tuwien/service/MockService.java deleted file mode 100644 index 521e25785d998c394a5a774b9299da0c93206ffa..0000000000000000000000000000000000000000 --- a/dbrepo-discovery-service/services/src/main/java/at/tuwien/service/MockService.java +++ /dev/null @@ -1,12 +0,0 @@ -package at.tuwien.service; - -import org.springframework.stereotype.Service; - -@Service -public class MockService { - - public Boolean mock() { - return true; - } - -} diff --git a/dbrepo-gateway-service/.gitignore b/dbrepo-gateway-service/.gitignore deleted file mode 100644 index 549e00a2a96fa9d7c5dbc9859664a78d980158c2..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/.gitignore +++ /dev/null @@ -1,33 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/**/target/ -!**/src/test/**/target/ - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ -!**/src/main/**/build/ -!**/src/test/**/build/ - -### VS Code ### -.vscode/ diff --git a/dbrepo-gateway-service/.mvn/wrapper/MavenWrapperDownloader.java b/dbrepo-gateway-service/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index a45eb6ba269cd38f8965cef786729790945d9537..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if (mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if (mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if (!outputFile.getParentFile().exists()) { - if (!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/dbrepo-gateway-service/.mvn/wrapper/maven-wrapper.jar b/dbrepo-gateway-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 Binary files a/dbrepo-gateway-service/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/dbrepo-gateway-service/.mvn/wrapper/maven-wrapper.properties b/dbrepo-gateway-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce90e5085986bdd9c9204b9404f028084..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/dbrepo-gateway-service/Dockerfile b/dbrepo-gateway-service/Dockerfile deleted file mode 100644 index 7fd33750f721c204635b9c51e91365ae439a3bc7..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/Dockerfile +++ /dev/null @@ -1,45 +0,0 @@ -###### FIRST STAGE ###### -FROM dbrepo-metadata-db:latest as dependency -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -###### FIRST STAGE ###### -FROM maven:slim as build - -COPY ./pom.xml ./ - -RUN mvn -fn -B dependency:go-offline > /dev/null - -COPY --from=dependency /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien - -COPY ./report ./report -COPY ./rest-service ./rest-service - -# Make sure it compiles -RUN mvn -q clean package -DskipTests - -###### SECOND STAGE ###### -FROM openjdk:11-jre-slim as runtime - -ENV METADATA_DB=fda -ENV METADATA_USERNAME=postgres -ENV METADATA_PASSWORD=postgres -ENV GATEWAY_ENDPOINT=http://gateway-service:9095 -ENV LOG_LEVEL=debug - -WORKDIR /app - -COPY ./server.keystore ./server.keystore -COPY ./root.crt /etc/ssl/certs/DBRepo_Root_CA.crt - -RUN cat /etc/ssl/certs/DBRepo_Root_CA.crt >> /etc/ssl/certs/ca-certificates.crt - -COPY ./service_ready /usr/bin -RUN chmod +x /usr/bin/service_ready - -HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD service_ready - -COPY --from=build ./rest-service/target/rest-service-*.jar ./rest-service.jar - -EXPOSE 9095 - -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-Djavax.net.ssl.trustStore=/app/server.keystore", "-Djavax.net.ssl.trustStorePassword=password", "-jar", "./rest-service.jar"] \ No newline at end of file diff --git a/dbrepo-gateway-service/README.md b/dbrepo-gateway-service/README.md deleted file mode 100644 index 75fed4cae459ea1b6c37d40d48de6573a856ddb2..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Gateway Service - -## Actuator - -* Overview: [https://localhost:9095/actuator/](https://localhost:9095/actuator/) -* Info: [https://localhost:9095/actuator/info](https://localhost:9095/actuator/info) - -## Prometheus - -* Overview: [https://localhost:9095/actuator/prometheus](https://localhost:9095/actuator/prometheus) - -## Health - -* Overview: [https://localhost:9095/actuator/health/](https://localhost:9095/actuator/health/) - -# Routes - -* Overview: [https://localhost:9095/actuator/gateway/routes](https://localhost:9095/actuator/gateway/routes) \ No newline at end of file diff --git a/dbrepo-gateway-service/mvnw b/dbrepo-gateway-service/mvnw deleted file mode 100755 index a16b5431b4c3cab50323a3f558003fd0abd87dad..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-gateway-service/mvnw.cmd b/dbrepo-gateway-service/mvnw.cmd deleted file mode 100644 index c8d43372c986d97911cdc21bd87e0cbe3d83bdda..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/dbrepo-gateway-service/pom.xml b/dbrepo-gateway-service/pom.xml deleted file mode 100644 index addee3cef67e6f4a64c220ac55aed5b92c7739e3..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/pom.xml +++ /dev/null @@ -1,149 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-parent</artifactId> - <version>2.3.4.RELEASE</version> - </parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-gateway-service</artifactId> - <version>1.2.0</version> - <name>dbrepo-gateway-service</name> - <description>Service that proxies the API to the microservices</description> - <url>https://dbrepo-docs.ossdip.at</url> - <developers> - <developer> - <name>Martin Weise</name> - <email>martin.weise@tuwien.ac.at</email> - <organization>TU Wien</organization> - </developer> - </developers> - - <packaging>pom</packaging> - <modules> - <module>rest-service</module> - <module>report</module> - </modules> - - <properties> - <java.version>11</java.version> - <spring-cloud.version>Hoxton.SR10</spring-cloud.version><!-- SR11 not working yet --> - <swagger.version>2.1.7</swagger.version> - <springfox.version>3.0.0</springfox.version> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <!-- Gate --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-webflux</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-gateway</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> - </dependency> - <!-- Embedded DataSource --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-jpa</artifactId> - </dependency> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <scope>runtime</scope> - </dependency> - <!-- Monitoring --> - <dependency> - <groupId>io.micrometer</groupId> - <artifactId>micrometer-registry-prometheus</artifactId> - <scope>runtime</scope> - </dependency> - <!-- IDE --> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - </dependency> - <!-- Testing --> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - <exclusions> - <exclusion> - <groupId>org.junit.jupiter</groupId> - <artifactId>junit-vintage-engine</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-db-test</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - </dependencies> - - <dependencyManagement> - <dependencies> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-dependencies</artifactId> - <version>${spring-cloud.version}</version> - <type>pom</type> - <scope>import</scope> - </dependency> - </dependencies> - </dependencyManagement> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <configuration> - <excludes> - <exclude>at/tuwien/utils/**/*</exclude> - <exclude>at/tuwien/seeder/**/*</exclude> - <exclude>at/tuwien/mapper/**/*</exclude> - <exclude>at/tuwien/exception/**/*</exclude> - <exclude>at/tuwien/config/**/*</exclude> - <exclude>**/DbrepoGatewayServiceApplication.class</exclude> - </excludes> - </configuration> - <executions> - <execution> - <id>default-prepare-agent</id> - <goals> - <goal>prepare-agent</goal> - </goals> - </execution> - <execution> - <id>report</id> - <phase>verify</phase> - <goals> - <goal>report</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> diff --git a/dbrepo-gateway-service/report/pom.xml b/dbrepo-gateway-service/report/pom.xml deleted file mode 100644 index 7c2e3a729c3794be87390b6235722a6bfae9bbc2..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/report/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-gateway-service</artifactId> - <version>1.2.0</version> - </parent> - - <artifactId>report</artifactId> - <version>1.2.0</version> - <name>dbrepo-gateway-service-report</name> - <description> - This module is only intended for the pipeline coverage report. See the detailed report in the - respective modules - </description> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>rest-service</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.jacoco</groupId> - <artifactId>jacoco-maven-plugin</artifactId> - <version>${jacoco.version}</version> - <executions> - <execution> - <id>report-aggregate</id> - <phase>verify</phase> - <goals> - <goal>report-aggregate</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file diff --git a/dbrepo-gateway-service/rest-service/pom.xml b/dbrepo-gateway-service/rest-service/pom.xml deleted file mode 100644 index 6a543cd5edc51564b1141c4e67f72fb169502c80..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/rest-service/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-gateway-service</artifactId> - <version>1.2.0</version> - </parent> - - <artifactId>rest-service</artifactId> - <version>1.2.0</version> - <name>dbrepo-gateway-service-rest-service</name> - - <properties> - <jacoco.version>0.8.7</jacoco.version> - </properties> - - <build> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>repackage</goal><!-- to make it exuteable with $ java -jar ./app.jar --> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - - <dependencies /> - -</project> \ No newline at end of file diff --git a/dbrepo-gateway-service/rest-service/ready b/dbrepo-gateway-service/rest-service/ready deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/DbrepoGatewayServiceApplication.java b/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/DbrepoGatewayServiceApplication.java deleted file mode 100644 index 821368936f057582faa2e9e9afaa0bb8dc37102f..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/DbrepoGatewayServiceApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package at.tuwien; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class DbrepoGatewayServiceApplication { - - public static void main(String[] args) { - SpringApplication.run(DbrepoGatewayServiceApplication.class, args); - } - -} diff --git a/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/GatewayConfig.java deleted file mode 100644 index bb1450fde72230d2707facca8592f17f5a18c331..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/GatewayConfig.java +++ /dev/null @@ -1,83 +0,0 @@ -package at.tuwien.config; - -import org.springframework.cloud.gateway.route.RouteLocator; -import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class GatewayConfig { - - @Bean - public RouteLocator routes(RouteLocatorBuilder builder) { - return builder.routes() - .route("authentication-service", r -> r.path("/api/auth/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .filters(f -> f.rewritePath("/api/auth/(?<segment>.*)", "/${segment}")) - .uri("lb://authentication-service")) - .route("user-service", r -> r.path("/api/user/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .and() - .uri("lb://user-service")) - .route("broker-service", r -> r.path("/api/broker/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .filters(f -> f.rewritePath("/api/broker/(?<segment>.*)", "/api/${segment}")) - .uri("lb://broker-service")) - .route("analyse-service", r -> r.path("/api/analyse/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .and() - .uri("lb://analyse-service")) - .route("metadata-service", r -> r.path("/api/oai/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .and() - .uri("lb://metadata-service")) - .route("identifier-service", r -> r.path("/api/pid/**", - "/api/identifier/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .and() - .uri("lb://identifier-service")) - .route("query-service", r -> r.path("/api/container/**/database/**/query/**", - "/api/container/**/database/**/view/**", - "/api/container/**/database/**/table/**/history/**", - "/api/container/**/database/**/table/**/data/**", - "/api/container/**/database/**/table/**/query/**", - "/api/container/**/database/**/table/**/export/**", - "/api/container/**/database/**/table/**/consumer", - "/api/container/**/database/**/version/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .and() - .uri("lb://query-service")) - .route("table-service", r -> r.path("/api/container/**/database/**/table/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .and() - .uri("lb://table-service")) - .route("database-service", r -> r.path("/api/container/**/database/**", - "/api/container/**/database/**/access/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .and() - .uri("lb://database-service")) - .route("container-service", r -> r.path("/api/container/**", - "/api/image/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .and() - .uri("lb://container-service")) - .route("semantics-service", r -> r.path("/api/semantics/**") - .and() - .method("POST", "GET", "PUT", "DELETE") - .and() - .uri("lb://semantics-service")) - .build(); - - } - -} diff --git a/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index fba7f99cf2bf1cbb12ac51cd6fd5b80751ff43c1..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,31 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.Date; -import java.util.TimeZone; - -@Slf4j -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() throws JsonProcessingException { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - log.debug("current time is {}", objectMapper.writeValueAsString(new Date())); - return objectMapper; - } - -} diff --git a/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java b/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java deleted file mode 100644 index 2250fa50884df3f47b0b063975aea74f06203f80..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.tuwien.config; - -import com.google.common.io.Files; -import lombok.extern.log4j.Log4j2; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.event.EventListener; - -import java.io.File; -import java.io.IOException; - -@Log4j2 -@Configuration -public class ReadyConfig { - - @Value("${fda.ready.path}") - private String readyPath; - - @EventListener(ApplicationReadyEvent.class) - public void init() throws IOException { - Files.touch(new File(readyPath)); - } - -} diff --git a/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/WebConfig.java b/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/WebConfig.java deleted file mode 100644 index e5aece5a2404d6a67ff6060f27dacd87b5481ca8..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/rest-service/src/main/java/at/tuwien/config/WebConfig.java +++ /dev/null @@ -1,26 +0,0 @@ -package at.tuwien.config; - -import org.springframework.cloud.client.loadbalancer.LoadBalanced; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.reactive.config.CorsRegistry; -import org.springframework.web.reactive.config.WebFluxConfigurer; -import org.springframework.web.reactive.function.client.WebClient; - -@Configuration -public class WebConfig implements WebFluxConfigurer { - - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") - .allowedMethods("POST", "GET", "PUT", "DELETE") - .allowedOrigins("*"); - } - - @Bean - @LoadBalanced - public WebClient.Builder loadBalancedWebClientBuilder() { - return WebClient.builder(); - } - -} diff --git a/dbrepo-gateway-service/rest-service/src/main/resources/application-local.yml b/dbrepo-gateway-service/rest-service/src/main/resources/application-local.yml deleted file mode 100644 index 320e14ae2ff24ced3b20791aeb12d31c93d46524..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/rest-service/src/main/resources/application-local.yml +++ /dev/null @@ -1,42 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:h2:mem:mydb - username: sa - password: password - driverClassName: org.h2.Driver - jpa: - show-sql: false - database-platform: org.hibernate.dialect.H2Dialect - hibernate: - ddl-auto: validate - use-new-id-generator-mappings: false - open-in-view: false - properties: - hibernate: - default_schema: fda - jdbc: - time_zone: UTC - application: - name: gateway-service - cloud: - loadbalancer.ribbon.enabled: false -management.endpoints.web.exposure.include: health,info,prometheus,gateway -server: - port: 9095 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: info - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: gateway-service - non-secure-port-enabled: false - secure-port-enabled: true - secure-port: 9095 - client.serviceUrl.defaultZone: http://localhost:9090/eureka/ -fda: - ready.path: ./ready \ No newline at end of file diff --git a/dbrepo-gateway-service/rest-service/src/main/resources/application.yml b/dbrepo-gateway-service/rest-service/src/main/resources/application.yml deleted file mode 100644 index 3c021d74d60d42c47898642d9f03dc2421b62881..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/rest-service/src/main/resources/application.yml +++ /dev/null @@ -1,40 +0,0 @@ -app.version: '@project.version@' -spring: - main.banner-mode: off - datasource: - url: jdbc:h2:mem:mydb - username: sa - password: password - driverClassName: org.h2.Driver - jpa: - show-sql: false - database-platform: org.hibernate.dialect.H2Dialect - hibernate: - ddl-auto: validate - open-in-view: false - properties: - hibernate: - jdbc: - time_zone: UTC - application: - name: gateway-service - cloud: - loadbalancer.ribbon.enabled: false -management.endpoints.web.exposure.include: health,info,prometheus,gateway -server: - port: 9095 -logging: - pattern.console: "%d %highlight(%-5level) %msg%n" - level: - root: warn - at.tuwien.: "${LOG_LEVEL}" - org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: gateway-service - non-secure-port-enabled: false - secure-port-enabled: true - secure-port: 9095 - client.serviceUrl.defaultZone: http://discovery-service:9090/eureka/ -fda: - ready.path: /ready \ No newline at end of file diff --git a/dbrepo-gateway-service/rest-service/src/main/resources/config.properties b/dbrepo-gateway-service/rest-service/src/main/resources/config.properties deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-gateway-service/rest-service/src/test/resources/application.properties b/dbrepo-gateway-service/rest-service/src/test/resources/application.properties deleted file mode 100644 index 1caa6874366e985b357c2d5b32bd12316edf0de3..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/rest-service/src/test/resources/application.properties +++ /dev/null @@ -1,11 +0,0 @@ -# enable local spring profile -spring.profiles.active=local - -# disable datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.jpa.hibernate.ddl-auto=create-drop -spring.jpa.show-sql=false \ No newline at end of file diff --git a/dbrepo-gateway-service/server.keystore b/dbrepo-gateway-service/server.keystore deleted file mode 100644 index 1acf1f68ca7c367468fe2a81179d5fc9f295cfc9..0000000000000000000000000000000000000000 Binary files a/dbrepo-gateway-service/server.keystore and /dev/null differ diff --git a/dbrepo-gateway-service/service_ready b/dbrepo-gateway-service/service_ready deleted file mode 100644 index b2e4f9df6804f249ba8aadd72f742929072badaa..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/service_ready +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -if [ -f /ready ]; then - echo "service is ready and accepting connections" - exit 0 -fi -exit 1 \ No newline at end of file diff --git a/dbrepo-identifier-service/Dockerfile b/dbrepo-identifier-service/Dockerfile index b8343cc968c5fa7475a99e40a7c4d079fae37266..e4f562d63e1be114846dc139a4c8b249502c44af 100644 --- a/dbrepo-identifier-service/Dockerfile +++ b/dbrepo-identifier-service/Dockerfile @@ -3,7 +3,8 @@ FROM dbrepo-metadata-db:latest as dependency MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> ###### SECOND STAGE ###### -FROM maven:slim as build +FROM maven:3-openjdk-17 as build +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> COPY ./pom.xml ./ @@ -20,17 +21,20 @@ COPY ./report ./report RUN mvn -q clean package -DskipTests ###### THIRD STAGE ###### -FROM openjdk:11-jre-slim as runtime +FROM openjdk:17-alpine as runtime +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +RUN apk --no-cache add bash ENV METADATA_DB=fda ENV METADATA_USERNAME=root ENV METADATA_PASSWORD=dbrepo -ENV GATEWAY_ENDPOINT=http://gateway-service:9095 +ENV GATEWAY_ENDPOINT=http://gateway-service ENV WEBSITE=http://localhost ENV LOG_LEVEL=debug ENV DBREPO_CLIENT_SECRET=client-secret ENV CLIENT_ID=dbrepo-client -ENV JWT_ISSUER=http://localhost:8080/realms/dbrepo +ENV JWT_ISSUER=http://localhost/realms/dbrepo ENV JWT_PUBKEY=public-key WORKDIR /app @@ -44,4 +48,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./identifier-service. EXPOSE 9096 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./identifier-service.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./identifier-service.jar"] diff --git a/dbrepo-identifier-service/pom.xml b/dbrepo-identifier-service/pom.xml index 2e3749b2b744bc4ffeda3b8e95607828bfe911a3..cbd895ea27da773ebe3dcf156491da76350d38d1 100644 --- a/dbrepo-identifier-service/pom.xml +++ b/dbrepo-identifier-service/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.3.10.RELEASE</version> + <version>3.0.6</version> </parent> <groupId>at.tuwien</groupId> @@ -23,24 +23,21 @@ </modules> <properties> - <java.version>11</java.version> - <spring-cloud.version>3.0.1</spring-cloud.version> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <swagger.version>2.1.7</swagger.version> - <springfox.version>3.0.0</springfox.version> - <jacoco.version>0.8.7</jacoco.version> - <javax-ws-rs.version>2.1.1</javax-ws-rs.version> - <maven-site.version>3.10.0</maven-site.version> - <docker.version>3.2.7</docker.version> - <commons-io.version>2.11.0</commons-io.version> + <java.version>17</java.version> + <spring-cloud.version>4.0.2</spring-cloud.version> + <mapstruct.version>1.5.5.Final</mapstruct.version> + <docker.version>3.3.0</docker.version> + <swagger.version>2.2.9</swagger.version> + <jacoco.version>0.8.10</jacoco.version> <jwt.version>4.3.0</jwt.version> + <hibernate-c3po.version>5.6.3.Final</hibernate-c3po.version> + <commons-io.version>2.11.0</commons-io.version> + <opencsv.version>5.7.1</opencsv.version> + <super-csv.version>2.4.0</super-csv.version> + <jsql.version>4.6</jsql.version> </properties> <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-webflux</artifactId> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> @@ -110,12 +107,6 @@ <artifactId>docker-java</artifactId> <version>${docker.version}</version> <scope>test</scope> - <exclusions> - <exclusion> - <groupId>javax.ws.rs</groupId> - <artifactId>jsr311-api</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>com.github.docker-java</groupId> @@ -124,11 +115,6 @@ <scope>test</scope> </dependency> <!-- Testing --> - <dependency> - <groupId>javax.ws.rs</groupId> - <artifactId>javax.ws.rs-api</artifactId> - <version>${javax-ws-rs.version}</version> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java index 43cc6674b9d106548b72b73c8b4aaccd815cdadb..fffddcf42347b7a4d9025bfcdebcf58a947287df 100644 --- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java +++ b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/IdentifierEndpoint.java @@ -4,7 +4,6 @@ import at.tuwien.api.error.ApiErrorDto; import at.tuwien.api.identifier.IdentifierCreateDto; import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.entities.database.DatabaseAccess; import at.tuwien.entities.identifier.Identifier; import at.tuwien.entities.user.User; import at.tuwien.exception.*; @@ -27,8 +26,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.LinkedList; import java.util.List; diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java index 6f30f79be88c9ece0f87d7c9ff1378ba7b0dd311..b72eb5b31408f059619e76a797c37e3565125a5f 100644 --- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java +++ b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/endpoints/PersistenceEndpoint.java @@ -29,8 +29,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml b/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml index bb5c0681e33a5e73cb1287d73e2385dbf54a5675..6800891595f1666ccdf046f764174ac52ccf7ca6 100644 --- a/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml +++ b/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml @@ -24,8 +24,13 @@ spring: loadbalancer.ribbon.enabled: false rabbitmq: host: localhost + virtual-host: dbrepo username: fda password: fda + elasticsearch: + password: elastic + username: elastic + uris: http://localhost:9200 management.endpoints.web.exposure.include: health,info,prometheus server: port: 9096 @@ -36,21 +41,12 @@ logging: at.tuwien.: trace at.tuwien.auth.UserPermissionEvaluator: trace org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: identifier-service - non-secure-port: 9096 - client.serviceUrl.defaultZone: http://localhost:9090/eureka/ fda: ready.path: ./ready jwt: - issuer: https://localhost:8443/realms/dbrepo + issuer: http://localhost/realms/dbrepo public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB client_secret: client-secret client_id: dbrepo-client - gateway.endpoint: http://localhost:9095 - website: http://localhost:3000 - elastic: - endpoint: localhost:9200 - username: elastic - password: elastic \ No newline at end of file + gateway.endpoint: http://localhost + website: http://localhost \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/application.yml b/dbrepo-identifier-service/rest-service/src/main/resources/application.yml index 9d2031bd7e895dd711f292066fbf1e4a44bac5ab..1782b03e657c9b7d9163791896718f03488b478a 100644 --- a/dbrepo-identifier-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-identifier-service/rest-service/src/main/resources/application.yml @@ -24,8 +24,13 @@ spring: loadbalancer.ribbon.enabled: false rabbitmq: host: broker-service + virtual-host: dbrepo username: "${BROKER_USERNAME}" password: "${BROKER_PASSWORD}" + elasticsearch: + password: "${ELASTIC_PASSWORD}" + username: elastic + uris: http://search-service:9200 management.endpoints.web.exposure.include: health,info,prometheus server: port: 9096 @@ -36,11 +41,6 @@ logging: at.tuwien.: "${LOG_LEVEL}" at.tuwien.auth.UserPermissionEvaluator: trace org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: identifier-service - non-secure-port: 9096 - client.serviceUrl.defaultZone: http://discovery-service:9090/eureka/ fda: ready.path: /ready jwt: @@ -49,8 +49,4 @@ fda: client_secret: "${DBREPO_CLIENT_SECRET}" client_id: "${CLIENT_ID}" gateway.endpoint: "${GATEWAY_ENDPOINT}" - website: "${WEBSITE}" - elastic: - endpoint: search-service:9200 - username: elastic - password: "${ELASTIC_PASSWORD}" \ No newline at end of file + website: "${WEBSITE}" \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java index 1d642305dd1d129877f67542091af5122e757514..a2ea25e54284cb6df30fa4558a3724832bf7fc9e 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java +++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java @@ -162,7 +162,7 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest { identifierRepository.save(IDENTIFIER_1); /* test */ - final List<IdentifierDto> response = this.generic_list(DATABASE_1_ID, QUERY_1_ID, IdentifierTypeDto.SUBSET); + final List<IdentifierDto> response = this.generic_list(DATABASE_1_ID, QUERY_1_ID, IdentifierTypeDto.DATABASE); assertEquals(1, response.size()); final IdentifierDto identifier = response.get(0); assertEquals(IDENTIFIER_1_ID, identifier.getId()); diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java index 8f8955b0c5c4b004a544da6dffcbedef45800674..1be9690cb0e989e974a8f81494a98ccd68acf202 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java +++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java @@ -150,7 +150,7 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest { assertEquals(HttpStatus.MOVED_PERMANENTLY, response.getStatusCode()); assertNotNull(response.getHeaders().get("Location")); assertEquals(endpointConfig.getWebsiteUrl() + "/container/" + IDENTIFIER_1_CONTAINER_ID + "/database/" - + IDENTIFIER_1_DATABASE_ID + "/query/" + IDENTIFIER_1_QUERY_ID, response.getHeaders().getFirst("Location")); + + IDENTIFIER_1_DATABASE_ID, response.getHeaders().getFirst("Location")); } @Test diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java index 1789fe663688f33125a39a08750551a9dcd08825..d3c64bd929d72368c2917ed25f952fce282391b7 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java +++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java @@ -75,7 +75,6 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest { @Primary public ObjectMapper objectMapper() { final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); objectMapper.registerModule(new Jdk8Module()); objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java index 7167767c8b3940c35c78569385a68449aa363ed7..1a68af0041864473bcb23c43e0679a2c90d21f2d 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java +++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java @@ -67,7 +67,7 @@ public class QueryServiceGatewayUnitTest extends BaseUnitTest { } @Test - public void find_notFound_fails() throws QueryNotFoundException, RemoteUnavailableException { + public void find_notFound_fails() { final ResponseEntity<QueryDto> mock = ResponseEntity.status(HttpStatus.NOT_FOUND) .build(); diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java index c38f19bb746c3d5fcf994a6af346fa7550a9b03a..1aad8f0b61650640eaeb10bb52234b2c19d6411b 100644 --- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java +++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java @@ -11,10 +11,7 @@ import at.tuwien.config.EndpointConfig; import at.tuwien.config.IndexInitializer; import at.tuwien.entities.identifier.Identifier; import at.tuwien.exception.*; -import at.tuwien.repository.jpa.ContainerRepository; -import at.tuwien.repository.jpa.DatabaseRepository; -import at.tuwien.repository.jpa.IdentifierRepository; -import at.tuwien.repository.jpa.ImageRepository; +import at.tuwien.repository.jpa.*; import at.tuwien.service.impl.IdentifierServiceImpl; import org.apache.http.auth.BasicUserPrincipal; import org.junit.jupiter.api.BeforeEach; @@ -46,8 +43,7 @@ import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) -@SpringBootTest -@ActiveProfiles("doi") +@SpringBootTest(properties = "spring.profiles.active:local,doi") public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { @MockBean @@ -71,6 +67,12 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { @Autowired private IdentifierRepository identifierRepository; + @Autowired + private RealmRepository realmRepository; + + @Autowired + private UserRepository userRepository; + @MockBean @Qualifier("restTemplate") private RestTemplate restTemplate; @@ -86,8 +88,10 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { @BeforeEach public void beforeEach() { + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1); imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); + containerRepository.save(CONTAINER_1_SIMPLE); databaseRepository.save(DATABASE_1); } @@ -182,7 +186,7 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { } @Test - public void update_invalidMetadata_fails() throws IdentifierUpdateBadFormException, IdentifierNotFoundException { + public void update_invalidMetadata_fails() throws IdentifierNotFoundException { /* mock */ when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierUpdateDto.class))) @@ -200,7 +204,7 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest { } @Test - public void update_restClientException_fails() throws IdentifierUpdateBadFormException, IdentifierNotFoundException { + public void update_restClientException_fails() throws IdentifierNotFoundException { /* mock */ when(identifierService.update(eq(IDENTIFIER_1_ID), any(IdentifierUpdateDto.class))) diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/application.properties b/dbrepo-identifier-service/rest-service/src/test/resources/application.properties index 507921d77d8b04535ded832f91bafe10abe92d6a..938bc30b0f3491387d1455bcba0a733f9487d57d 100644 --- a/dbrepo-identifier-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-identifier-service/rest-service/src/test/resources/application.properties @@ -9,7 +9,8 @@ spring.cloud.config.discovery.enabled = false spring.cloud.config.enabled = false # disable datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA +# spring 6 fix https://github.com/h2database/h2database/issues/3363 +spring.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=VALUE,KEY;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password @@ -17,5 +18,11 @@ spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.hibernate.ddl-auto=create-drop spring.jpa.show-sql=false +# datacite +fda.datacite.url: https://api.test.datacite.org/ +fda.datacite.prefix: 10.12345 +fda.datacite.username: test-user +fda.datacite.password: test-password + fda.mapping.path: /tmp fda.table.path: /tmp \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/schema.sql b/dbrepo-identifier-service/rest-service/src/test/resources/schema.sql deleted file mode 100644 index 906d8df808fa8f79c1f7c1c26088c55da6c9ee9b..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/resources/schema.sql +++ /dev/null @@ -1,25 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS `fda`; -SET SCHEMA `fda`; -DROP TABLE IF EXISTS fda.mdb_concepts; -CREATE TABLE IF NOT EXISTS fda.mdb_concepts -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); -DROP TABLE IF EXISTS fda.mdb_units; -CREATE TABLE IF NOT EXISTS fda.mdb_units -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); --- Modified for H2 --- Assume id=1 is invalid --- Assume id=2 is still valid token --- CREATE VIEW IF NOT EXISTS fda.mdb_invalid_tokens AS --- (SELECT `id`, `token_hash`, `creator`, `created`, `expires`, `last_used` FROM fda.`mdb_tokens` WHERE `id` = 1); \ No newline at end of file diff --git a/dbrepo-identifier-service/rest-service/src/test/resources/view.sql b/dbrepo-identifier-service/rest-service/src/test/resources/view.sql deleted file mode 100644 index b23c5436c00f157754d9a62cd09f4f22325eae73..0000000000000000000000000000000000000000 --- a/dbrepo-identifier-service/rest-service/src/test/resources/view.sql +++ /dev/null @@ -1,5 +0,0 @@ --- Modified for H2 --- Assume id=1 is invalid --- Assume id=2 is still valid token -CREATE VIEW IF NOT EXISTS fda.mdb_invalid_tokens AS -(SELECT `id`, `token_hash`, `creator`, `created`, `expires`, `last_used` FROM fda.`mdb_tokens` WHERE `id` = 1); \ No newline at end of file diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java index b2b01c42ee9868215962426b18b3a70450bff7ac..92b60f4f8a5ed8a566e2504d71b63478b1593f68 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java @@ -6,6 +6,10 @@ import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -16,10 +20,6 @@ import org.springframework.security.web.authentication.WebAuthenticationDetailsS import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java index b8de474aed6d651c497abe044fbd3368e9efbf83..58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java @@ -1,38 +1,45 @@ package at.tuwien.config; -import org.elasticsearch.client.RestHighLevelClient; +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.json.jackson.JacksonJsonpMapper; +import co.elastic.clients.transport.ElasticsearchTransport; +import co.elastic.clients.transport.rest_client.RestClientTransport; +import lombok.extern.log4j.Log4j2; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.elasticsearch.client.RestClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.elasticsearch.client.ClientConfiguration; -import org.springframework.data.elasticsearch.client.RestClients; -import org.springframework.data.elasticsearch.core.ElasticsearchOperations; -import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; +@Log4j2 @Configuration public class ElasticsearchConfig { - @Value("${fda.elastic.endpoint}") + @Value("${spring.elasticsearch.uris}") private String elasticEndpoint; - @Value("${fda.elastic.username}") + @Value("${spring.elasticsearch.username}") private String elasticUsername; - @Value("${fda.elastic.password}") + @Value("${spring.elasticsearch.password}") private String elasticPassword; @Bean - public RestHighLevelClient client() { - ClientConfiguration clientConfiguration = ClientConfiguration.builder() - .connectedTo(elasticEndpoint) - .withBasicAuth(elasticUsername, elasticPassword) + public ElasticsearchClient elasticsearchClient() { + log.debug("elastic endpoint={}", elasticEndpoint); + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword)); + final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint)) + .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder + .setDefaultCredentialsProvider(credentialsProvider)) .build(); - - return RestClients.create(clientConfiguration).rest(); + ElasticsearchTransport transport = new RestClientTransport( + restClient, new JacksonJsonpMapper()); + return new ElasticsearchClient(transport); } - @Bean - public ElasticsearchOperations elasticsearchTemplate() { - return new ElasticsearchRestTemplate(client()); - } } \ No newline at end of file diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java index 4dd0068634978d7fff069203febb24d69d02f845..655dbe59c4cb10bb32852331e601d59ae446ec4b 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/GatewayConfig.java @@ -19,7 +19,7 @@ public class GatewayConfig { @Value("${spring.rabbitmq.password}") private String brokerPassword; - @Bean + @Bean("restTemplate") public RestTemplate restTemplate() { final RestTemplate restTemplate = new RestTemplate(); restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(gatewayEndpoint)); diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/IndexInitializer.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/IndexInitializer.java index 68268cd3c26d62d6ca16b058c7155e02a0f7cbad..0592364d2de1925f1f1298e635c3ddc58d0e0e06 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/IndexInitializer.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/IndexInitializer.java @@ -11,6 +11,7 @@ import org.springframework.context.event.EventListener; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.stream.Collectors; @@ -34,6 +35,7 @@ public class IndexInitializer { this.elasticsearchOperations = elasticsearchOperations; } + @Transactional @EventListener(ApplicationReadyEvent.class) public void initIndex() { log.debug("creating identifierindex"); diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/JacksonConfig.java index 2aee74382ef95efab6aba1f09a9ad2aa86b4506e..a5c64eaa04daa81a13bbc0b0eac75cdaa70aaff9 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/JacksonConfig.java @@ -21,7 +21,6 @@ public class JacksonConfig { @Primary public ObjectMapper objectMapper() throws JsonProcessingException { final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); objectMapper.registerModule(new Jdk8Module()); objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ReadyConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ReadyConfig.java index 2c3a5d433c29af1f0f18c77ee92516e4ebe40d13..0bee3b961edd4ca456f0243c8eede630a4a54716 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ReadyConfig.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ReadyConfig.java @@ -6,14 +6,12 @@ import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.EventListener; -import javax.validation.constraints.NotNull; import java.io.File; import java.io.IOException; @Configuration public class ReadyConfig { - @NotNull @Value("${fda.ready.path}") private String readyPath; diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/TemplateConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/TemplateConfig.java index c2d1721c0ceaadb4c2f211deb9805b16b5b71c70..d38f17c6cb936e354b6b7362ccf8808476e24b47 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/TemplateConfig.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/TemplateConfig.java @@ -2,7 +2,7 @@ package at.tuwien.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.thymeleaf.spring5.SpringTemplateEngine; +import org.thymeleaf.spring6.SpringTemplateEngine; import org.thymeleaf.templatemode.TemplateMode; import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java index 04f19f375bfa824b9efcea483ba2de7b0559fc75..13a5e63de31c4e367033e2f8a88da4a487e089f5 100644 --- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java @@ -9,14 +9,16 @@ import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.util.matcher.OrRequestMatcher; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; @Configuration @EnableWebSecurity @@ -27,15 +29,26 @@ import javax.servlet.http.HttpServletResponse; bearerFormat = "JWT", scheme = "bearer" ) -public class WebSecurityConfig extends WebSecurityConfigurerAdapter { +public class WebSecurityConfig { @Bean public AuthTokenFilter authTokenFilter() { return new AuthTokenFilter(); } - @Override - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + final OrRequestMatcher internalEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/actuator/prometheus/**", "GET") + ); + final OrRequestMatcher publicEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/api/identifier/**", "GET"), + new AntPathRequestMatcher("/api/pid/**", "GET"), + new AntPathRequestMatcher("/v3/api-docs.yaml"), + new AntPathRequestMatcher("/v3/api-docs/**"), + new AntPathRequestMatcher("/swagger-ui/**"), + new AntPathRequestMatcher("/swagger-ui.html") + ); /* enable CORS and disable CSRF */ http = http.cors().and().csrf().disable(); /* set session management to stateless */ @@ -54,22 +67,18 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { } ).and(); /* set permissions on endpoints */ - http.authorizeRequests() + http.authorizeHttpRequests() /* our internal endpoints */ - .antMatchers(HttpMethod.GET, "/actuator/prometheus/**").permitAll() + .requestMatchers(internalEndpoints).permitAll() /* our public endpoints */ - .antMatchers(HttpMethod.GET, "/api/identifier/**").permitAll() - .antMatchers(HttpMethod.GET, "/api/pid/**").permitAll() - .antMatchers("/v3/api-docs.yaml", - "/v3/api-docs/**", - "/swagger-ui/**", - "/swagger-ui.html").permitAll() + .requestMatchers(publicEndpoints).permitAll() /* our private endpoints */ .anyRequest().authenticated(); /* add JWT token filter */ http.addFilterBefore(authTokenFilter(), UsernamePasswordAuthenticationFilter.class ); + return http.build(); } @Bean @@ -77,7 +86,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); - config.addAllowedOrigin("*"); + config.addAllowedOriginPattern("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); diff --git a/dbrepo-metadata-db/Dockerfile b/dbrepo-metadata-db/Dockerfile index 264b9e76f3e9a031250f8804a90c8b265a942351..58227b0c92b69a29c3ca049272d6ab443a1a48ef 100644 --- a/dbrepo-metadata-db/Dockerfile +++ b/dbrepo-metadata-db/Dockerfile @@ -1,7 +1,6 @@ ###### FIRST STAGE ###### -FROM maven:slim as build -MAINTAINER Cornelia Michlits <cornelia.michlits@tuwien.ac.at> -LABEL db=metadata +FROM maven:3-openjdk-17 as build +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> COPY ./pom.xml ./ diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java index c04f00ca75fcfd6ba16cffed53927e8f5d3c736d..ed521fccdf83f9c9ffcbdb69081624c18c863609 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ChannelDetailsDto.java @@ -1,18 +1,17 @@ package at.tuwien.api.amqp; import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; import lombok.*; - -import javax.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ChannelDetailsDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java index 0b97d003fbae89fb9fc795fa661e882a1e208459..9973c875e83cf24f69100ea6c52bd28a260d842a 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ConsumerDto.java @@ -1,17 +1,18 @@ package at.tuwien.api.amqp; import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.Parameter; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ConsumerDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java index 4cc41915033db99254c9e79fd854429222d6debd..47adfb26e44fafff8e1f64bde9d72fb1f584c8e2 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateExchangeDto.java @@ -4,15 +4,17 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class CreateExchangeDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java index f528e63ecd6750ed2c8f1e33185a1efaef4fb8bc..979925a4ad758f3b1fff8d468b9e39ce449f85b1 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateUserDto.java @@ -3,13 +3,15 @@ package at.tuwien.api.amqp; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class CreateUserDto { @JsonProperty("password_hash") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java index faa08c26d5e07096634626ac5e2f542468b6a6da..be72924306a6eec019296808e5e11845a605c0a8 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/CreateVirtualHostDto.java @@ -3,14 +3,16 @@ package at.tuwien.api.amqp; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class CreateVirtualHostDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java index aec1b744872186ffdc05aa6e81816b6dca03fe2a..6a6aceef067084ac9fbe6e92f2175d15ecac8011 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/ExchangeDto.java @@ -4,15 +4,17 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ExchangeDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java index 2bd94cdbbc630ffa36e53595da0eb55f753f7f75..8c1c2904413e5208d7098c3b629e45642a4ec997 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/GrantVirtualHostPermissionsDto.java @@ -3,14 +3,16 @@ package at.tuwien.api.amqp; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class GrantVirtualHostPermissionsDto { @NotNull @Schema(example = ".*") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java index 95713bad695ec319ec8e650d167cfa19e846addd..2bfcb7efe64b78341ff1b32e9b0fb47f954d5dff 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueBriefDto.java @@ -1,21 +1,22 @@ package at.tuwien.api.amqp; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class QueueBriefDto { @NotNull - @Schema(example = "%2F") + @Schema(example = "dbrepo") private String vhost; @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueDto.java index f3af4937782237fe8553a407163b34ed8934d8d7..27ad5ba2878ff7f59f59fb5b2cb67239361c9da9 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/QueueDto.java @@ -3,15 +3,17 @@ package at.tuwien.api.amqp; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class QueueDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/TupleDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/TupleDto.java index caf19dbc935ce207f6de2163f118a24cefd67264..3b2c66b70ee7c8340f3061345dc999df243a7c0d 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/TupleDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/TupleDto.java @@ -3,14 +3,16 @@ package at.tuwien.api.amqp; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TupleDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java index 740d94730b247bbfc18d1beef4a8208ad87f1b96..f932dfcf999f15761c13a8de0ed3c45d3bb216e1 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/amqp/UserDetailsDto.java @@ -4,14 +4,16 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserDetailsDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java index d300e6696719e5206c61e57269c26e40a71e1f3d..fd76994630fac1b0ebf1c24002aed5f51f823405 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CreateUserDto.java @@ -3,17 +3,20 @@ package at.tuwien.api.auth; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class CreateUserDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CredentialDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CredentialDto.java index fe1400d3ab94ffd7a0ce46c571ae99b5f463b7a9..591b73e8067ed8f722a1102f7216c04cc3a328a2 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CredentialDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/CredentialDto.java @@ -3,15 +3,17 @@ package at.tuwien.api.auth; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class CredentialDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/JwtResponseDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/JwtResponseDto.java index c92b4913c8d02e5f44677bd7d18cfdb0362081be..c05f053c3b1de0d0758074161a73555069b25ad4 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/JwtResponseDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/JwtResponseDto.java @@ -3,15 +3,18 @@ package at.tuwien.api.auth; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class JwtResponseDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/LoginRequestDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/LoginRequestDto.java index 87d34649f9242bc092f3fb1d3d3493539b7ee1dd..5d0de083d9a6e6612301163033e1b043c6a94f78 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/LoginRequestDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/LoginRequestDto.java @@ -3,14 +3,16 @@ package at.tuwien.api.auth; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class LoginRequestDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java index 268d959905e1043f7ac0048067f0e072cdf1e127..f3266c631e2e235c8aed1c8d6542dff2b3310f86 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/RealmAccessDto.java @@ -3,14 +3,16 @@ package at.tuwien.api.auth; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class RealmAccessDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/SignupRequestDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/SignupRequestDto.java index 3f6784bdd0eef1322ac391408e1e6e88e0b6cb5f..3cd30bc60fca15117f1173585ba5245d362d9208 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/SignupRequestDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/SignupRequestDto.java @@ -3,17 +3,19 @@ package at.tuwien.api.auth; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class SignupRequestDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/TokenIntrospectDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/TokenIntrospectDto.java index 93e38adb6f7c2c8b1eda6d018ddc35a97ce1aa82..a1756e0c9090eb64192be72f9f3b58e6d1efe954 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/TokenIntrospectDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/auth/TokenIntrospectDto.java @@ -4,14 +4,16 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TokenIntrospectDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java index 77b76c1dd2a59b4bd62033d187717995a4f692a2..6c6dbe7c05c00ceb4b4f1b4e46e4963b9b58fb13 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java @@ -7,16 +7,19 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ContainerBriefDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java index e49c5678704418c86c5cbd322031a95bb6e2cbfc..2559e8c65555789af6bc260f6b050c9fb6e6521d 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java @@ -3,13 +3,15 @@ package at.tuwien.api.container; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized @ToString public class ContainerChangeDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java index 50b82adab8372d4c3635e1c1a4dacdeb9e3eaee8..50159cb0e148b477339d1538162020b90d309248 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerCreateRequestDto.java @@ -3,13 +3,15 @@ package at.tuwien.api.container; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; @Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor +@Jacksonized @ToString public class ContainerCreateRequestDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java index e4d32aeb5df225b3b74625935640a144dd6a928a..c3a152785fa9b9f80933f2bfdfb06f133786bbce 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java @@ -8,16 +8,19 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ContainerDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java index 036a25460530d8601b5bab293339e93ed2e0f97c..3c4c5e1a21b262b8f7051059db7b06e5b9a24125 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageBriefDto.java @@ -3,15 +3,17 @@ package at.tuwien.api.container.image; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ImageBriefDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java index 5336558b858d5fd8d9e43b1f6772b2d2439922d3..3e7f14ac5448a6b7e5f064e338de38c38e32d144 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageChangeDto.java @@ -4,17 +4,20 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; + import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ImageChangeDto { @Min(value = 1024, message = "only user ports are allowed 1024-65535") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java index 78a4c5f3dc5e218f27282a01f99763bacb71b903..7da9a9cdeb0e62f83ce87db238b33717cea897bd 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageCreateDto.java @@ -5,16 +5,19 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ImageCreateDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java index 4db420f6f73c8af969c2404b5f6e4c6b9089d93d..6a1a41f20ac93ea2ef9dd367935e6642c2913e11 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java @@ -5,16 +5,19 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ImageDateDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java index a2eaeaf213119506eff83af7980c21dd1d593061..b1606bdd277615c8f837894c27a7cb311bab84ec 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java @@ -6,18 +6,21 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.math.BigInteger; import java.time.Instant; import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ImageDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageEnvItemDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageEnvItemDto.java index d07f054f62449a233c94b79df6bc93f0a7f82219..ce7115f5635847a8917540d88db87429c25ec42a 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageEnvItemDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageEnvItemDto.java @@ -4,15 +4,17 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ImageEnvItemDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java index be111aa08ccb1a04d7a8b010107ceb8bfc4f5c46..3aaedc8fc74e41e2004554bc56344a3714e664bd 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseAccessDto.java @@ -7,16 +7,19 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; import java.util.UUID; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class DatabaseAccessDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java index f227746ba793be6ab19e1b8f37667990cf231bee..bf2161981da4774757e07ea4f04c307895ab62ee 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java @@ -2,23 +2,25 @@ package at.tuwien.api.database; import at.tuwien.api.container.ContainerBriefDto; import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.user.UserBriefDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class DatabaseBriefDto { @NotNull(message = "database id is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java index 766e2a97e2bf5f1fe0a94d210f7eaa5f43fa347b..039e1070f7a4f8c7147218b20432576276b0147b 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseCreateDto.java @@ -4,15 +4,17 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class DatabaseCreateDto { @NotBlank(message = "database name is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java index 5d55626797f62f056b63ada80ef1b5dca348cc90..5715b7cd2926cb1ddf5407aa63501c3ef91dd65b 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java @@ -5,26 +5,25 @@ import at.tuwien.api.container.image.ImageDto; import at.tuwien.api.database.table.TableBriefDto; import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.user.UserBriefDto; -import at.tuwien.api.user.UserDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import org.springframework.data.elasticsearch.annotations.DateFormat; +import lombok.extern.jackson.Jacksonized; import org.springframework.data.elasticsearch.annotations.Document; -import org.springframework.data.elasticsearch.annotations.Field; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import java.time.Instant; import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString @Document(indexName = "databaseindex", createIndex = false) public class DatabaseDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseGiveAccessDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseGiveAccessDto.java index b23d904d35ac65793e75f445b69f014a4d1a4dc9..5c161e7ae7ec85471d03f1b600e9cf300200d8c4 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseGiveAccessDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseGiveAccessDto.java @@ -2,15 +2,17 @@ package at.tuwien.api.database; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class DatabaseGiveAccessDto { @NotBlank(message = "username is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyAccessDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyAccessDto.java index d8a7053c0333b902c84dde02d75ca9b42350d0f8..5d11bc57fe07936df553f62b597ef269aa8a2cc5 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyAccessDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyAccessDto.java @@ -2,14 +2,16 @@ package at.tuwien.api.database; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class DatabaseModifyAccessDto { @NotNull(message = "access type is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java index 09eba06f56017bd04e0fb8f49d052d424cbb7904..9fb05f6d09d3dbc17a38159c56adbf2ba6bf4ea3 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseModifyVisibilityDto.java @@ -4,14 +4,16 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class DatabaseModifyVisibilityDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java index f75caebecd89e5df63c8700c9b347700bd1a4d2e..d2872759097fc4b51d6b6fd9b97088cb1f58de6a 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseTransferDto.java @@ -2,14 +2,16 @@ package at.tuwien.api.database; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class DatabaseTransferDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/LicenseDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/LicenseDto.java index bf8b6b10e6d59cd1618610a71cbf52e38c61c743..e8f7109acb8adc3241fb893db48e0131bd612d57 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/LicenseDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/LicenseDto.java @@ -3,15 +3,17 @@ package at.tuwien.api.database; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class LicenseDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/SubjectModifyDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/SubjectModifyDto.java index c66c8690913f360a64a835dde823e38c55123baf..984f37b790264a2e048d32b8d8b210d5550b4936 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/SubjectModifyDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/SubjectModifyDto.java @@ -3,14 +3,16 @@ package at.tuwien.api.database; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class SubjectModifyDto { private Long id; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java index ee656d297bbe0b8261c9569554509f4908e15751..84c6230fa2c73c37a6afb413cde6d15ba985db25 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewBriefDto.java @@ -7,17 +7,20 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; import java.util.UUID; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ViewBriefDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewCreateDto.java index d4b6b81f014ce8045132851fd9e743fad56238a8..ca02de1b42faf916d6daf899a690d40416560ffd 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewCreateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewCreateDto.java @@ -4,15 +4,17 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ViewCreateDto { @NotBlank(message = "name is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java index 867e83e77178e81902a6447c5756b9fc35af13bb..7a5f80d2bca4f89a4807af09d7c5941ec5b2d264 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java @@ -6,19 +6,21 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import lombok.extern.jackson.Jacksonized; import org.springframework.data.elasticsearch.annotations.Document; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import java.time.Instant; import java.util.UUID; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString @Document(indexName = "viewindex", createIndex = false) public class ViewDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteInternalQueryDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteInternalQueryDto.java index c6434cfbf80684e2195f555138d296ccc8cab6e7..1cc1d501c825d99c564564b71b268f76f431cf56 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteInternalQueryDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteInternalQueryDto.java @@ -2,13 +2,14 @@ package at.tuwien.api.database.query; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; +import lombok.extern.jackson.Jacksonized; @Getter @Setter @Builder -@AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@AllArgsConstructor +@Jacksonized @ToString public class ExecuteInternalQueryDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java index 0754b88bbbc6ad0cf513bb9b7067f8c219c2eae0..5878f45b588a4891fd4db2668e2574ffbcae047e 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExecuteStatementDto.java @@ -4,15 +4,17 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; @Getter @Setter @Builder -@AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@AllArgsConstructor +@Jacksonized @ToString public class ExecuteStatementDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExportDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExportDto.java index 2b136bf378d400736f0a32fb0ae61e737c452aa6..b844947b836a0b2cee5771fc8ecdb022664a0b33 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExportDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ExportDto.java @@ -3,14 +3,15 @@ package at.tuwien.api.database.query; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; @Getter @Setter @Builder -@AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@AllArgsConstructor +@Jacksonized @ToString public class ExportDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ImportDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ImportDto.java index 77bad91c8b0afe4cf6c32f319e0a84e8e929ead4..bb2425edf01a315666dcf97b8a481125a5041ca0 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ImportDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/ImportDto.java @@ -5,16 +5,17 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter @Builder -@AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@AllArgsConstructor +@Jacksonized @ToString public class ImportDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java index 3f641f1a1c700d3d5ca0a284e73f830ec70fd46b..8998e84ee1c3d307516cf2dffc375074289f215c 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryBriefDto.java @@ -1,17 +1,17 @@ package at.tuwien.api.database.query; import at.tuwien.api.identifier.IdentifierBriefDto; -import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.user.UserDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; import java.util.UUID; @@ -19,9 +19,9 @@ import java.util.UUID; @Getter @Setter @Builder -@AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@AllArgsConstructor +@Jacksonized @ToString public class QueryBriefDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java index db5cb11fb743e344f8cb95d9df4e228a470c1e59..e7ebbc1cb459edd65ab3d252d0acf955e5469020 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java @@ -8,8 +8,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; import java.util.UUID; @@ -17,9 +19,9 @@ import java.util.UUID; @Getter @Setter @Builder -@AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@AllArgsConstructor +@Jacksonized @ToString public class QueryDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryResultDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryResultDto.java index a9ece1cb1dc59d4df135194fa228751370828f90..ac21249ec5f26fe582c2f48e11c99dc800b9e7a9 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryResultDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryResultDto.java @@ -4,16 +4,18 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.List; import java.util.Map; @Getter @Setter @Builder -@AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@AllArgsConstructor +@Jacksonized @ToString public class QueryResultDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java index eaf459ba16919e8add187b3d8ee97af0964fdae2..724d3da41ac0e71d52a009e1733e73c093413a55 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/query/SaveStatementDto.java @@ -3,14 +3,15 @@ package at.tuwien.api.database.query; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; @Getter @Setter @Builder -@AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@AllArgsConstructor +@Jacksonized @ToString public class SaveStatementDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java index aa4f25af3b379ac3731af006208dbe2299f2908b..ea31bf329bef2807e2ae6a24cbf2f377d8cd3245 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableBriefDto.java @@ -1,22 +1,24 @@ package at.tuwien.api.database.table; import at.tuwien.api.database.table.columns.ColumnBriefDto; -import at.tuwien.api.database.table.columns.ColumnDto; import at.tuwien.api.user.UserBriefDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TableBriefDto { @NotNull(message = "id is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateDto.java index cca2d8bec2ee7233c5ffabf62f0999c3d49433e9..775e5d0eee25d6d5f0443e9aa098ba182d81bcaa 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateDto.java @@ -5,16 +5,19 @@ import at.tuwien.api.database.table.constraints.ConstraintsCreateDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TableCreateDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java index a587587d2f9f6744df69f37468defc945f77fc06..efc3842b2908a514d20ab5af5580c97afc6a163e 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCreateRawQuery.java @@ -1,15 +1,17 @@ package at.tuwien.api.database.table; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.sql.PreparedStatement; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TableCreateRawQuery { private PreparedStatement preparedStatement; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDeleteDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDeleteDto.java index 77350153d841b998f34b175398f8aed1fc2ced42..b38edd2b415a7b317719c574349650c30e1fafe7 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDeleteDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDeleteDto.java @@ -2,15 +2,18 @@ package at.tuwien.api.database.table; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.Map; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TableCsvDeleteDto { @NotNull(message = "primary key columns are required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDto.java index cec90849d4f505cf13eae307a09547d9e951fd80..700084500c178dc78a7846efdbbe3e2edcdb0721 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvDto.java @@ -2,15 +2,18 @@ package at.tuwien.api.database.table; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.Map; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TableCsvDto { @NotNull(message = "data is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java index 6857fb96ba876023035f2fa991adeba013c30ccd..6064b71d022601edfb428511856dd455ccc8a95f 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvInformationDto.java @@ -5,15 +5,19 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.List; -@Setter @Getter +@Setter @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TableCsvInformationDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java index 43c74af87fd55c1ea775dfacf3aabd88f9d4e7f5..7fd558022fdc5eb5b11452d07dfbd31a23108f51 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableCsvUpdateDto.java @@ -2,15 +2,18 @@ package at.tuwien.api.database.table; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.Map; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TableCsvUpdateDto { @NotNull(message = "data is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java index 25315bd658cff125b4a0fba15564ec3c719d683b..cf7d14f9406c363e3791ad26a8336e506a5be034 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java @@ -8,19 +8,21 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import lombok.extern.jackson.Jacksonized; import org.springframework.data.elasticsearch.annotations.Document; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import java.time.Instant; import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString @Document(indexName = "tableindex", createIndex = false) public class TableDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java index f0cacdcfa0e887a0b500d6c918f7d70e5183fa46..74f2918dcabb7493feb2981fa427d9528c5ac7b2 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableHistoryDto.java @@ -4,15 +4,18 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TableHistoryDto { @NotNull(message = "event timestamp is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java index 66d09bb136800751d821414fd57ffb9cb45a4359..ea4d33df5de7391fd4dd940e718c121fbce3dacf 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableInsertRawQuery.java @@ -1,16 +1,18 @@ package at.tuwien.api.database.table; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.util.Collection; import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class TableInsertRawQuery { private String query; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java index 77c4b576ee298613bbe6704feabc056b008a0fd4..38ba0bff019836a9b00f128a75004740139dd385 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnBriefDto.java @@ -4,15 +4,17 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ColumnBriefDto { @NotNull(message = "id is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java index 5c7786aad0de93cef5bc11d8991caafec5811f5b..873ef4500f2b8f5f86a18204a716201a1c8270f2 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnCreateDto.java @@ -1,20 +1,20 @@ package at.tuwien.api.database.table.columns; import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.persistence.Column; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ColumnCreateDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java index e9996c708813bf9826a34afb41bf14383d3c655a..612f15d86d2408119a5adf8d095f86131918cbf3 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java @@ -8,17 +8,19 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import lombok.extern.jackson.Jacksonized; import org.springframework.data.elasticsearch.annotations.Document; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString @Document(indexName = "columnindex", createIndex = false) public class ColumnDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java index f55d9c158e900a1c8b3f6b58f1cb7a8eb553e67b..77a38f70b46b521e2cf0b03bdba4aca8fe6b48a7 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ColumnSemanticsUpdateDto.java @@ -2,13 +2,15 @@ package at.tuwien.api.database.table.columns.concepts; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ColumnSemanticsUpdateDto { @JsonProperty("concept_uri") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java index 3381397c7ec1d816c4ab5ecdd0b8b595f4a4c6e2..68b98535aacb462719a1b08f245e582950fcec88 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java @@ -4,16 +4,19 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ConceptDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java index 1ffcbe7ef8510e27f9830d15d4736db6d3fb41b1..a5429ceb9b56c9a0f687020a7f6809faf9252704 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java @@ -4,16 +4,19 @@ import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UnitDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsCreateDto.java index c741751b356b6d98c4e3c757754ed82433ec6e80..6fc2304f5d6725b2f20f88ed7a2d7987ed806d48 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsCreateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsCreateDto.java @@ -3,15 +3,17 @@ package at.tuwien.api.database.table.constraints; import at.tuwien.api.database.table.constraints.foreignKey.ForeignKeyCreateDto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ConstraintsCreateDto { private List<List<String>> uniques = null; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java index bc63fd70a0793fa8c0793cf7ecc550e43f05b92c..c6b51376c77effcff9df29b2d8970a3658a7ac58 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/ConstraintsDto.java @@ -4,15 +4,17 @@ import at.tuwien.api.database.table.columns.ColumnDto; import at.tuwien.api.database.table.constraints.foreignKey.ForeignKeyDto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ConstraintsDto { List<List<ColumnDto>> uniques; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyCreateDto.java index 52ad89bc8785f8eee60e52d17744e245a330ac15..938cd0818161f2ae94b7322d76f97f8d75836944 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyCreateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyCreateDto.java @@ -2,15 +2,17 @@ package at.tuwien.api.database.table.constraints.foreignKey; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ForeignKeyCreateDto { private List<String> columns; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java index fbd0d3b2671ba2b3a8626525a30465cd7d305d44..0764dd7349b369052a906d3b68425917f4e66ac1 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/constraints/foreignKey/ForeignKeyDto.java @@ -1,21 +1,20 @@ package at.tuwien.api.database.table.constraints.foreignKey; import at.tuwien.api.database.table.TableBriefDto; -import at.tuwien.api.database.table.TableDto; import at.tuwien.api.database.table.columns.ColumnDto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; +import lombok.extern.jackson.Jacksonized; -import javax.persistence.Entity; -import javax.persistence.Transient; import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ForeignKeyDto { private List<ColumnDto> columns; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java index e21006600b5960da616488c46f70fd224708af56..8ef874acba25e24be3ad2e8240bfea157e1cdffc 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteBody.java @@ -1,14 +1,17 @@ package at.tuwien.api.datacite; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.io.Serializable; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString public class DataCiteBody<T> implements Serializable { private DataCiteData<T> data; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java index 02a2ea99aa8f7e9c0c3a57a0ef703a80fba8dd36..ae459e429188ec2a225fad115907b635af933388 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteData.java @@ -2,14 +2,17 @@ package at.tuwien.api.datacite; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.io.Serializable; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString @JsonIgnoreProperties(ignoreUnknown = true) public class DataCiteData<T> implements Serializable { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java index 301b1483f3c82197d0ceb20a71300105c8fe3a89..dcbc312d31d2ac4ac6a5799ba96876ce9f5854f8 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/DataCiteError.java @@ -1,15 +1,17 @@ package at.tuwien.api.datacite; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.util.Map; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class DataCiteError { private String message; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java index d2c9889e42aececc7571160f76866035cda46693..24da7bc82a2cfbfd5346abd87bcfc66e6cf9dd27 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteCreateDoi.java @@ -2,16 +2,20 @@ package at.tuwien.api.datacite.doi; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.io.Serializable; import java.util.List; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString public class DataCiteCreateDoi implements Serializable { private String url; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java index 8e622553c63a1ec7b371854c50213999a9b7188e..5d3e0b2c1e30f2924e2ef6fa6dd3710f7e1d5507 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoi.java @@ -2,14 +2,17 @@ package at.tuwien.api.datacite.doi; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.io.Serializable; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString @JsonIgnoreProperties(ignoreUnknown = true) public class DataCiteDoi implements Serializable { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java index 87aa1fcbf5f346631e37fc3d819fb9946923ca89..4da70cd2ebf43fd29c3ae92be705942bf450b705 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreator.java @@ -2,15 +2,19 @@ package at.tuwien.api.datacite.doi; import lombok.*; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; + import java.io.Serializable; import java.util.List; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString public class DataCiteDoiCreator implements Serializable { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java index 3dc9f393728b9ddbf2fe9ce7eac28620ba45c808..a361452b96dcae2cb0de304df4011f88f930c790 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorAffiliation.java @@ -1,14 +1,17 @@ package at.tuwien.api.datacite.doi; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.io.Serializable; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString public class DataCiteDoiCreatorAffiliation implements Serializable { private String affiliationIdentifier; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java index b759574ba399fe0cf09c5ccfe4cc8dc43559002e..449c814171c45070a74b8e62447893f82b3ca0dc 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiCreatorNameIdentifier.java @@ -1,14 +1,17 @@ package at.tuwien.api.datacite.doi; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.io.Serializable; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString public class DataCiteDoiCreatorNameIdentifier implements Serializable { private String schemeUri; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java index ac6e084b582cdde3b038e9ab254156f2d7e255cd..d446029eae714ac0146bbe70ff7eb71d2ab5df94 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRelatedIdentifier.java @@ -1,14 +1,17 @@ package at.tuwien.api.datacite.doi; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.io.Serializable; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString public class DataCiteDoiRelatedIdentifier implements Serializable { private String relatedIdentifier; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java index ca072bb98cc17f502f454e4de3aae9d7b6162d72..4a53c7f7c5b651d5e88f2111473a443eb19a066d 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiRights.java @@ -1,14 +1,17 @@ package at.tuwien.api.datacite.doi; import lombok.*; +import lombok.extern.jackson.Jacksonized; import java.io.Serializable; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString public class DataCiteDoiRights implements Serializable { private String rights; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java index 8446813f11dbdfc6006c2c0bf40df6f04664f00d..a0358da69a1aead0263a679b3fe4ceca7ff87abb 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTitle.java @@ -3,14 +3,18 @@ package at.tuwien.api.datacite.doi; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; + import java.io.Serializable; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString public class DataCiteDoiTitle implements Serializable { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java index dcb5016867f1e0d7ac2dfa0e9b7749596558b68e..778853ce78e6ea24a2b1748b8ffbb977a9211a80 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/datacite/doi/DataCiteDoiTypes.java @@ -2,14 +2,18 @@ package at.tuwien.api.datacite.doi; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.io.Serializable; -@Data @Getter +@Setter +@Builder @NoArgsConstructor @AllArgsConstructor -@Builder +@Jacksonized +@ToString public class DataCiteDoiTypes implements Serializable { public static final DataCiteDoiTypes DATASET = DataCiteDoiTypes.builder().resourceTypeGeneral("Dataset").build(); diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java index 66a1aeda0c593413fd4e5bfb0d751e1a228dec22..4cb84a15c0747528e357329351ae53ee24fa0aea 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/error/ApiErrorDto.java @@ -2,16 +2,18 @@ package at.tuwien.api.error; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import lombok.extern.jackson.Jacksonized; import org.springframework.http.HttpStatus; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ApiErrorDto { @NotNull(message = "http status is required") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java index 51cfbbe416f0258a9e793cb44d0ea028a8d63b58..9da9afbc0b1733fa75a710e035a67ec552287f97 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/BibliographyTypeDto.java @@ -1,7 +1,9 @@ package at.tuwien.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +@Getter public enum BibliographyTypeDto { @JsonProperty("apa") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java index ad0910407b22e7c89f9e9f10a18e622a475e6cf7..c22846ccb15dd1278c8b01007d16caae491f753a 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorBriefDto.java @@ -1,17 +1,18 @@ - package at.tuwien.api.identifier; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; +import lombok.*; + +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; -import javax.validation.constraints.NotBlank; -@Data @Getter @Setter @Builder +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class CreatorBriefDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorCreateDto.java index a81faae44a361965af2638f860bf9689ddb70c2d..b0efcecedaa496a07b2cf64c8038f6ebf564466e 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorCreateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorCreateDto.java @@ -1,19 +1,18 @@ package at.tuwien.api.identifier; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; -import lombok.extern.jackson.Jacksonized; +import lombok.*; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; -@Data @Getter @Setter @Builder +@NoArgsConstructor +@AllArgsConstructor @Jacksonized +@ToString public class CreatorCreateDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java index 8423fe4120f7464b225981c608ed6d19d1c83cb2..2bcfa39f3eb923770b62b0a8c72b14ede5eaac36 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java @@ -7,14 +7,19 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; -@Data @Getter @Setter @Builder +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class CreatorDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java index 6b2f0dc3668d45d8a9dee2f5b7ceacf8e5690a15..7538b8d9dd79d6d9e7637f6d059a2409e3651ea2 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierBriefDto.java @@ -4,20 +4,22 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; +import lombok.*; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; import java.time.Instant; import java.util.List; -@Data @Getter @Setter @Builder +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class IdentifierBriefDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierCreateDto.java index e460cd8c59061e831aad1ba27c8378d5bd32e9f0..abb5b182638c1e878e404097080232b6bb893204 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierCreateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierCreateDto.java @@ -4,20 +4,22 @@ import at.tuwien.api.database.LanguageTypeDto; import at.tuwien.api.database.LicenseDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.NotEmpty; +import lombok.*; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.NotEmpty; +import lombok.extern.jackson.Jacksonized; + import java.util.List; -@Data @Getter @Setter @Builder +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class IdentifierCreateDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java index 1234beec9630665c55479a7c7929e3ffca2a86d9..592c7cfc8cd1769805a99000bb713677726bc03d 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java @@ -8,19 +8,21 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import lombok.extern.jackson.Jacksonized; import org.springframework.data.elasticsearch.annotations.Document; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import java.time.Instant; import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString @Document(indexName = "identifierindex", createIndex = false) public class IdentifierDto { diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java index 3f02e08fc18b5fde1e3c573b9d1e3dc0f3d67b4e..c30411b440d5e0247c11f9d73ffda2983dd60e12 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierTypeDto.java @@ -1,7 +1,9 @@ package at.tuwien.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +@Getter public enum IdentifierTypeDto { @JsonProperty("database") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierUpdateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierUpdateDto.java index 3827019e11f95f046770d8cd1d52ad8dc7dbba6f..ab081e42958d9e23e33ed1cf6e61c3397230bc3b 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierUpdateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierUpdateDto.java @@ -4,20 +4,22 @@ import at.tuwien.api.database.LanguageTypeDto; import at.tuwien.api.database.LicenseDto; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.NotEmpty; +import lombok.*; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.NotEmpty; +import lombok.extern.jackson.Jacksonized; + import java.util.List; -@Data @Getter @Setter @Builder +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class IdentifierUpdateDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierCreateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierCreateDto.java index f6e9e1c312954b1d29553df285232d9db83375de..a3e354cba93bdbf6bde56c88802ae36879b009d9 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierCreateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierCreateDto.java @@ -4,13 +4,15 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import lombok.extern.jackson.Jacksonized; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; -@Data @Getter @Setter @Builder +@NoArgsConstructor +@AllArgsConstructor @Jacksonized +@ToString public class RelatedIdentifierCreateDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java index b7ffb97c90ee374befd82606d1305efc49c2e55c..abc17edb91ca837dfcb2d5a7a596bd1f067c0727 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java @@ -4,17 +4,21 @@ import at.tuwien.api.user.UserDto; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.time.Instant; -@Data @Getter @Setter @Builder +@NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class RelatedIdentifierDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java index c8cef3c89f5ffabb6f8b550da211eb3a0867a2c6..1e75513abc7639b23ce5ded2169b6e5c17f02163 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedTypeDto.java @@ -1,7 +1,9 @@ package at.tuwien.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +@Getter public enum RelatedTypeDto { @JsonProperty("DOI") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java index a23d3ab8f9be1d9f4eafa6ebfc6d94f932b25ec3..fb43cc5b4617866d571690f83f14d7a75fafe248 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelationTypeDto.java @@ -1,7 +1,9 @@ package at.tuwien.api.identifier; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +@Getter public enum RelationTypeDto { @JsonProperty("IsCitedBy") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java index 57d639f9165ddbefa08a8132dd9e473039526049..d68514d42fff45a0b0f025a622847b4886906e57 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/ExchangeUpdatePermissionsDto.java @@ -3,14 +3,16 @@ package at.tuwien.api.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class ExchangeUpdatePermissionsDto { @NotBlank diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java index 3ed32c1cb646a0033b0569c82ea1867144ee843f..08a7ce10d6a8c118299b771f4225eac0500fc85c 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/GrantedAuthorityDto.java @@ -2,19 +2,18 @@ package at.tuwien.api.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@AllArgsConstructor +@Jacksonized +@ToString public class GrantedAuthorityDto { @Schema(example = "ROLE_RESEARCHER") private String authority; - - } diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java index 6c6e91a8fcdb0558b04c9eb05f659c6a9b47951c..4b2c8774352edf2f6b6c31df14f3b7e0469f2785 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/RoleTypeDto.java @@ -1,7 +1,9 @@ package at.tuwien.api.user; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +@Getter public enum RoleTypeDto { @JsonProperty("researcher") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java index fc95f67dc682ff1639116ea859f4f20bd9d1eaa0..2a46d764eebedaac8473772ec2b2d0e7b2bbb1b5 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserAttributeDto.java @@ -4,15 +4,18 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.UUID; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserAttributeDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java index 62dfb946fe85884fa91e48b745583fa253a26f80..1304c56de76a2b4106d17d6d88fde461133172a7 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java @@ -1,22 +1,21 @@ package at.tuwien.api.user; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import org.springframework.security.core.userdetails.UserDetails; -import javax.validation.constraints.NotNull; -import java.util.List; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.UUID; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserBriefDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java index 53e238e3c84c1030a99f7fff0ed544a9bcdd92ee..e72a0505ab63963281091714336ec2598f584359 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDetailsDto.java @@ -1,19 +1,21 @@ package at.tuwien.api.user; import lombok.*; +import lombok.extern.jackson.Jacksonized; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotNull; import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserDetailsDto implements UserDetails { private String id; diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java index 2c824f4acae33668863d931571e96cc9546e1f15..6197dd0697c92d29f6f0f527d69cd4375012a999 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java @@ -5,17 +5,19 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.List; import java.util.UUID; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@AllArgsConstructor +@Jacksonized +@ToString public class UserDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserEmailDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserEmailDto.java index b0bda4ebfe63cf1f7f83eb2bc393a0f61aa96bb2..0459cb96e8911efc6197abb3752e8bb09a0faa2f 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserEmailDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserEmailDto.java @@ -3,15 +3,17 @@ package at.tuwien.api.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserEmailDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserForgotDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserForgotDto.java index 2a6bf21283bb51a0bff614990c5fadbc69d49711..ffc95c3f8a6a0858961e57c5da58f1b5efbddf40 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserForgotDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserForgotDto.java @@ -3,14 +3,16 @@ package at.tuwien.api.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.Email; +import jakarta.validation.constraints.Email; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserForgotDto { @Schema(example = "jcarberry") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java index 78d9c32846f9ee4c4c89a93871e9ea57c31a58e1..5fe224ee77185d2c5601133fcd0e22ec6a2546b9 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserModifyPasswordDto.java @@ -3,14 +3,16 @@ package at.tuwien.api.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserModifyPasswordDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java index b5c70ad502f948babdd1a55e6c96cfafbb81899f..bcd21ded0249886fa44ca3e06d8be0725be3c060 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserPasswordDto.java @@ -2,14 +2,16 @@ package at.tuwien.api.user; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserPasswordDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserResetDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserResetDto.java index 938d38ae5d7f073362a167ec4ae82c4425efe497..919c3b12aff302ef9d1b14a6d287c7108d4bb753 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserResetDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserResetDto.java @@ -2,14 +2,16 @@ package at.tuwien.api.user; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserResetDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserRolesDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserRolesDto.java index df584500723a6886883d23c433455974c209a44a..06d7c83f26ffa29fcba90e8cb01993a96c185238 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserRolesDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserRolesDto.java @@ -2,15 +2,18 @@ package at.tuwien.api.user; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; + import java.util.List; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserRolesDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java index ab700636b809a187e55b47253203f75cec8e02ef..1eeadc99e387ea59df20a2b826c4a5076fa5df88 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserThemeSetDto.java @@ -4,14 +4,16 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserThemeSetDto { @NotNull diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java index a14c2e211fb3a1a6acd633f7894f1294f7f5ad49..bdc444ca6803338b020c33601d9a9992a83ff8b7 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdateDto.java @@ -2,13 +2,15 @@ package at.tuwien.api.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserUpdateDto { @Schema(example = "Josiah") diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java index dc6b9e44f3fac682864afcabdd8719679f698b68..f54d2c474999d1d4b3c613c94e761cc584f66034 100644 --- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java +++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserUpdatePermissionsDto.java @@ -3,14 +3,16 @@ package at.tuwien.api.user; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import javax.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotBlank; +import lombok.extern.jackson.Jacksonized; @Getter @Setter -@ToString @Builder -@AllArgsConstructor @NoArgsConstructor +@AllArgsConstructor +@Jacksonized +@ToString public class UserUpdatePermissionsDto { @NotBlank diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java index 9fb7d40bbf55889d576f4e526ea7a578b34e18fd..1f7921291b14c867cd4cdaff6cb02f0547b5c390 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java @@ -3,15 +3,14 @@ package at.tuwien.entities.container; import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.database.Database; import at.tuwien.entities.user.User; -import com.github.dockerjava.api.model.HealthCheck; +import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; import java.time.Instant; import java.util.UUID; @@ -34,22 +33,22 @@ public class Container { private Long id; @ToString.Exclude + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "createdBy", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID createdBy; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinColumns({ @JoinColumn(name = "createdBy", referencedColumnName = "ID", insertable = false, updatable = false) }) private User creator; @ToString.Exclude + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "ownedBy", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID ownedBy; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinColumns({ @JoinColumn(name = "ownedBy", referencedColumnName = "ID", insertable = false, updatable = false) }) @@ -72,7 +71,7 @@ public class Container { @ToString.Exclude @org.springframework.data.annotation.Transient - @OneToOne(fetch = FetchType.LAZY) + @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumns({ @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) }) @@ -89,11 +88,11 @@ public class Container { private String ipAddress; @CreatedDate - @Column(nullable = false, updatable = false) + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant created; - @Column @LastModifiedDate + @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java index 5708abaf3510e7acf7c84e6e69f6372ed2733bd4..9f0b8842782ab9b658e4fc253dd5d8e95cc05714 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java @@ -1,13 +1,13 @@ package at.tuwien.entities.container.image; import at.tuwien.entities.container.Container; +import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; import java.time.Instant; import java.util.List; @@ -47,7 +47,7 @@ public class ContainerImage { @Column private String hash; - @Column + @Column(columnDefinition = "TIMESTAMP") private Instant compiled; @Column @@ -69,12 +69,12 @@ public class ContainerImage { @OneToMany(fetch = FetchType.LAZY, mappedBy = "image") private List<Container> containers; - @Column(nullable = false, updatable = false) @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant created; - @Column @LastModifiedDate + @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; @PreRemove diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java index d593a17e250b79169b1bc895be2229edc381bddf..a4e89cb1a74a5024425c701233f4ead68ecde5fa 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java @@ -6,7 +6,7 @@ import org.hibernate.annotations.GenericGenerator; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.time.Instant; @Data @@ -50,7 +50,7 @@ public class ContainerImageDate { @CreatedDate @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC") - @Column(name = "created_at", nullable = false, updatable = false) + @Column(name = "created_at", nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant createdAt; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java index 8891b85f23634dd65f392e9dc9f8b1a9ad5c5cd4..9b4e64a526c2166cb74ad3c9befa6786962b576f 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java @@ -6,7 +6,7 @@ import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.time.Instant; @Data @@ -50,12 +50,12 @@ public class ContainerImageEnvironmentItem { }) private ContainerImage image; - @Column(nullable = false, updatable = false) @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant created; - @Column @LastModifiedDate + @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItemType.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItemType.java index b618cdd2ed2b65652424dd743e5c3f87e1636bef..2136ba805954b1bb65b14f6dc7f6f75595eeb42b 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItemType.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItemType.java @@ -1,5 +1,8 @@ package at.tuwien.entities.container.image; public enum ContainerImageEnvironmentItemType { - USERNAME, PASSWORD, PRIVILEGED_USERNAME, PRIVILEGED_PASSWORD; + USERNAME, + PASSWORD, + PRIVILEGED_USERNAME, + PRIVILEGED_PASSWORD; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java index c02cf1a3ca0cc070d5ed0d1251b58e0e6eca440c..e987416bc7c1e06aeaa54f2778ac58fb7f1e7317 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java @@ -10,9 +10,9 @@ import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; -import javax.persistence.CascadeType; -import javax.persistence.Entity; +import jakarta.persistence.*;; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Entity; import java.io.Serializable; import java.time.Instant; import java.util.List; @@ -25,7 +25,7 @@ import java.util.UUID; @AllArgsConstructor @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) -@javax.persistence.Table(name = "mdb_databases", uniqueConstraints = { +@jakarta.persistence.Table(name = "mdb_databases", uniqueConstraints = { @UniqueConstraint(columnNames = {"id", "internalName"}) }) public class Database implements Serializable { @@ -36,23 +36,22 @@ public class Database implements Serializable { private Long id; @ToString.Exclude + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "created_by", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID createdBy; - @Type(type = "uuid-char") - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinColumns({ @JoinColumn(name = "created_by", referencedColumnName = "ID", insertable = false, updatable = false) }) private User creator; @ToString.Exclude + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "owned_by", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID ownedBy; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinColumns({ @JoinColumn(name = "owned_by", referencedColumnName = "ID", insertable = false, updatable = false) }) @@ -60,7 +59,7 @@ public class Database implements Serializable { @ToString.Exclude @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinColumns({ @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) }) @@ -79,18 +78,17 @@ public class Database implements Serializable { private String description; @ToString.Exclude + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "contact_person", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID contactPerson; - @Type(type = "uuid-char") - @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) @JoinColumns({ @JoinColumn(name = "contact_person", referencedColumnName = "ID", updatable = false, insertable = false) }) private User contact; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinColumnsOrFormulas({ @JoinColumnOrFormula(formula = @JoinFormula(value = "'DATABASE'", referencedColumnName = "identifier_type")), @JoinColumnOrFormula(column = @JoinColumn(name = "id", referencedColumnName = "dbid", insertable = false, updatable = false)), @@ -99,7 +97,7 @@ public class Database implements Serializable { @ToString.Exclude @org.springframework.data.annotation.Transient - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumns({ @JoinColumn(name = "tdbid", referencedColumnName = "id", insertable = false, updatable = false) }) @@ -107,7 +105,7 @@ public class Database implements Serializable { @ToString.Exclude @org.springframework.data.annotation.Transient - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumns({ @JoinColumn(name = "vdbid", referencedColumnName = "id", insertable = false, updatable = false) }) @@ -116,12 +114,12 @@ public class Database implements Serializable { @Column(nullable = false) private Boolean isPublic; - @Column(nullable = false, updatable = false) @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant created; - @Column @LastModifiedDate + @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java index 19d71711fe5c8badea79eb4f3b3233cb72037e48..ee3058130dd38934e4a34c39b06ff13985bb802b 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/DatabaseAccess.java @@ -2,11 +2,11 @@ package at.tuwien.entities.database; import at.tuwien.entities.user.User; import lombok.*; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.time.Instant; import java.util.UUID; @@ -18,12 +18,12 @@ import java.util.UUID; @NoArgsConstructor @IdClass(DatabaseAccessKey.class) @EntityListeners(AuditingEntityListener.class) -@javax.persistence.Table(name = "mdb_have_access") +@jakarta.persistence.Table(name = "mdb_have_access") public class DatabaseAccess { @Id - @Type(type = "uuid-char") @EqualsAndHashCode.Include + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "user_id", updatable = false, columnDefinition = "VARCHAR(36)") private UUID huserid; @@ -43,7 +43,7 @@ public class DatabaseAccess { @Enumerated(EnumType.STRING) private AccessType type; - @Column(nullable = false, updatable = false) + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") @CreatedDate private Instant created; diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/License.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/License.java index baad81f5a3024ca1a98f0b8d262500c8bf0d2407..5159794d7798a1ddc98a4bf1528b9fb2b4655832 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/License.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/License.java @@ -3,7 +3,7 @@ package at.tuwien.entities.database; import lombok.*; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; @Data @Entity @@ -12,7 +12,7 @@ import javax.persistence.*; @AllArgsConstructor @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) -@javax.persistence.Table(name = "mdb_licenses", uniqueConstraints = { +@jakarta.persistence.Table(name = "mdb_licenses", uniqueConstraints = { @UniqueConstraint(columnNames = {"uri"}) }) public class License { diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java index 90cca36bed3dd9134e9e339be307564300a0e01d..a538086f8c6c30bd2c39293fd2a711d592a427c6 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java @@ -5,13 +5,12 @@ import at.tuwien.entities.user.User; import lombok.*; import net.sf.jsqlparser.statement.select.FromItem; import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.time.Instant; import java.util.List; import java.util.UUID; @@ -22,9 +21,15 @@ import java.util.UUID; @ToString @AllArgsConstructor @NoArgsConstructor -@IdClass(ViewKey.class) +@IdClass(at.tuwien.entities.database.ViewKey.class) @EntityListeners(AuditingEntityListener.class) -@javax.persistence.Table(name = "mdb_view") +@jakarta.persistence.Table(name = "mdb_view") +@NamedQueries({ + @NamedQuery(name = "View.findAllPublicByDatabaseId", query = "select v from View v where v.database.id = ?1 and v.isPublic = true"), + @NamedQuery(name = "View.findAllPublicOrMineByDatabaseId", query = "select v from View v where v.database.id = ?1 and (v.isPublic = true or v.creator.username = ?2)"), + @NamedQuery(name = "View.findPublicByDatabaseIdAndId", query = "select v from View v where v.database.id = ?1 and v.id = ?2 and v.isPublic = true"), + @NamedQuery(name = "View.findPublicOrMineByDatabaseIdAndId", query = "select v from View v where v.database.id = ?1 and v.id = ?2 and (v.isPublic = true or v.creator.username = ?3)") +}) public class View { @Id @@ -43,8 +48,8 @@ public class View { private Long vdbid; @ToString.Exclude + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "createdBy", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID createdBy; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @@ -56,7 +61,7 @@ public class View { @ToString.Exclude @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @JoinColumn(name = "vdbid", insertable = false, updatable = false) - private Database database; + private at.tuwien.entities.database.Database database; @Column(name = "vname", nullable = false) private String name; @@ -106,12 +111,12 @@ public class View { @OrderColumn(name = "position") private List<TableColumn> columns; - @Column(nullable = false, updatable = false) @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant created; - @Column @LastModifiedDate + @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java index 75b506a6c6aff6ef94051ff6caee2e760b3dcef9..a6fe347eabec02abbd4c0516ed16ea7d27b8eca7 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java @@ -11,7 +11,7 @@ import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.time.Instant; import java.util.List; @@ -23,7 +23,7 @@ import java.util.List; @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) @IdClass(TableKey.class) -@javax.persistence.Table(name = "mdb_tables", uniqueConstraints = { +@jakarta.persistence.Table(name = "mdb_tables", uniqueConstraints = { @UniqueConstraint(columnNames = {"tdbid", "internalName"}) }) public class Table { @@ -78,12 +78,12 @@ public class Table { @Embedded private Constraints constraints; - @Column(nullable = false, updatable = false) @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant created; - @Column @LastModifiedDate + @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; @PreRemove diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java index 02ad037bd67f2247460bd268af91d674e8b81c70..753f448c4d6005c7caf9c5f6728dc74d58febefe 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java @@ -6,15 +6,13 @@ import at.tuwien.entities.user.User; import lombok.*; import net.sf.jsqlparser.statement.select.SelectItem; import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.time.Instant; import java.util.List; -import java.util.UUID; @Data @Entity @@ -24,7 +22,7 @@ import java.util.UUID; @NoArgsConstructor @IdClass(TableColumnKey.class) @EntityListeners(AuditingEntityListener.class) -@javax.persistence.Table(name = "mdb_columns", uniqueConstraints = { +@jakarta.persistence.Table(name = "mdb_columns", uniqueConstraints = { @UniqueConstraint(columnNames = {"tid", "internalName"}) }) public class TableColumn implements Comparable<TableColumn> { @@ -102,11 +100,11 @@ public class TableColumn implements Comparable<TableColumn> { @Column(nullable = false) private Integer ordinalPosition; - @Column(nullable = false, updatable = false) + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") @CreatedDate private Instant created; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinTable(name = "mdb_columns_concepts", joinColumns = { @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false), @@ -116,7 +114,7 @@ public class TableColumn implements Comparable<TableColumn> { inverseJoinColumns = @JoinColumn(name = "uri", referencedColumnName = "uri")) private TableColumnConcept concept; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinTable(name = "mdb_columns_units", joinColumns = { @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false), @@ -126,8 +124,8 @@ public class TableColumn implements Comparable<TableColumn> { inverseJoinColumns = @JoinColumn(name = "uri", referencedColumnName = "uri")) private TableColumnUnit unit; - @Column @LastModifiedDate + @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; @Override diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java index a06f93e2dbc4ed9d19ddb4c7a899eb6e75a8a4ea..a74c967e606346a66c51220d422b5d77ae154ab5 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnConcept.java @@ -1,10 +1,13 @@ package at.tuwien.entities.database.table.columns; import lombok.*; +import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; +import java.net.URI; +import java.sql.Types; import java.time.Instant; import java.util.List; @@ -16,7 +19,7 @@ import java.util.List; @ToString @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@javax.persistence.Table(name = "mdb_concepts") +@jakarta.persistence.Table(name = "mdb_concepts") public class TableColumnConcept { @Id @@ -29,7 +32,7 @@ public class TableColumnConcept { @org.springframework.data.annotation.Transient @ToString.Exclude - @OneToMany(fetch = FetchType.LAZY) + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST) @JoinTable(name = "mdb_columns_concepts", joinColumns = @JoinColumn(name = "uri", referencedColumnName = "uri", insertable = false, updatable = false), inverseJoinColumns = { @@ -39,7 +42,7 @@ public class TableColumnConcept { }) private List<TableColumn> columns; - @Column(nullable = false, updatable = false) + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") @CreatedDate private Instant created; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java index 114d08e789fa9547ca63766fbe338b6fac7f0611..fe1ad3725ef12c6000e66a3c173b90697a5e41e9 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumnUnit.java @@ -1,10 +1,13 @@ package at.tuwien.entities.database.table.columns; import lombok.*; +import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; +import java.net.URI; +import java.sql.Types; import java.time.Instant; import java.util.List; @@ -16,7 +19,7 @@ import java.util.List; @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@javax.persistence.Table(name = "mdb_units") +@jakarta.persistence.Table(name = "mdb_units") public class TableColumnUnit { @Id @@ -27,19 +30,7 @@ public class TableColumnUnit { @Column(name = "name", nullable = false) private String name; - @org.springframework.data.annotation.Transient - @ToString.Exclude - @OneToMany(fetch = FetchType.LAZY) - @JoinTable(name = "mdb_columns_units", - joinColumns = @JoinColumn(name = "uri", referencedColumnName = "uri", insertable = false, updatable = false), - inverseJoinColumns = { - @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false), - @JoinColumn(name = "tid", referencedColumnName = "tid", insertable = false, updatable = false), - @JoinColumn(name = "cdbid", referencedColumnName = "cdbid", insertable = false, updatable = false) - }) - private List<TableColumn> columns; - - @Column(nullable = false, updatable = false) + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") @CreatedDate private Instant created; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java index c2c5768a252d559f56fc98e526cd57e7c69f7ba6..229b19ed647e64e4c67961e615fef8bd02551d49 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/Constraints.java @@ -4,7 +4,7 @@ import at.tuwien.entities.database.table.constraints.foreignKey.ForeignKey; import at.tuwien.entities.database.table.constraints.unique.Unique; import lombok.*; -import javax.persistence.*; +import jakarta.persistence.*;; import java.util.List; import java.util.Set; diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java index c68cc278517075bce0f9dcbddd1ef9aebdc893f5..e6daef3333fa626d35fbbe18c41c8a0b1799dc09 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKey.java @@ -5,7 +5,7 @@ import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.util.List; @Data @@ -16,7 +16,7 @@ import java.util.List; @ToString @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@javax.persistence.Table(name = "mdb_constraints_foreign_key") +@jakarta.persistence.Table(name = "mdb_constraints_foreign_key") public class ForeignKey { @Id @@ -59,9 +59,11 @@ public class ForeignKey { @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE, mappedBy = "foreignKey") private List<ForeignKeyReference> references = new java.util.ArrayList<>(); - @Column + @Column(columnDefinition = "VARCHAR(50)") + @Enumerated(EnumType.STRING) private ReferenceType onUpdate; - @Column + @Column(columnDefinition = "VARCHAR(50)") + @Enumerated(EnumType.STRING) private ReferenceType onDelete; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java index 892c07cc43e1ed94607f219eee31b4b136c35251..0f58ed646278c7f95ce6135d8c7e076b9c4746ca 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ForeignKeyReference.java @@ -5,7 +5,7 @@ import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; @Data @Entity @@ -15,7 +15,7 @@ import javax.persistence.*; @ToString @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@javax.persistence.Table(name = "mdb_constraints_foreign_key_reference") +@jakarta.persistence.Table(name = "mdb_constraints_foreign_key_reference") public class ForeignKeyReference { @Id diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java index 9afc40853f878faaee98eb5f747a543ae693dc8a..88be5c81aa918ec6c310bb5ed98eaec3842483f6 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/foreignKey/ReferenceType.java @@ -1,6 +1,5 @@ package at.tuwien.entities.database.table.constraints.foreignKey; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.ToString; diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java index 7be883b78ee3b7e1c7191e540810ffa0b528bf3c..0ae83427f4d59022689203ca3a6d8522e7f2d2c3 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/constraints/unique/Unique.java @@ -6,9 +6,8 @@ import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.util.List; -import java.util.Set; @Data @Entity @@ -18,7 +17,7 @@ import java.util.Set; @ToString @EntityListeners(AuditingEntityListener.class) @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@javax.persistence.Table(name = "mdb_constraints_unique") +@jakarta.persistence.Table(name = "mdb_constraints_unique") public class Unique { @Id diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java index 740fe5a4e5cbf278d49e56942287b4bcbe0e17e4..a29ac15d37b4502e083f44af8f054fb4d21584e9 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java @@ -3,14 +3,12 @@ package at.tuwien.entities.identifier; import at.tuwien.entities.user.User; import lombok.*; import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.time.Instant; -import java.util.UUID; @Data @Entity @@ -52,8 +50,8 @@ public class Creator { @JoinColumn(name = "pid", referencedColumnName = "id", insertable = false, updatable = false) private Identifier identifier; - @Column(nullable = false, updatable = false) @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant created; @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @@ -62,8 +60,8 @@ public class Creator { }) private User creator; - @Column @LastModifiedDate + @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java index 6210ab7c35d4215f5d8090a7d9064dcd0b54f839..56a8b87a9df1f55180fbed30812fc6cfa499ba2b 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java @@ -10,8 +10,8 @@ import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; -import javax.validation.constraints.NotBlank; +import jakarta.persistence.*;; +import jakarta.validation.constraints.NotBlank; import java.io.Serializable; import java.time.Instant; import java.util.List; @@ -23,7 +23,7 @@ import java.util.List; @AllArgsConstructor @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) -@javax.persistence.Table(name = "mdb_identifiers", uniqueConstraints = { +@jakarta.persistence.Table(name = "mdb_identifiers", uniqueConstraints = { @UniqueConstraint(columnNames = {"qid", "cid", "dbid"}) }) public class Identifier implements Serializable { @@ -60,7 +60,7 @@ public class Identifier implements Serializable { @Column(nullable = false) private String publisher; - @Column(columnDefinition = "enum('EN', 'DE', 'OTHER')") + @Column(columnDefinition = "enum('AB','AA','AF','AK','SQ','AM','AR','AN','HY','AS','AV','AE','AY','AZ','BM','BA','EU','BE','BN','BH','BI','BS','BR','BG','MY','CA','KM','CH','CE','NY','ZH','CU','CV','KW','CO','CR','HR','CS','DA','DV','NL','DZ','EN','EO','ET','EE','FO','FJ','FI','FR','FF','GD','GL','LG','KA','DE','KI','EL','KL','GN','GU','HT','HA','HE','HZ','HI','HO','HU','IS','IO','IG','ID','IA','IE','IU','IK','GA','IT','JA','JV','KN','KR','KS','KK','RW','KV','KG','KO','KJ','KU','KY','LO','LA','LV','LB','LI','LN','LT','LU','MK','MG','MS','ML','MT','GV','MI','MR','MH','RO','MN','NA','NV','ND','NG','NE','SE','NO','NB','NN','II','OC','OJ','OR','OM','OS','PI','PA','PS','FA','PL','PT','QU','RM','RN','RU','SM','SG','SA','SC','SR','SN','SD','SI','SK','SL','SO','ST','NR','ES','SU','SW','SS','SV','TL','TY','TG','TA','TT','TE','TH','BO','TI','TO','TS','TN','TR','TK','TW','UG','UK','UR','UZ','VE','VI','VO','WA','CY','FY','WO','XH','YI','YO','ZA','ZU')") @Enumerated(EnumType.STRING) private LanguageType language; @@ -86,7 +86,7 @@ public class Identifier implements Serializable { @Column private String resultHash; - @Column + @Column(updatable = false, columnDefinition = "TIMESTAMP") private Instant execution; @Column @@ -123,12 +123,12 @@ public class Identifier implements Serializable { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "identifier") private List<Creator> creators; - @Column(nullable = false, updatable = false) @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant created; - @Column @LastModifiedDate + @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; @PreRemove diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java index 54b90615a794dba57c251e1fe622704507f1d448..bc658fc46a7af07762f418a2cb1ee5ac2f0fa6fc 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/RelatedIdentifier.java @@ -3,16 +3,12 @@ package at.tuwien.entities.identifier; import at.tuwien.entities.user.User; import lombok.*; import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.SQLDelete; -import org.hibernate.annotations.Type; -import org.hibernate.annotations.Where; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.time.Instant; -import java.util.UUID; @Data @Entity @@ -56,12 +52,12 @@ public class RelatedIdentifier { }) private User creator; - @Column(nullable = false, updatable = false) @CreatedDate + @Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP") private Instant created; - @Column @LastModifiedDate + @Column(columnDefinition = "TIMESTAMP") private Instant lastModified; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Credential.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Credential.java index 85dafd353db73deaab0c2706e52f584bdf28a760..1176dc94704d374972c85744d4d52035e6993a07 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Credential.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Credential.java @@ -1,11 +1,10 @@ package at.tuwien.entities.user; import lombok.*; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.util.UUID; @Data @@ -21,15 +20,15 @@ public class Credential { @Id @EqualsAndHashCode.Include + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "ID", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID id; @Column(nullable = false) private String type; + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "user_id", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID userId; @Column(nullable = false) diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Realm.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Realm.java index 3890974c2ee82062e526a6636e584420c9a18522..77d350fb002843974b1bd3179abdf5dc95f4d593 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Realm.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Realm.java @@ -1,12 +1,10 @@ package at.tuwien.entities.user; import lombok.*; -import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Immutable; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; -import javax.persistence.*; -import java.util.List; +import jakarta.persistence.*; import java.util.UUID; @Data @@ -25,8 +23,8 @@ public class Realm { @Id @EqualsAndHashCode.Include + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "ID", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID id; @Column(nullable = false) diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Role.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Role.java index 17a0446bc87509b8ddb4754815b8e4f18fb06e57..20fdb812d03fa6e662fd278eb4c4d541d2188bbf 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Role.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/Role.java @@ -2,10 +2,10 @@ package at.tuwien.entities.user; import lombok.*; import org.hibernate.annotations.Immutable; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.util.List; import java.util.UUID; @@ -23,15 +23,15 @@ public class Role { @Id @EqualsAndHashCode.Include + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "ID", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID id; @Column(name = "NAME", nullable = false) private String name; + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "REALM_ID", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID realmId; @ToString.Exclude diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java index 08d5df4b4d1ae70f6dbe15dd86cd45352141003c..6e167d2e170bf947b15dcb4ad4461c84913a631b 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/RoleMapping.java @@ -1,10 +1,10 @@ package at.tuwien.entities.user; import lombok.*; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.util.UUID; @Data @@ -23,14 +23,14 @@ public class RoleMapping { @Id @EqualsAndHashCode.Include + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "USER_ID", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID userId; @Id @EqualsAndHashCode.Include + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "ROLE_ID", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID roleId; } diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java index 109e63b06dc8f96e0ddfce6328901f5c34fc87ca..551acd615d9afcee94f4940ef1a8f1da41518672 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/User.java @@ -4,12 +4,11 @@ import at.tuwien.entities.container.Container; import at.tuwien.entities.database.Database; import at.tuwien.entities.identifier.Identifier; import lombok.*; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import org.springframework.security.core.Authentication; -import javax.persistence.*; +import jakarta.persistence.*;; import java.security.Principal; import java.util.List; import java.util.UUID; @@ -35,8 +34,8 @@ public class User { @Id @EqualsAndHashCode.Include + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "ID", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID id; @Column(nullable = false) @@ -48,8 +47,8 @@ public class User { @Column(name = "LAST_NAME") private String lastname; + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "REALM_ID", columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID realmId; @Column(nullable = false) diff --git a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java index bbc19e8ef83978cb0a0d494ee7f77dcd1c45fe67..8136ea1512d52f96ea27595adac3ed8a4fa91fb6 100644 --- a/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java +++ b/dbrepo-metadata-db/entities/src/main/java/at/tuwien/entities/user/UserAttribute.java @@ -1,11 +1,10 @@ package at.tuwien.entities.user; import lombok.*; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Type; +import org.hibernate.annotations.JdbcTypeCode; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; +import jakarta.persistence.*;; import java.util.UUID; @Data @@ -21,13 +20,13 @@ public class UserAttribute { @Id @EqualsAndHashCode.Include + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "ID", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID id; @ToString.Exclude + @JdbcTypeCode(java.sql.Types.VARCHAR) @Column(name = "USER_ID", nullable = false, columnDefinition = "VARCHAR(36)") - @Type(type = "uuid-char") private UUID userId; @Column(name = "NAME", nullable = false) diff --git a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiErrorType.java b/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiErrorType.java similarity index 97% rename from dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiErrorType.java rename to dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiErrorType.java index cdad05572a99b7af600fda3779942e9c35c574a5..2fe750a9adaf60b89865d6beed08413205f7e534 100644 --- a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiErrorType.java +++ b/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiErrorType.java @@ -1,4 +1,4 @@ -package at.tuwien; +package at.tuwien.oaipmh; import lombok.Getter; diff --git a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiListIdentifiersParameters.java b/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiListIdentifiersParameters.java similarity index 98% rename from dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiListIdentifiersParameters.java rename to dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiListIdentifiersParameters.java index 0bb4b34d3b8a2fd2c31d41fb9daec0e47eef68c7..f08b1f6868e7e8517b55411636648b90ba0eabc7 100644 --- a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiListIdentifiersParameters.java +++ b/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiListIdentifiersParameters.java @@ -1,4 +1,4 @@ -package at.tuwien; +package at.tuwien.oaipmh; import lombok.*; import org.apache.commons.lang3.StringUtils; diff --git a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiListRecordsParameters.java b/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiListRecordsParameters.java similarity index 98% rename from dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiListRecordsParameters.java rename to dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiListRecordsParameters.java index 90df3384c6fe3c6227fc13b44f383be6ef3acf13..0e540d71918ec83ef33321101da33925e0682227 100644 --- a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiListRecordsParameters.java +++ b/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiListRecordsParameters.java @@ -1,4 +1,4 @@ -package at.tuwien; +package at.tuwien.oaipmh; import lombok.*; import org.apache.commons.lang3.StringUtils; diff --git a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiRecordParameters.java b/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiRecordParameters.java similarity index 77% rename from dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiRecordParameters.java rename to dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiRecordParameters.java index 6dcb5ec0d0d706907d049a34d7450551a588a607..834a482885d1cc67c5530b2167142626c180667d 100644 --- a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/OaiRecordParameters.java +++ b/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/OaiRecordParameters.java @@ -1,11 +1,6 @@ -package at.tuwien; +package at.tuwien.oaipmh; import lombok.*; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.time.DateUtils; - -import java.text.ParseException; -import java.util.Date; @Getter @Setter diff --git a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/RequestParameters.java b/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/RequestParameters.java similarity index 93% rename from dbrepo-metadata-db/oai/src/main/java/at/tuwien/RequestParameters.java rename to dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/RequestParameters.java index 1364e537983399ce2e588cf76fc0068c539a1867..3f3d9f1a0468f006a24a0467c0a11f09671d1035 100644 --- a/dbrepo-metadata-db/oai/src/main/java/at/tuwien/RequestParameters.java +++ b/dbrepo-metadata-db/oai/src/main/java/at/tuwien/oaipmh/RequestParameters.java @@ -1,4 +1,4 @@ -package at.tuwien; +package at.tuwien.oaipmh; import org.apache.commons.lang3.StringUtils; diff --git a/dbrepo-metadata-db/pom.xml b/dbrepo-metadata-db/pom.xml index 5a0d2c25ae82a6bbf84780706dbb49be7611d5ce..924d8d9c0790e83aea8d88b72ca6d26d409a9b15 100644 --- a/dbrepo-metadata-db/pom.xml +++ b/dbrepo-metadata-db/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.4.3</version> + <version>3.0.6</version> </parent> <groupId>at.tuwien</groupId> @@ -24,17 +24,12 @@ </modules> <properties> - <java.version>11</java.version> + <java.version>17</java.version> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> - <spring-cloud.version>Hoxton.SR8</spring-cloud.version> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <docker.version>3.2.7</docker.version> - <testcontainers.version>1.15.2</testcontainers.version> - <swagger.version>2.1.7</swagger.version> - <springfox.version>3.0.0</springfox.version> - <jsql.version>3.1</jsql.version> - <jackson-datatype.version>2.13.3</jackson-datatype.version> + <docker.version>3.3.0</docker.version> + <jsql-parser.version>4.6</jsql-parser.version> + <jackson-datatype.version>2.15.0</jackson-datatype.version> <commons.version>2.11.0</commons.version> </properties> @@ -47,27 +42,11 @@ <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> - <version>3.0.1</version> - <exclusions> - <exclusion> - <groupId>javax.ws.rs</groupId> - <artifactId>jsr311-api</artifactId> - </exclusion> - </exclusions> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- DataSource --> - <dependency> - <groupId>org.postgresql</groupId> - <artifactId>postgresql</artifactId> - <scope>runtime</scope> - </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> @@ -83,11 +62,17 @@ <artifactId>commons-io</artifactId> <version>${commons.version}</version> </dependency> + <!-- Utils --> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + <version>31.1-jre</version> + </dependency> <!-- SQL Parser --> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> - <version>${jsql.version}</version> + <version>${jsql-parser.version}</version> </dependency> <!-- IDE --> <dependency> diff --git a/dbrepo-metadata-db/querystore/src/main/java/at/tuwien/querystore/Query.java b/dbrepo-metadata-db/querystore/src/main/java/at/tuwien/querystore/Query.java index f589913ec36b76fdc99fe90dff41b3ecae5d060f..e6925b48c5bfa30a1b568d7647358233e5daf2c2 100644 --- a/dbrepo-metadata-db/querystore/src/main/java/at/tuwien/querystore/Query.java +++ b/dbrepo-metadata-db/querystore/src/main/java/at/tuwien/querystore/Query.java @@ -4,20 +4,15 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import javax.persistence.*; -import javax.persistence.Column; -import javax.persistence.Table; +import jakarta.persistence.*;; import java.io.Serializable; -import java.math.BigInteger; import java.time.Instant; -import java.util.List; @Data @Entity -@javax.persistence.Table(name = "qs_queries") +@jakarta.persistence.Table(name = "qs_queries") @Builder @AllArgsConstructor @NoArgsConstructor @@ -35,37 +30,37 @@ public class Query implements Serializable { ) private Long id; - @javax.persistence.Column(nullable = false, columnDefinition = "TEXT") + @jakarta.persistence.Column(nullable = false, columnDefinition = "TEXT") @Schema(example = "SELECT `id` FROM `air_quality`") private String query; - @javax.persistence.Column(name = "query_normalized", columnDefinition = "TEXT") + @jakarta.persistence.Column(name = "query_normalized", columnDefinition = "TEXT") @Schema(example = "SELECT `id` FROM `air_quality`") private String queryNormalized; - @javax.persistence.Column(name = "query_hash", nullable = false) + @jakarta.persistence.Column(name = "query_hash", nullable = false) @Schema(example = "17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76") private String queryHash; - @javax.persistence.Column(name = "result_hash") + @jakarta.persistence.Column(name = "result_hash") @Schema(example = "17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76") private String resultHash; - @javax.persistence.Column(name = "result_number") + @jakarta.persistence.Column(name = "result_number") @Schema(example = "1") private Long resultNumber; - @javax.persistence.Column(nullable = false) + @jakarta.persistence.Column(nullable = false) private Boolean isPersisted; - @javax.persistence.Column(nullable = false, updatable = false) + @jakarta.persistence.Column(nullable = false, updatable = false) @CreatedDate private Instant created; - @javax.persistence.Column(nullable = false, updatable = false) + @jakarta.persistence.Column(nullable = false, updatable = false) private Instant executed; - @javax.persistence.Column(nullable = false) + @jakarta.persistence.Column(nullable = false) private String createdBy; } diff --git a/dbrepo-metadata-db/setup-schema.sql b/dbrepo-metadata-db/setup-schema.sql index 9529463f2471d5163e4be25ad923caaf56da1ba1..eb7809d1409e253272d63244c3ec444f14220b81 100644 --- a/dbrepo-metadata-db/setup-schema.sql +++ b/dbrepo-metadata-db/setup-schema.sql @@ -212,14 +212,14 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_columns_cat` CREATE TABLE IF NOT EXISTS `fda`.`mdb_constraints_foreign_key` ( - fkid BIGINT NOT NULL AUTO_INCREMENT, - tid BIGINT NOT NULL, - tdbid BIGINT NOT NULL, - rtid BIGINT NOT NULL, - rtdbid BIGINT NOT NULL, - on_update INT NULL, - on_delete INT NULL, - position INT NULL, + fkid BIGINT NOT NULL AUTO_INCREMENT, + tid BIGINT NOT NULL, + tdbid BIGINT NOT NULL, + rtid BIGINT NOT NULL, + rtdbid BIGINT NOT NULL, + on_update VARCHAR(50) NULL, + on_delete VARCHAR(50) NULL, + position INT NULL, PRIMARY KEY (fkid), FOREIGN KEY (tid, tdbid) REFERENCES mdb_tables (id, tdbid), FOREIGN KEY (rtid, rtdbid) REFERENCES mdb_tables (id, tdbid) diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/H2Utils.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/H2Utils.java index 82ec75d14a3d001a36116db2a186faa0a58b4044..a1f0e6a838b1d003e3802671a042ce7bb87ea1cc 100644 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/H2Utils.java +++ b/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/H2Utils.java @@ -6,7 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import javax.persistence.EntityManager; +import jakarta.persistence.EntityManager; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/RabbitMqConfig.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/RabbitMqConfig.java index e4000c7a04ff10a86cdbaba2316806b62024532e..d30b321b0b27a36e6043176b1c14ac963ae0830f 100644 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/RabbitMqConfig.java +++ b/dbrepo-metadata-db/test/src/main/java/at/tuwien/config/RabbitMqConfig.java @@ -30,7 +30,7 @@ public class RabbitMqConfig { public List<ConsumerDto> findAllConsumers() throws IOException { log.trace("gateway broker find all consumers"); - final URI findUri = URI.create("http://dbrepo-broker-service:15672/api/consumers/%2F"); + final URI findUri = URI.create("http://dbrepo-broker-service:15672/api/consumers/dbrepo"); final ResponseEntity<List<ConsumerDto>> response = restTemplate.exchange(findUri, HttpMethod.GET, new HttpEntity<>(null, getHeaders()), new ParameterizedTypeReference<>() { }); diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java index d7d6dfe12d62ce9ea4b56c533db8a0431284a881..6b7999512855a54b27e1b11eb0b613918c3e49c3 100644 --- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java +++ b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java @@ -812,7 +812,7 @@ public abstract class BaseTest { public final static Long IMAGE_ELASTIC_ID = 3L; public final static String IMAGE_ELASTIC_REPOSITORY = "elasticsearch"; - public final static String IMAGE_ELASTIC_TAG = "7.13.4"; + public final static String IMAGE_ELASTIC_TAG = "8.7.1"; public final static ContainerImage IMAGE_ELASTIC = ContainerImage.builder() .id(IMAGE_ELASTIC_ID) @@ -2338,7 +2338,6 @@ public abstract class BaseTest { .createdBy(USER_1_USERNAME) .isPersisted(QUERY_1_PERSISTED) .executed(QUERY_1_EXECUTION) - .created(QUERY_1_CREATED) .build(); public final static QueryDto QUERY_1_DTO = QueryDto.builder() @@ -2349,9 +2348,9 @@ public abstract class BaseTest { .queryHash(QUERY_1_QUERY_HASH) .resultHash(QUERY_1_RESULT_HASH) .created(QUERY_1_CREATED) + .creator(USER_1_DTO) .execution(QUERY_1_EXECUTION) .createdBy(USER_1_ID) - .creator(USER_1_DTO) .build(); public final static QueryBriefDto QUERY_1_BRIEF_DTO = QueryBriefDto.builder() @@ -4205,7 +4204,7 @@ public abstract class BaseTest { public final static String IDENTIFIER_1_NORMALIZED = QUERY_1_STATEMENT; public final static Long IDENTIFIER_1_RESULT_NUMBER = QUERY_1_RESULT_NUMBER; public final static String IDENTIFIER_1_PUBLISHER = "Austrian Government"; - public final static IdentifierType IDENTIFIER_1_TYPE = IdentifierType.SUBSET; + public final static IdentifierType IDENTIFIER_1_TYPE = IdentifierType.DATABASE; public final static IdentifierTypeDto IDENTIFIER_1_TYPE_DTO = IdentifierTypeDto.DATABASE; public final static UUID IDENTIFIER_1_CREATED_BY = USER_1_ID; public final static User IDENTIFIER_1_CREATOR = USER_1; diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile index af0e2b6da4bf0e2b13253487554afbd3e87bd0ef..813cdbc04fe85788e1689ca3167876c3d96bb714 100644 --- a/dbrepo-metadata-service/Dockerfile +++ b/dbrepo-metadata-service/Dockerfile @@ -3,7 +3,8 @@ FROM dbrepo-metadata-db:latest as dependency MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> ###### SECOND STAGE ###### -FROM maven:slim as build +FROM maven:3-openjdk-17 as build +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> COPY ./pom.xml ./ @@ -19,12 +20,15 @@ COPY ./report ./report RUN mvn -q clean package -DskipTests ###### THIRD STAGE ###### -FROM openjdk:11-jre-slim as runtime +FROM openjdk:17-alpine as runtime +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +RUN apk --no-cache add bash ENV METADATA_DB=fda ENV METADATA_USERNAME=root ENV METADATA_PASSWORD=dbrepo -ENV GATEWAY_ENDPOINT=http://gateway-service:9095 +ENV GATEWAY_ENDPOINT=http://gateway-service ENV PID_BASE="http://example.com/pid/" ENV REPOSITORY_NAME="Example Repository" ENV BASE_URL="http://example.com" @@ -45,4 +49,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./metadata-service.ja EXPOSE 9090 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./metadata-service.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./metadata-service.jar"] diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml index bc381a3a53139859ab007eba2c06d65debc8ecb7..6c3514de1ebfeaddd3b01c471881b13f4ff7b32a 100644 --- a/dbrepo-metadata-service/pom.xml +++ b/dbrepo-metadata-service/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.3.10.RELEASE</version> + <version>3.0.6</version> </parent> <groupId>at.tuwien</groupId> @@ -36,17 +36,19 @@ </modules> <properties> - <java.version>11</java.version> - <spring-cloud.version>3.0.1</spring-cloud.version> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <swagger.version>2.1.7</swagger.version> - <springfox.version>3.0.0</springfox.version> - <jacoco.version>0.8.7</jacoco.version> - <javax-ws-rs.version>2.1.1</javax-ws-rs.version> - <spring-saml.version>1.0.10.RELEASE</spring-saml.version> - <javax-rs.version>2.1.1</javax-rs.version> - <javax-mail.version>1.4.7</javax-mail.version> - <jwt.version>3.18.3</jwt.version> + <java.version>17</java.version> + <spring-cloud.version>4.0.2</spring-cloud.version> + <mapstruct.version>1.5.5.Final</mapstruct.version> + <docker.version>3.3.0</docker.version> + <swagger.version>2.2.9</swagger.version> + <jacoco.version>0.8.10</jacoco.version> + <jwt.version>4.3.0</jwt.version> + <hibernate-c3po.version>5.6.3.Final</hibernate-c3po.version> + <opencsv.version>5.7.1</opencsv.version> + <super-csv.version>2.4.0</super-csv.version> + <jsql.version>4.6</jsql.version> + <keycloak.version>21.0.2</keycloak.version> + <hibernate.version>6.2.2.Final</hibernate.version> </properties> <dependencies> @@ -122,7 +124,7 @@ <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${mapstruct.version}</version> - <optional>true</optional><!-- IntelliJ --> + <optional>true</optional> </dependency> <dependency> <groupId>org.mapstruct</groupId> @@ -130,11 +132,6 @@ <version>${mapstruct.version}</version> </dependency> <!-- Testing --> - <dependency> - <groupId>javax.ws.rs</groupId> - <artifactId>javax.ws.rs-api</artifactId> - <version>${javax-ws-rs.version}</version> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java index 728920ea268647995113ffcf7a2fd23b99616603..8e226230eea447a367d93057a947b7d8b091a788 100644 --- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java +++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/MetadataEndpoint.java @@ -1,9 +1,9 @@ package at.tuwien.endpoints; -import at.tuwien.OaiErrorType; -import at.tuwien.OaiListIdentifiersParameters; -import at.tuwien.OaiRecordParameters; import at.tuwien.exception.IdentifierNotFoundException; +import at.tuwien.oaipmh.OaiErrorType; +import at.tuwien.oaipmh.OaiListIdentifiersParameters; +import at.tuwien.oaipmh.OaiRecordParameters; import at.tuwien.service.MetadataService; import io.micrometer.core.annotation.Timed; import io.swagger.v3.oas.annotations.Operation; diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml index b5529e2975fa93116d76ac5200cf2011f71d74b7..f57bf10f481fe31e4af4c61d30df701738d33da4 100644 --- a/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml +++ b/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml @@ -22,6 +22,7 @@ spring: name: metadata-service rabbitmq: host: localhost + virtual-host: dbrepo username: fda password: fda cloud: @@ -35,20 +36,13 @@ logging: root: warn at.tuwien.: trace org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: metadata-service - non-secure-port-enabled: false - secure-port-enabled: true - secure-port: 9099 - client.serviceUrl.defaultZone: http://localhost:9090/eureka/ fda: ready.path: ./ready - pid.base: http://example.com/pid/ - gateway.endpoint: http://localhost:9095 + pid.base: https://example.com/pid/ + gateway.endpoint: http://localhost dbrepo: repository-name: TU Wien Database Repository - base-url: http://dbrepo.ossdip.at/api/oai + base-url: https://dbrepo1.ec.tuwien.at/api/oai admin-email: noreply@example.com earliest-datestamp: 2022-09-17T16:09:00Z deleted-record: persistent diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml index 1a81f97ef818aeeba391f917d907038ff8f1e556..0ec7b7bc08a59b9937c4b797e344b2383e3ff02d 100644 --- a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml @@ -22,6 +22,7 @@ spring: name: metadata-service rabbitmq: host: broker-service + virtual-host: dbrepo username: "${BROKER_USERNAME}" password: "${BROKER_PASSWORD}" cloud: @@ -35,13 +36,8 @@ logging: root: warn at.tuwien.: "${LOG_LEVEL}" org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: metadata-service - non-secure-port: 9099 - client.serviceUrl.defaultZone: http://discovery-service:9090/eureka/ fda: - ready.path: ./ready + ready.path: /ready pid.base: "${PID_BASE}" gateway.endpoint: "${GATEWAY_ENDPOINT}" dbrepo: diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java index 2a6d04fd7edd09f8e53ada15a9a0ebe7265c9460..1fb428714fdf1fa75282b71d90a21d0eff971b21 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java @@ -1,13 +1,10 @@ package at.tuwien.endpoints; import at.tuwien.BaseUnitTest; -import at.tuwien.OaiListIdentifiersParameters; -import at.tuwien.OaiRecordParameters; +import at.tuwien.oaipmh.OaiListIdentifiersParameters; +import at.tuwien.oaipmh.OaiRecordParameters; import at.tuwien.config.H2Utils; -import at.tuwien.entities.identifier.Identifier; -import at.tuwien.exception.IdentifierNotFoundException; import at.tuwien.repository.jpa.*; -import at.tuwien.service.IdentifierService; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -18,7 +15,6 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.test.context.support.WithAnonymousUser; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.util.List; @@ -38,15 +34,6 @@ public class MetadataEndpointUnitTest extends BaseUnitTest { @Autowired private MetadataEndpoint metadataEndpoint; - @Autowired - private H2Utils h2Utils; - - @BeforeEach - public void beforeEach() { - /* schema */ - h2Utils.runScript("schema.sql"); - } - @Test @WithAnonymousUser public void identify_succeeds() { diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java index 696f3494cce67e895d8a3f7c2a41e221cd32d82d..26da5e82fa6040a62ecf2bfc5aeb1b4867d54512 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java @@ -46,13 +46,8 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest { @Autowired private IdentifierService identifierService; - @Autowired - private H2Utils h2Utils; - @BeforeEach public void beforeEach() { - /* schema */ - h2Utils.runScript("schema.sql"); /* metadata database */ imageRepository.save(IMAGE_1_SIMPLE); realmRepository.save(REALM_DBREPO); diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java index 743505dfb6844aa24b63ca6d03f8059ff251fa71..e8e68400ee2fd9fd49d9068f295809a8c369a554 100644 --- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java +++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java @@ -1,14 +1,13 @@ package at.tuwien.service; import at.tuwien.BaseUnitTest; -import at.tuwien.OaiErrorType; -import at.tuwien.OaiListIdentifiersParameters; -import at.tuwien.OaiRecordParameters; +import at.tuwien.oaipmh.OaiErrorType; +import at.tuwien.oaipmh.OaiListIdentifiersParameters; +import at.tuwien.oaipmh.OaiRecordParameters; import at.tuwien.config.H2Utils; import at.tuwien.exception.IdentifierNotFoundException; import at.tuwien.repository.jpa.*; import lombok.extern.log4j.Log4j2; -import org.apache.commons.io.FileUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -17,10 +16,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; - import static org.junit.jupiter.api.Assertions.*; @Log4j2 @@ -50,13 +45,8 @@ public class MetadataServiceIntegrationTest extends BaseUnitTest { @Autowired private MetadataService metadataService; - @Autowired - private H2Utils h2Utils; - @BeforeEach public void beforeEach() { - /* schema */ - h2Utils.runScript("schema.sql"); /* metadata database */ imageRepository.save(IMAGE_1_SIMPLE); realmRepository.save(REALM_DBREPO); diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/application.properties b/dbrepo-metadata-service/rest-service/src/test/resources/application.properties index 507921d77d8b04535ded832f91bafe10abe92d6a..f56b5e38f304e8d5a124ef78a20b965efd94aff1 100644 --- a/dbrepo-metadata-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-metadata-service/rest-service/src/test/resources/application.properties @@ -9,7 +9,8 @@ spring.cloud.config.discovery.enabled = false spring.cloud.config.enabled = false # disable datasource -spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA +# spring 6 fix https://github.com/h2database/h2database/issues/3363 +spring.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=VALUE;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password diff --git a/dbrepo-metadata-service/rest-service/src/test/resources/schema.sql b/dbrepo-metadata-service/rest-service/src/test/resources/schema.sql deleted file mode 100644 index 906d8df808fa8f79c1f7c1c26088c55da6c9ee9b..0000000000000000000000000000000000000000 --- a/dbrepo-metadata-service/rest-service/src/test/resources/schema.sql +++ /dev/null @@ -1,25 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS `fda`; -SET SCHEMA `fda`; -DROP TABLE IF EXISTS fda.mdb_concepts; -CREATE TABLE IF NOT EXISTS fda.mdb_concepts -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); -DROP TABLE IF EXISTS fda.mdb_units; -CREATE TABLE IF NOT EXISTS fda.mdb_units -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); --- Modified for H2 --- Assume id=1 is invalid --- Assume id=2 is still valid token --- CREATE VIEW IF NOT EXISTS fda.mdb_invalid_tokens AS --- (SELECT `id`, `token_hash`, `creator`, `created`, `expires`, `last_used` FROM fda.`mdb_tokens` WHERE `id` = 1); \ No newline at end of file diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JacksonConfig.java index fba7f99cf2bf1cbb12ac51cd6fd5b80751ff43c1..c4944a469174ad1962d5c54cc483400dbee12f1d 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/JacksonConfig.java @@ -19,7 +19,6 @@ public class JacksonConfig { @Bean public ObjectMapper objectMapper() throws JsonProcessingException { final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); objectMapper.registerModule(new Jdk8Module()); objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/TemplateConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/TemplateConfig.java index c2d1721c0ceaadb4c2f211deb9805b16b5b71c70..d38f17c6cb936e354b6b7362ccf8808476e24b47 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/TemplateConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/TemplateConfig.java @@ -2,7 +2,7 @@ package at.tuwien.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.thymeleaf.spring5.SpringTemplateEngine; +import org.thymeleaf.spring6.SpringTemplateEngine; import org.thymeleaf.templatemode.TemplateMode; import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java index 83d5aa02846369114bb8c9050aed216f1ee5a382..13d92092fc3e74832d3e1ae48610a1614ba223a7 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java @@ -6,21 +6,33 @@ import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.util.matcher.OrRequestMatcher; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) -public class WebSecurityConfig extends WebSecurityConfigurerAdapter { +public class WebSecurityConfig { - @Override - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + final OrRequestMatcher internalEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/actuator/prometheus/**", "GET") + ); + final OrRequestMatcher publicEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/api/oai/**", "GET"), + new AntPathRequestMatcher("/v3/api-docs.yaml"), + new AntPathRequestMatcher("/v3/api-docs/**"), + new AntPathRequestMatcher("/swagger-ui/**"), + new AntPathRequestMatcher("/swagger-ui.html") + ); /* enable CORS and disable CSRF */ http = http.cors().and().csrf().disable(); /* set session management to stateless */ @@ -39,17 +51,14 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { } ).and(); /* set permissions on endpoints */ - http.authorizeRequests() + http.authorizeHttpRequests() /* our internal endpoints */ - .antMatchers(HttpMethod.GET, "/actuator/prometheus/**").permitAll() + .requestMatchers(internalEndpoints).permitAll() /* our public endpoints */ - .antMatchers(HttpMethod.GET, "/api/oai/**").permitAll() - .antMatchers("/v3/api-docs.yaml", - "/v3/api-docs/**", - "/swagger-ui/**", - "/swagger-ui.html").permitAll() + .requestMatchers(publicEndpoints).permitAll() /* our private endpoints */ .anyRequest().authenticated(); + return http.build(); } @Bean @@ -57,7 +66,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); - config.addAllowedOrigin("*"); + config.addAllowedOriginPattern("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java index 43c3d8dfb58aea177734605a8f45588db6421e2c..8a2d8add44d715a9533805081895724f116c93a6 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MetadataService.java @@ -1,9 +1,9 @@ package at.tuwien.service; -import at.tuwien.OaiErrorType; -import at.tuwien.OaiListIdentifiersParameters; -import at.tuwien.OaiRecordParameters; import at.tuwien.exception.IdentifierNotFoundException; +import at.tuwien.oaipmh.OaiErrorType; +import at.tuwien.oaipmh.OaiListIdentifiersParameters; +import at.tuwien.oaipmh.OaiRecordParameters; public interface MetadataService { diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java index 78a089213ae37eb4292c56da3db5cc6148489cc5..9b42e5af52b4f7febc92fff0b7ae9794413950be 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/MetadataServiceImpl.java @@ -1,8 +1,8 @@ package at.tuwien.service.impl; -import at.tuwien.OaiErrorType; -import at.tuwien.OaiListIdentifiersParameters; -import at.tuwien.OaiRecordParameters; +import at.tuwien.oaipmh.OaiErrorType; +import at.tuwien.oaipmh.OaiListIdentifiersParameters; +import at.tuwien.oaipmh.OaiRecordParameters; import at.tuwien.config.MetadataConfig; import at.tuwien.entities.identifier.Identifier; import at.tuwien.exception.IdentifierNotFoundException; diff --git a/dbrepo-proxy/Dockerfile b/dbrepo-proxy/Dockerfile deleted file mode 100644 index 6086e614d19011a1df5854c3af5881fa7350a237..0000000000000000000000000000000000000000 --- a/dbrepo-proxy/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM nginx:alpine AS runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at - -COPY ./dbrepo.conf /etc/nginx/conf.d/default.conf diff --git a/dbrepo-proxy/dbrepo.conf b/dbrepo-proxy/dbrepo.conf deleted file mode 100644 index ac955002347f24a0c292ecc1eb4efe7f363db680..0000000000000000000000000000000000000000 --- a/dbrepo-proxy/dbrepo.conf +++ /dev/null @@ -1,44 +0,0 @@ -client_max_body_size 2G; - -server { - listen 80 default_server; - server_name _; - - location /api { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://gateway-service:9095; - proxy_read_timeout 90; - } - - location /pid { - rewrite /pid/(.*) /api/pid/$1 break; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://gateway-service:9095; - proxy_read_timeout 90; - } - - location /retrieve { - rewrite /retrieve/(.*) /$1 break; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://search-service:9200; - proxy_read_timeout 90; - } - - location / { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://ui:3000/; - proxy_read_timeout 90; - } -} diff --git a/dbrepo-query-service/Dockerfile b/dbrepo-query-service/Dockerfile index a8114f56c674d26ea73bc769f91b69c561a8a479..df2847401afee2797b5e4a3311fc11ce9993f51e 100644 --- a/dbrepo-query-service/Dockerfile +++ b/dbrepo-query-service/Dockerfile @@ -3,7 +3,8 @@ FROM dbrepo-metadata-db:latest as dependency MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> ###### SECOND STAGE ###### -FROM maven:slim as build +FROM maven:3-openjdk-17 as build +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> COPY ./pom.xml ./ @@ -20,20 +21,23 @@ COPY ./api ./api RUN mvn -q clean package -DskipTests ###### THIRD STAGE ###### -FROM openjdk:11-jre-slim as runtime +FROM openjdk:17-alpine as runtime +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +RUN apk --no-cache add bash ENV METADATA_DB=fda ENV METADATA_USERNAME=root ENV METADATA_PASSWORD=dbrepo ENV BROKER_USERNAME=fda ENV BROKER_PASSWORD=fda -ENV GATEWAY_ENDPOINT=http://gateway-service:9095 +ENV GATEWAY_ENDPOINT=http://gateway-service ENV SHARED_FILESYSTEM=/tmp ENV BROKER_CONSUMERS=2 ENV LOG_LEVEL=debug ENV DBREPO_CLIENT_SECRET=client-secret ENV CLIENT_ID=dbrepo-client -ENV JWT_ISSUER=http://localhost:8080/realms/dbrepo +ENV JWT_ISSUER=http://localhost/realms/dbrepo ENV JWT_PUBKEY=public-key ENV NOT_SUPPORTED_KEYWORDS=\\*,AVG,BIT_AND,BIT_OR,BIT_XOR,COUNT,COUNTDISTINCT,GROUP_CONCAT,JSON_ARRAYAGG,JSON_OBJECTAGG,MAX,MIN,STD,STDDEV,STDDEV_POP,STDDEV_SAMP,SUM,VARIANCE,VAR_POP,VAR_SAMP,-- @@ -48,4 +52,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./query-service.jar EXPOSE 9093 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./query-service.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./query-service.jar"] diff --git a/dbrepo-query-service/pom.xml b/dbrepo-query-service/pom.xml index 075f7d868a82cf38ca38f531263a41be8da3dda4..c533f3b2b804eba84f304622b11e60ceb832dd03 100644 --- a/dbrepo-query-service/pom.xml +++ b/dbrepo-query-service/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.3.10.RELEASE</version> + <version>3.0.6</version> </parent> <groupId>at.tuwien</groupId> @@ -40,25 +40,20 @@ </modules> <properties> - <java.version>11</java.version> - <spring-cloud.version>3.0.1</spring-cloud.version> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <docker.version>3.2.7</docker.version> - <testcontainers.version>1.15.2</testcontainers.version> - <swagger.version>2.1.7</swagger.version> - <springfox.version>3.0.0</springfox.version> - <jacoco.version>0.8.7</jacoco.version> - <opencsv.version>5.4</opencsv.version> - <hibernate-c3po.version>5.6.3.Final</hibernate-c3po.version> - <maven-report.version>3.0.0</maven-report.version> + <java.version>17</java.version> + <spring-cloud.version>4.0.2</spring-cloud.version> + <mapstruct.version>1.5.5.Final</mapstruct.version> + <docker.version>3.3.0</docker.version> + <swagger.version>2.2.9</swagger.version> + <jacoco.version>0.8.10</jacoco.version> <jwt.version>4.3.0</jwt.version> + <opencsv.version>5.7.1</opencsv.version> + <jsql.version>4.6</jsql.version> + <c3p0.version>0.9.5.5</c3p0.version> + <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> </properties> <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-webflux</artifactId> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> @@ -91,7 +86,6 @@ <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> - <version>${project.version}</version> <scope>test</scope> </dependency> <dependency> @@ -111,6 +105,16 @@ <scope>runtime</scope> </dependency> <!-- Data Source --> + <dependency> + <groupId>com.mchange</groupId> + <artifactId>c3p0</artifactId> + <version>${c3p0.version}</version> + </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-c3p0</artifactId> + <version>${c3p0-hibernate.version}</version> + </dependency> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> @@ -148,12 +152,6 @@ <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> - <!-- TODO: do we really need this? --> - <dependency> - <groupId>org.apache.tomcat</groupId> - <artifactId>tomcat-dbcp</artifactId> - <version>9.0.33</version> - </dependency> <!-- Entity, API, QueryStore --> <dependency> <groupId>at.tuwien</groupId> @@ -173,11 +171,6 @@ <version>${project.version}</version> <scope>compile</scope> </dependency> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-c3p0</artifactId> - <version>${hibernate-c3po.version}</version> - </dependency> <!-- Testing --> <dependency> <groupId>org.springframework.boot</groupId> @@ -190,11 +183,6 @@ </exclusion> </exclusions> </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> @@ -234,18 +222,7 @@ <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> - <version>3.1</version> - </dependency> - <!-- Gateway --> - <dependency> - <groupId>org.projectreactor</groupId> - <artifactId>reactor-spring</artifactId> - <version>1.0.1.RELEASE</version> - </dependency> - <dependency> - <groupId>javax.ws.rs</groupId> - <artifactId>javax.ws.rs-api</artifactId> - <version>2.1.1</version> + <version>${jsql.version}</version> </dependency> </dependencies> diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ExportEndpoint.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ExportEndpoint.java index 8e683d4348e9c05b39cbe5eba6b88e2e6e9d41f3..d052feb732d18187f264ce2b44f973e0cc879f8c 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ExportEndpoint.java +++ b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ExportEndpoint.java @@ -13,11 +13,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; -import org.springframework.security.core.Authentication; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.time.Instant; diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/QueryEndpoint.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/QueryEndpoint.java index fb3b7209d06c8d797293521b75cb630d095cac32..c5d30f6dacf6093dde4310cfd1e01db417020679 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/QueryEndpoint.java +++ b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/QueryEndpoint.java @@ -21,8 +21,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java index 29830f33a7c7908c8acb9313b7eee4c6b3dcbfb9..14e3548dd428760a3ed6f4245e48411370e4d957 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java +++ b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/StoreEndpoint.java @@ -28,7 +28,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.List; import java.util.Optional; diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java index f53f5d489728afd6018e3143c1b728d78b59ffc5..e0ad8ea8d8f59a8da425de67348db6e44472ea0f 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java +++ b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableDataEndpoint.java @@ -21,8 +21,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.time.Instant; diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java index b8b4f03dac74655b1f4c2749bbe809d189f8799c..0933749a0ecea839380686e6cefde6441284c92b 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java +++ b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/TableHistoryEndpoint.java @@ -2,7 +2,6 @@ package at.tuwien.endpoint; import at.tuwien.api.database.table.TableHistoryDto; import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.config.QueryConfig; import at.tuwien.exception.*; import at.tuwien.service.*; import io.micrometer.core.annotation.Timed; @@ -15,11 +14,10 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.List; diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ViewEndpoint.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ViewEndpoint.java index 20d93d7077970907d45594a9f56cd347fcaf808a..8a7001f019277444da77e89286974e270bbc9632 100644 --- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ViewEndpoint.java +++ b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/endpoint/ViewEndpoint.java @@ -27,8 +27,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.List; import java.util.stream.Collectors; diff --git a/dbrepo-query-service/rest-service/src/main/resources/application-docker.yml b/dbrepo-query-service/rest-service/src/main/resources/application-docker.yml deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-query-service/rest-service/src/main/resources/application-local.yml b/dbrepo-query-service/rest-service/src/main/resources/application-local.yml index ac9c7fb360aa866be92d4530f0ff7550640d47a2..32b8a33c40da0168e779a5b2ae3622107e623214 100644 --- a/dbrepo-query-service/rest-service/src/main/resources/application-local.yml +++ b/dbrepo-query-service/rest-service/src/main/resources/application-local.yml @@ -22,14 +22,15 @@ spring: name: query-service rabbitmq: host: localhost + virtual-host: dbrepo username: fda password: fda + elasticsearch: + password: elastic + username: elastic + uris: http://localhost:9200 cloud: loadbalancer.ribbon.enabled: false - gateway: - httpclient: - ssl: - useInsecureTrustManager: true management.endpoints.web.exposure.include: health,info,prometheus server: port: 9093 @@ -39,22 +40,13 @@ logging: root: warn at.tuwien.: trace org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: query-service - non-secure-port: 9093 - client.serviceUrl.defaultZone: http://discovery-service:9090/eureka/ fda: - gateway.endpoint: http://localhost:9095 + gateway.endpoint: http://localhost ready.path: ./ready jwt: - issuer: https://localhost:8443/realms/dbrepo + issuer: http://localhost/realms/dbrepo public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB client_secret: client-secret client_id: dbrepo-client consumers: 2 unsupported: \*,AVG,BIT_AND,BIT_OR,BIT_XOR,COUNT,COUNTDISTINCT,GROUP_CONCAT,JSON_ARRAYAGG,JSON_OBJECTAGG,MAX,MIN,STD,STDDEV,STDDEV_POP,STDDEV_SAMP,SUM,VARIANCE,VAR_POP,VAR_SAMP,-- - elastic: - endpoint: localhost:9200 - username: elastic - password: elastic \ No newline at end of file diff --git a/dbrepo-query-service/rest-service/src/main/resources/application.yml b/dbrepo-query-service/rest-service/src/main/resources/application.yml index df6ca210fb0604969f43b73973b6c913cdf66f9e..2dafd0f2819732de50d6a606400c8fe1ad9526fd 100644 --- a/dbrepo-query-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-query-service/rest-service/src/main/resources/application.yml @@ -22,8 +22,13 @@ spring: name: query-service rabbitmq: host: broker-service + virtual-host: dbrepo username: "${BROKER_USERNAME}" password: "${BROKER_PASSWORD}" + elasticsearch: + password: "${ELASTIC_PASSWORD}" + username: elastic + uris: http://search-service:9200 cloud: loadbalancer.ribbon.enabled: false management.endpoints.web.exposure.include: health,info,prometheus @@ -35,11 +40,6 @@ logging: root: warn at.tuwien.: "${LOG_LEVEL}" org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: query-service - non-secure-port: 9093 - client.serviceUrl.defaultZone: http://discovery-service:9090/eureka/ fda: gateway.endpoint: "${GATEWAY_ENDPOINT}" ready.path: /ready @@ -50,7 +50,3 @@ fda: client_id: "${CLIENT_ID}" consumers: "${BROKER_CONSUMERS}" unsupported: "${NOT_SUPPORTED_KEYWORDS}" - elastic: - endpoint: search-service:9200 - username: elastic - password: "${ELASTIC_PASSWORD}" diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java index 09cd52fefd2a52652503e33273843d7e22822dd1..cadc876d8ba3ebcca9c3d3cffa44bf5d7c0941be 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java +++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java @@ -90,7 +90,6 @@ public class RabbitMqListenerIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { /* metadata database */ - h2Utils.runScript("schema.sql"); imageRepository.save(IMAGE_1_SIMPLE); realmRepository.save(REALM_DBREPO); userRepository.save(USER_1_SIMPLE); diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/StoreMapperTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/StoreMapperTest.java index 5054baff5f4a6e627efc87f64982962d70dad1d1..bc3a177d9b1be42c5502ad3897b4f0b5b402b086 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/StoreMapperTest.java +++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/StoreMapperTest.java @@ -31,12 +31,12 @@ public class StoreMapperTest extends BaseUnitTest { @MockBean private RabbitMqListenerImpl rabbitMqListener; - private final DateTimeFormatter mariaDbFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S[SS]") + private final DateTimeFormatter mariaDbFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss[.SSS]") .withZone(ZoneId.of("UTC")); @Test public void mapMariaDbInstant_succeeds() { - final String timestamp = "2023-01-08 08:49:29.0"; + final String timestamp = "2023-01-08 08:49:29"; final Instant compare = Instant.ofEpochSecond(1673167769); /* test */ diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java index c1cf0fbd1618b3615f1519ff625e7264e3498004..7662f1dcbc9263b80139182624bb9406a1ddc592 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java +++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java @@ -71,7 +71,6 @@ public class ViewRepositoryIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { - h2Utils.runScript("schema.sql"); userRepository.save(USER_1); imageRepository.save(IMAGE_1); containerRepository.save(CONTAINER_1); diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java index ee513b6340e03404d64e799f1520fbaf2a4f389b..f009f87f64efa1a6ded33455300ab1c135303314 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java +++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java @@ -51,6 +51,12 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { @Autowired private ImageRepository imageRepository; + @Autowired + private RealmRepository realmRepository; + + @Autowired + private UserRepository userRepository; + @Autowired private ContainerRepository containerRepository; @@ -59,6 +65,8 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { + realmRepository.save(REALM_DBREPO); + userRepository.save(USER_1); imageRepository.save(IMAGE_1); containerRepository.save(CONTAINER_1); } diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java index 8422cf1dc619087822cf5d020bc1e5798faa8ea8..4590f3e742eab0b7610c3e5e7d291b5d682f58b8 100644 --- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java +++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java @@ -100,8 +100,6 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { @BeforeEach public void beforeEach() { - /* metadata db */ - h2Utils.runScript("schema.sql"); /* metadata db */ imageRepository.save(IMAGE_1); realmRepository.save(REALM_DBREPO); diff --git a/dbrepo-query-service/rest-service/src/test/resources/application.properties b/dbrepo-query-service/rest-service/src/test/resources/application.properties index 4eea490a9199d7e0155b1f33cf3500a5e1f2863f..c64e6962f91b44b44cbfbe6d34d9c56e252dbd9d 100644 --- a/dbrepo-query-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-query-service/rest-service/src/test/resources/application.properties @@ -9,7 +9,8 @@ spring.cloud.config.discovery.enabled=false spring.cloud.config.enabled=false # internal datasource -spring.datasource.url=jdbc:h2:mem:testdb;DATABASE_TO_UPPER=false;DB_CLOSE_ON_EXIT=FALSE;INIT=RUNSCRIPT FROM './src/test/resources/schema.sql' +# spring 6 fix https://github.com/h2database/h2database/issues/3363 +spring.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=VALUE,KEY;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password @@ -21,8 +22,12 @@ spring.jpa.show-sql=false logging.level.root=error logging.level.at.tuwien.=trace +# elastic +spring.elasticsearch.uris=dbrepo-search-service:9200 + # broker service spring.rabbitmq.host=dbrepo-broker-service +spring.rabbitmq.virtual-host=/ spring.rabbitmq.username=guest spring.rabbitmq.password=guest diff --git a/dbrepo-query-service/rest-service/src/test/resources/schema.sql b/dbrepo-query-service/rest-service/src/test/resources/schema.sql deleted file mode 100644 index 906d8df808fa8f79c1f7c1c26088c55da6c9ee9b..0000000000000000000000000000000000000000 --- a/dbrepo-query-service/rest-service/src/test/resources/schema.sql +++ /dev/null @@ -1,25 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS `fda`; -SET SCHEMA `fda`; -DROP TABLE IF EXISTS fda.mdb_concepts; -CREATE TABLE IF NOT EXISTS fda.mdb_concepts -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); -DROP TABLE IF EXISTS fda.mdb_units; -CREATE TABLE IF NOT EXISTS fda.mdb_units -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); --- Modified for H2 --- Assume id=1 is invalid --- Assume id=2 is still valid token --- CREATE VIEW IF NOT EXISTS fda.mdb_invalid_tokens AS --- (SELECT `id`, `token_hash`, `creator`, `created`, `expires`, `last_used` FROM fda.`mdb_tokens` WHERE `id` = 1); \ No newline at end of file diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-query-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java index b2b01c42ee9868215962426b18b3a70450bff7ac..92b60f4f8a5ed8a566e2504d71b63478b1593f68 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java @@ -6,6 +6,10 @@ import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -16,10 +20,6 @@ import org.springframework.security.web.authentication.WebAuthenticationDetailsS import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/AmqpConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/AmqpConfig.java index 1d96c7f7c3684a5ad1ba75e6afae2ffa3eab880d..4d827c225004a1d1bfe8bb910cca8b4b66da0849 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/AmqpConfig.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/config/AmqpConfig.java @@ -20,6 +20,9 @@ public class AmqpConfig { @Value("${spring.rabbitmq.host}") private String ampqHost; + @Value("${spring.rabbitmq.virtual-host}") + private String virtualHost; + @Value("${spring.rabbitmq.username}") private String amqpUsername; @@ -33,6 +36,7 @@ public class AmqpConfig { public ConnectionFactory connectionFactory() { final ConnectionFactory factory = new ConnectionFactory(); factory.setHost(ampqHost); + factory.setVirtualHost(virtualHost); factory.setUsername(amqpUsername); factory.setPassword(amqpPassword); factory.setAutomaticRecoveryEnabled(true); diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java index b8de474aed6d651c497abe044fbd3368e9efbf83..58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java @@ -1,38 +1,45 @@ package at.tuwien.config; -import org.elasticsearch.client.RestHighLevelClient; +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.json.jackson.JacksonJsonpMapper; +import co.elastic.clients.transport.ElasticsearchTransport; +import co.elastic.clients.transport.rest_client.RestClientTransport; +import lombok.extern.log4j.Log4j2; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.elasticsearch.client.RestClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.elasticsearch.client.ClientConfiguration; -import org.springframework.data.elasticsearch.client.RestClients; -import org.springframework.data.elasticsearch.core.ElasticsearchOperations; -import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; +@Log4j2 @Configuration public class ElasticsearchConfig { - @Value("${fda.elastic.endpoint}") + @Value("${spring.elasticsearch.uris}") private String elasticEndpoint; - @Value("${fda.elastic.username}") + @Value("${spring.elasticsearch.username}") private String elasticUsername; - @Value("${fda.elastic.password}") + @Value("${spring.elasticsearch.password}") private String elasticPassword; @Bean - public RestHighLevelClient client() { - ClientConfiguration clientConfiguration = ClientConfiguration.builder() - .connectedTo(elasticEndpoint) - .withBasicAuth(elasticUsername, elasticPassword) + public ElasticsearchClient elasticsearchClient() { + log.debug("elastic endpoint={}", elasticEndpoint); + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword)); + final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint)) + .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder + .setDefaultCredentialsProvider(credentialsProvider)) .build(); - - return RestClients.create(clientConfiguration).rest(); + ElasticsearchTransport transport = new RestClientTransport( + restClient, new JacksonJsonpMapper()); + return new ElasticsearchClient(transport); } - @Bean - public ElasticsearchOperations elasticsearchTemplate() { - return new ElasticsearchRestTemplate(client()); - } } \ No newline at end of file diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/JacksonConfig.java index fba7f99cf2bf1cbb12ac51cd6fd5b80751ff43c1..c4944a469174ad1962d5c54cc483400dbee12f1d 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/config/JacksonConfig.java @@ -19,7 +19,6 @@ public class JacksonConfig { @Bean public ObjectMapper objectMapper() throws JsonProcessingException { final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); objectMapper.registerModule(new Jdk8Module()); objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java index 22586fb23b43382726ecc05d74bcf06f15b61d58..582fe83630c25eee8b35c90b1000db5c1fd48564 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java @@ -9,14 +9,16 @@ import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.util.matcher.OrRequestMatcher; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; @Configuration @EnableWebSecurity @@ -27,15 +29,32 @@ import javax.servlet.http.HttpServletResponse; bearerFormat = "JWT", scheme = "bearer" ) -public class WebSecurityConfig extends WebSecurityConfigurerAdapter { +public class WebSecurityConfig { @Bean public AuthTokenFilter authTokenFilter() { return new AuthTokenFilter(); } - @Override - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + final OrRequestMatcher internalEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/actuator/prometheus/**", "GET") + ); + final OrRequestMatcher publicEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/api/container/**/database/data/**", "GET"), + new AntPathRequestMatcher("/api/container/**/database/**/table/**/data/**", "GET"), + new AntPathRequestMatcher("/api/container/**/database/**/view/**", "GET"), + new AntPathRequestMatcher("/api/container/**/database/**/table/**/history/**", "GET"), + new AntPathRequestMatcher("/api/container/**/database/**/table/**/export/**", "GET"), + new AntPathRequestMatcher("/api/container/**/database/**/query/**", "GET"), + new AntPathRequestMatcher("/api/container/**/database/**/query/**/export", "GET"), + new AntPathRequestMatcher("/api/container/**/database/**/query/**", "PUT"), + new AntPathRequestMatcher("/v3/api-docs.yaml"), + new AntPathRequestMatcher("/v3/api-docs/**"), + new AntPathRequestMatcher("/swagger-ui/**"), + new AntPathRequestMatcher("/swagger-ui.html") + ); /* enable CORS and disable CSRF */ http = http.cors().and().csrf().disable(); /* set session management to stateless */ @@ -54,28 +73,18 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { } ).and(); /* set permissions on endpoints */ - http.authorizeRequests() + http.authorizeHttpRequests() /* our internal endpoints */ - .antMatchers(HttpMethod.GET, "/actuator/prometheus/**").permitAll() + .requestMatchers(internalEndpoints).permitAll() /* our public endpoints */ - .antMatchers(HttpMethod.GET, "/api/container/**/database/data/**").permitAll() - .antMatchers(HttpMethod.GET, "/api/container/**/database/**/table/**/data/**").permitAll() - .antMatchers(HttpMethod.GET, "/api/container/**/database/**/view/**").permitAll() - .antMatchers(HttpMethod.GET, "/api/container/**/database/**/table/**/history/**").permitAll() - .antMatchers(HttpMethod.GET, "/api/container/**/database/**/table/**/export/**").permitAll() - .antMatchers(HttpMethod.GET, "/api/container/**/database/**/query/**").permitAll() - .antMatchers(HttpMethod.GET, "/api/container/**/database/**/query/**/export").permitAll() - .antMatchers(HttpMethod.PUT, "/api/container/**/database/**/query/**").permitAll() - .antMatchers("/v3/api-docs.yaml", - "/v3/api-docs/**", - "/swagger-ui/**", - "/swagger-ui.html").permitAll() + .requestMatchers(publicEndpoints).permitAll() /* our private endpoints */ .anyRequest().authenticated(); /* add JWT token filter */ http.addFilterBefore(authTokenFilter(), UsernamePasswordAuthenticationFilter.class ); + return http.build(); } @Bean @@ -83,7 +92,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); - config.addAllowedOrigin("*"); + config.addAllowedOriginPattern("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java index 4629fbe4ccb3c567001e215a25d0c1182d78c472..977430a043ae74881f1d908b8fa12a837e60df9d 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java @@ -31,7 +31,7 @@ public class BrokerServiceGatewayImpl implements BrokerServiceGateway { private final GatewayConfig gatewayConfig; private final Environment environment; - private final static String VIRTUAL_SERVER = "%2F"; + private final static String VIRTUAL_SERVER = "dbrepo"; @Autowired public BrokerServiceGatewayImpl(AmqpConfig amqpConfig, RestTemplate restTemplate, GatewayConfig gatewayConfig, diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/StoreMapper.java b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/StoreMapper.java index 9302a0ca0aac8a652ef8833657abff90c02e880a..27f0a3e9d3b85cd4f41523e261ce33ab60795f2e 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/StoreMapper.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/mapper/StoreMapper.java @@ -18,7 +18,7 @@ public interface StoreMapper { org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(StoreMapper.class); - DateTimeFormatter mariaDbFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S[SS]") + DateTimeFormatter mariaDbFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss[.SSS]") .withZone(ZoneId.of("UTC")); default CallableStatement queryStoreRawInsertQuery(Connection connection, User user, ExecuteStatementDto data) diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ViewRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ViewRepository.java index 01e2c9fa3ca2500116e5fd5a893402caa0241213..3f5c2ac7c4c2167786fa96252083cd6801ee9965 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ViewRepository.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ViewRepository.java @@ -12,23 +12,13 @@ import java.util.Optional; @Repository public interface ViewRepository extends JpaRepository<View, Long> { - @Query("select v from View v where v.database.id = :databaseId") - List<View> findAllByDatabaseId(@Param("databaseId") Long databaseId); + List<View> findAllPublicByDatabaseId(Long databaseId); - @Query("select v from View v where v.database.id = :databaseId and v.isPublic is true") - List<View> findAllPublicByDatabaseId(@Param("databaseId") Long databaseId); + List<View> findAllPublicOrMineByDatabaseId(Long databaseId, String username); - @Query("select v from View v where v.database.id = :databaseId and (v.isPublic is true or v.creator.username = :username)") - List<View> findAllPublicOrMineByDatabaseId(@Param("databaseId") Long databaseId, @Param("username") String username); + Optional<View> findPublicByDatabaseIdAndId(Long databaseId, Long id); - @Query("select v from View v where v.database.id = :databaseId and v.id = :id") - Optional<View> findByDatabaseIdAndId(@Param("databaseId") Long databaseId, @Param("id") Long id); - - @Query("select v from View v where v.database.id = :databaseId and v.id = :id and v.isPublic is true") - Optional<View> findPublicByDatabaseIdAndId(@Param("databaseId") Long databaseId, @Param("id") Long id); - - @Query("select v from View v where v.database.id = :databaseId and v.id = :id and (v.isPublic is true or v.creator.username = :username)") - Optional<View> findPublicOrMineByDatabaseIdAndId(@Param("databaseId") Long databaseId, @Param("id") Long id, @Param("username") String username); + Optional<View> findPublicOrMineByDatabaseIdAndId(Long databaseId, Long id, String username); } diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java index 536aff8f662e9e135f699b167475d7190ccdd932..d1d1094578440f6391bb0d96db468e1f9b93b3f0 100644 --- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java +++ b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java @@ -25,7 +25,7 @@ import net.sf.jsqlparser.parser.CCJSqlParserManager; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.select.*; import org.apache.commons.io.FileUtils; -import org.apache.commons.lang.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; diff --git a/dbrepo-query-service/services/src/test/resources/application.properties b/dbrepo-query-service/services/src/test/resources/application.properties index 69df4a312304990e2f284318cd5428d960f14f0b..b314af67d812d79f89da0e35e1c49f1d9380f04f 100644 --- a/dbrepo-query-service/services/src/test/resources/application.properties +++ b/dbrepo-query-service/services/src/test/resources/application.properties @@ -11,4 +11,10 @@ spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.jpa.hibernate.ddl-auto=update \ No newline at end of file +spring.jpa.hibernate.ddl-auto=update + +# rabbitmq +spring.rabbitmq.host=dbrepo-broker-service +spring.rabbitmq.virtual-host=/ +spring.rabbitmq.username=guest +spring.rabbitmq.password=guest \ No newline at end of file diff --git a/dbrepo-search-service/Dockerfile b/dbrepo-search-service/Dockerfile deleted file mode 100644 index 667774bd61e1630fea44e41a1dbf872600a1f1d9..0000000000000000000000000000000000000000 --- a/dbrepo-search-service/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM elasticsearch:7.13.4 AS runtime -MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> - -ENV discovery.type=single-node -ENV ES_JAVA_OPTS="-Xms2g -Xmx2g" -ENV logger.level=WARN -ENV bootstrap.memory_lock=true -ENV xpack.security.enabled=true -ENV ELASTIC_PASSWORD=elastic \ No newline at end of file diff --git a/dbrepo-search-service/README.md b/dbrepo-search-service/README.md deleted file mode 100644 index c2560a95a5db38b71f62db79634f98d856c49a6e..0000000000000000000000000000000000000000 --- a/dbrepo-search-service/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# Search Service - -Supports ElasticSearch for searching databases, tables, colums saved in the metadatabase. Two indices were created, namely databaseindex and tblindex. For a detailed documentation also cf. https://www.elastic.co/guide/index.html - -### `POST /9200/databaseindex/_search` -with JSON body -```JSON -{ - "query": { - "match": { - "name": { - "query": "Whether whorld", - "fuzziness": 6 - } - } - } -} -``` - -Finds databases by their names. - -Example output: -```JSON -{ - "took": 76, - "timed_out": false, - "_shards": { - "total": 1, - "successful": 1, - "skipped": 0, - "failed": 0 - }, - "hits": { - "total": { - "value": 1, - "relation": "eq" - }, - "max_score": 0.2054872, - "hits": [ - { - "_index": "databaseindex", - "_type": "_doc", - "_id": "1", - "_score": 0.2054872, - "_source": { - "_class": "at.tuwien.entities.database.Database", - "id": 1, - "container": { - "id": 1, - "containerCreated": 1633772448088, - "name": "Weather World", - "internalName": "fda-userdb-weather-world", - "hash": "789905c2c184ffdadb80d1a0158b3e282404c25bba136731afc3c9ade7126ba1", - "port": 37665, - "image": { - "_class": "at.tuwien.entities.container.image.ContainerImage$HibernateProxy$dVABPDQa" - }, - "created": 1633772448249, - "lastModified": 1633772448249 - }, - "name": "Weather Australia", - "internalName": "weather_australia", - "description": "string", - "isPublic": true, - "created": 1633772487671, - "lastModified": 1633772487671 - } - } - ] - } -} -``` - -### `POST /9200/tblindex/_search` -```JSON -{ - "query": { - "match": { - "columns.name": { - "query": "date", - "fuzziness": 6 - } - } - } -} -``` - -Finds databases with columnnames 'date'. diff --git a/dbrepo-semantics-service/Dockerfile b/dbrepo-semantics-service/Dockerfile index bb9426c7b036a80e64590e0392b63016efa005df..9e5ebf1464ac3d59ec50355db8b648ec161e0041 100644 --- a/dbrepo-semantics-service/Dockerfile +++ b/dbrepo-semantics-service/Dockerfile @@ -1,32 +1,32 @@ -FROM python:3.9-slim -MAINTAINER Cornelia Michlits <cornelia.michlits@tuwien.ac.at> +FROM python:3.9-alpine +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> -RUN apt-get update && apt-get install -y python3-dev libmariadb3 libmariadb-dev gcc +RUN apk update && apk --no-cache add build-base gcc python3-dev libpq-dev libffi-dev mariadb-dev mariadb-connector-c \ + mariadb-connector-c-dev curl bash py3-pandas py3-sqlalchemy py3-requests py3-gevent py3-psycopg2 + +COPY ./requirements.txt ./requirements.txt +RUN pip install -r ./requirements.txt + +WORKDIR /app ENV FLASK_APP=app.py ENV FLASK_RUN_HOST=0.0.0.0 ENV PORT_APP=5010 ENV FLASK_DEBUG=0 ENV HOSTNAME=semantics-service -ENV EUREKA_SERVER=http://discovery-service:9090/eureka/ -ENV READY_FILE=/ready ENV LOG_LEVEL=debug ENV METADATA_DB=fda ENV METADATA_USERNAME=root ENV METADATA_PASSWORD=dbrepo -ENV JWT_ISSUER=http://localhost:8080/realms/dbrepo +ENV JWT_ISSUER=http://localhost/realms/dbrepo ENV JWT_PUBKEY=public-key -WORKDIR /app - -COPY requirements.txt requirements.txt +COPY ./requirements.txt ./requirements.txt +COPY ./healthcheck.sh ./healthcheck.sh RUN pip install -r requirements.txt > /dev/null -COPY ./service_ready /usr/bin -RUN chmod +x /usr/bin/service_ready - -HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD service_ready +HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD ["bash", "/app/healthcheck.sh"] EXPOSE $PORT_APP diff --git a/dbrepo-semantics-service/app.py b/dbrepo-semantics-service/app.py index 4e9c167c75b3d52fc609208edc7dfea94df178bc..a2a2604caa8d36185dea0f82faf781ba3bdc6212 100644 --- a/dbrepo-semantics-service/app.py +++ b/dbrepo-semantics-service/app.py @@ -3,7 +3,6 @@ import logging import re from flask import Flask, request, jsonify from logging.config import dictConfig -import py_eureka_client.eureka_client as eureka_client from flasgger import Swagger from flasgger.utils import swag_from from flasgger import LazyJSONEncoder @@ -263,11 +262,6 @@ def get_ontologies(name): rest_server_port = int(os.getenv('PORT_APP', 5010)) rest_server_host = os.getenv('FLASK_RUN_HOST', '0.0.0.0') -eureka_client.init(eureka_server=os.getenv('EUREKA_SERVER', 'http://localhost:9090/eureka/'), - app_name=os.getenv('HOSTNAME', 'fda-units-service'), - instance_ip=os.getenv('HOSTNAME', 'fda-units-service'), - instance_host=os.getenv('HOSTNAME', 'fda-units-service'), - instance_port=rest_server_port) if __name__ == '__main__': http_server = WSGIServer((rest_server_host, rest_server_port), app) diff --git a/dbrepo-semantics-service/healthcheck.sh b/dbrepo-semantics-service/healthcheck.sh new file mode 100644 index 0000000000000000000000000000000000000000..0854264b627e9d8ef06b338ff4931c00893f3dfc --- /dev/null +++ b/dbrepo-semantics-service/healthcheck.sh @@ -0,0 +1,5 @@ +#!/bin/bash +HTTP_CODE=$(curl --silent --output /dev/stderr --write-out "%{http_code}" 'http://0.0.0.0:5010/metrics') +if test $HTTP_CODE -ne 200; then + exit 1 +fi \ No newline at end of file diff --git a/dbrepo-semantics-service/pywsgi.py b/dbrepo-semantics-service/pywsgi.py index 73578a6f8b4ad1bbbfe0f01e3cc9ca9c14797680..ed26090cef50e4c1255af334bd40e0c4fc57f4fa 100644 --- a/dbrepo-semantics-service/pywsgi.py +++ b/dbrepo-semantics-service/pywsgi.py @@ -10,6 +10,4 @@ path = os.getenv('READY_FILE', './ready') logging.basicConfig(format='%(asctime)s %(levelname)-6s %(message)s', level=logging.DEBUG) http_server = WSGIServer(listener=(rest_server_host, rest_server_port), application=app, log=logging) -with open(path, 'w') as f: - logging.info(f'Service is ready, create file at {path}') http_server.serve_forever() diff --git a/dbrepo-semantics-service/requirements.txt b/dbrepo-semantics-service/requirements.txt index bf2f5a864c50536632b0af24dad167b4b3c8783a..b3a686a9cd73b4c53cb266f28844b05572471b7d 100644 --- a/dbrepo-semantics-service/requirements.txt +++ b/dbrepo-semantics-service/requirements.txt @@ -1,40 +1,55 @@ -attrs==22.2.0 -certifi==2022.12.7 -charset-normalizer==2.1.1 +attrs==23.1.0 +certifi==2023.5.7 +chardet==5.1.0 +charset-normalizer==2.0.12 click==8.1.3 -dnspython==2.2.1 -docker==6.0.1 +coverage==7.1.0 +docker==5.0.0 +exceptiongroup==1.1.1 flasgger==0.9.5 Flask==2.2.2 -gevent==22.10.2 -greenlet==2.0.1 +Flask-JWT-Extended==4.4.4 +gevent==21.8.0 +greenlet==1.1.3.post0 +html5lib==1.1 idna==3.4 -ifaddr==0.2.0 -importlib-metadata==5.2.0 +importlib-metadata==6.6.0 +iniconfig==2.0.0 isodate==0.6.1 itsdangerous==2.1.2 Jinja2==3.1.2 +json-table-schema==0.2.1 jsonschema==4.17.3 +lxml==4.9.2 mariadb==1.0.10 -MarkupSafe==2.1.1 -mistune==2.0.4 -packaging==22.0 -prometheus-client==0.15.0 +MarkupSafe==2.1.2 +messytables==0.15.2 +mistune==2.0.5 +numpy==1.24.3 +packaging==23.1 +pandas==1.2.3 +pluggy==1.0.0 +prometheus-client==0.16.0 prometheus-flask-exporter==0.21.0 -py-eureka-client==0.11.7 +psycopg2-binary==2.8.6 +PyJWT==2.6.0 pyparsing==3.0.9 pyrsistent==0.19.3 +pytest==7.2.1 +python-dateutil==2.8.2 +python-magic==0.4.27 +pytz==2023.3 PyYAML==6.0 rdflib==6.2.0 -requests==2.28.1 +requests==2.26.0 six==1.16.0 -urllib3==1.26.13 -websocket-client==1.4.2 -Werkzeug==2.2.2 -zipp==3.11.0 +SQLAlchemy==1.4.15 +tomli==2.0.1 +urllib3==1.26.15 +webencodings==0.5.1 +websocket-client==1.5.1 +Werkzeug==2.3.3 +xlrd==2.0.1 +zipp==3.15.0 zope.event==4.6 -zope.interface==5.5.2 -html5lib==1.1 -pytest==7.2.1 -coverage==7.1.0 -Flask-JWT-Extended==4.4.4 \ No newline at end of file +zope.interface==6.0 diff --git a/dbrepo-semantics-service/service_ready b/dbrepo-semantics-service/service_ready deleted file mode 100644 index 52b578bd3275133b2d4913c327faf1e9a2f98ef1..0000000000000000000000000000000000000000 --- a/dbrepo-semantics-service/service_ready +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -if [ -f "${READY_FILE}" ]; then - echo "service is ready and accepting connections" - exit 0 -fi -exit 1 \ No newline at end of file diff --git a/dbrepo-table-service/Dockerfile b/dbrepo-table-service/Dockerfile index f4741fc864e57308be33fd48fbdedce6af48f8f7..03486d1abf34320ddef700dc2588cb230668920e 100644 --- a/dbrepo-table-service/Dockerfile +++ b/dbrepo-table-service/Dockerfile @@ -3,7 +3,8 @@ FROM dbrepo-metadata-db:latest as dependency MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> ###### SECOND STAGE ###### -FROM maven:slim as build +FROM maven:3-openjdk-17 as build +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> COPY ./pom.xml ./ @@ -19,7 +20,10 @@ COPY ./report ./report RUN mvn -q clean package -DskipTests ###### THIRD STAGE ###### -FROM openjdk:11-jre-slim as runtime +FROM openjdk:17-alpine as runtime +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +RUN apk --no-cache add bash ENV METADATA_DB=fda ENV METADATA_USERNAME=root @@ -31,7 +35,7 @@ ENV USER_NETWORK=userdb ENV LOG_LEVEL=debug ENV DBREPO_CLIENT_SECRET=client-secret ENV CLIENT_ID=dbrepo-client -ENV JWT_ISSUER=http://localhost:8080/realms/dbrepo +ENV JWT_ISSUER=http://localhost/realms/dbrepo ENV JWT_PUBKEY=public-key WORKDIR /app @@ -45,4 +49,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./table-service.jar EXPOSE 9091 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./table-service.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./table-service.jar"] diff --git a/dbrepo-table-service/pom.xml b/dbrepo-table-service/pom.xml index 46fde5c0506ed540b8ebaa6eb9c2d9529d55b0d0..d82996f45d43ce1653c1434f7d0350b68d4f3d94 100644 --- a/dbrepo-table-service/pom.xml +++ b/dbrepo-table-service/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.3.10.RELEASE</version> + <version>3.0.6</version> </parent> <groupId>at.tuwien</groupId> @@ -22,26 +22,21 @@ </modules> <properties> - <java.version>11</java.version> - <spring-cloud.version>3.0.1</spring-cloud.version> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <docker.version>3.2.7</docker.version> - <testcontainers.version>1.15.2</testcontainers.version> - <jacoco.version>0.8.7</jacoco.version> - <opencsv.version>5.4</opencsv.version> - <super-csv.version>2.4.0</super-csv.version> - <btrace-client.version>2.2.0</btrace-client.version> - <random-utils.version>2.0.0</random-utils.version> - <hibernate-c3po.version>5.6.3.Final</hibernate-c3po.version> - <jsql.version>3.1</jsql.version> + <java.version>17</java.version> + <spring-cloud.version>4.0.2</spring-cloud.version> + <mapstruct.version>1.5.5.Final</mapstruct.version> + <docker.version>3.3.0</docker.version> + <swagger.version>2.2.9</swagger.version> + <jacoco.version>0.8.10</jacoco.version> <jwt.version>4.3.0</jwt.version> + <opencsv.version>5.7.1</opencsv.version> + <super-csv.version>2.4.0</super-csv.version> + <jsql.version>4.6</jsql.version> + <c3p0.version>0.9.5.5</c3p0.version> + <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> </properties> <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-webflux</artifactId> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> @@ -97,16 +92,21 @@ <version>${project.version}</version> <scope>compile</scope> </dependency> - <dependency> - <groupId>org.hibernate</groupId> - <artifactId>hibernate-c3p0</artifactId> - <version>${hibernate-c3po.version}</version> - </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- DataSource --> + <dependency> + <groupId>com.mchange</groupId> + <artifactId>c3p0</artifactId> + <version>${c3p0.version}</version> + </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-c3p0</artifactId> + <version>${c3p0-hibernate.version}</version> + </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> @@ -116,11 +116,6 @@ <artifactId>mariadb-java-client</artifactId> <version>${mariadb.version}</version> </dependency> - <dependency> - <groupId>mysql</groupId> - <artifactId>mysql-connector-java</artifactId> - <version>${mysql.version}</version> - </dependency> <!-- SQL Parser --> <dependency> <groupId>com.github.jsqlparser</groupId> @@ -134,11 +129,6 @@ <artifactId>super-csv</artifactId> <version>${super-csv.version}</version> </dependency> - <dependency> - <groupId>io.btrace</groupId> - <artifactId>btrace-client</artifactId> - <version>${btrace-client.version}</version> - </dependency> <!-- AMPQ --> <dependency> <groupId>com.rabbitmq</groupId> @@ -171,12 +161,6 @@ <artifactId>dbrepo-metadata-db-test</artifactId> <version>${project.version}</version> </dependency> - <!-- DTO --> - <dependency> - <groupId>com.opencsv</groupId> - <artifactId>opencsv</artifactId> - <version>${opencsv.version}</version> - </dependency> <!-- IDE --> <dependency> <groupId>org.projectlombok</groupId> diff --git a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java index 73df4fddb494a6f8b885c02c356798a1fe682220..9127764b70c804a352d658c5cc05fa0f479fd2a6 100644 --- a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java +++ b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableColumnEndpoint.java @@ -22,8 +22,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; @Log4j2 diff --git a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java index f142018b3e407d40fcd18bbb1e6b6e8f894e2a8e..bc5c696fd912b6535ccf5adc778c29af0a738dd5 100644 --- a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java +++ b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java @@ -2,12 +2,9 @@ package at.tuwien.endpoints; import at.tuwien.api.database.table.*; import at.tuwien.api.error.ApiErrorDto; -import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; -import at.tuwien.entities.user.User; import at.tuwien.exception.*; import at.tuwien.mapper.TableMapper; -import at.tuwien.service.DatabaseService; import at.tuwien.service.MessageQueueService; import at.tuwien.service.TableService; import at.tuwien.validation.EndpointValidator; @@ -26,8 +23,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.List; import java.util.stream.Collectors; @@ -183,8 +180,8 @@ public class TableEndpoint { throws TableNotFoundException, DatabaseNotFoundException, ContainerNotFoundException, NotAllowedException { log.debug("endpoint find table, containerId={}, databaseId={}, tableId={}, principal={}", containerId, databaseId, tableId, principal); - endpointValidator.validateOnlyPrivateAccess(containerId, databaseId, principal); - endpointValidator.validateOnlyPrivateHasRole(containerId, databaseId, principal, "find-table"); +// endpointValidator.validateOnlyPrivateAccess(containerId, databaseId, principal); +// endpointValidator.validateOnlyPrivateHasRole(containerId, databaseId, principal, "find-table"); final Table table = tableService.findById(containerId, databaseId, tableId); final TableDto dto = tableMapper.tableToTableDto(table); log.trace("find table resulted in table {}", dto); diff --git a/dbrepo-table-service/rest-service/src/main/resources/application-local.yml b/dbrepo-table-service/rest-service/src/main/resources/application-local.yml index ea99819af32bc89472368d14f1b2659054f042d9..1e35ebe62b25226b714041dce395d3a78528010c 100644 --- a/dbrepo-table-service/rest-service/src/main/resources/application-local.yml +++ b/dbrepo-table-service/rest-service/src/main/resources/application-local.yml @@ -22,8 +22,13 @@ spring: name: table-service rabbitmq: host: localhost + virtual-host: dbrepo username: fda password: fda + elasticsearch: + password: elastic + username: elastic + uris: http://localhost:9200 cloud: loadbalancer.ribbon.enabled: false management.endpoints.web.exposure.include: health,info,prometheus @@ -35,20 +40,11 @@ logging: root: warn at.tuwien.: trace org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: table-service - non-secure-port: 9094 - client.serviceUrl.defaultZone: http://localhost:9090/eureka/ fda: ready.path: ./ready jwt: - issuer: https://localhost:8443/realms/dbrepo + issuer: http://localhost/realms/dbrepo public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB client_secret: client-secret client_id: dbrepo-client - gateway.endpoint: http://localhost:9095 - elastic: - endpoint: localhost:9200 - username: elastic - password: elastic \ No newline at end of file + gateway.endpoint: http://localhost \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/main/resources/application.yml b/dbrepo-table-service/rest-service/src/main/resources/application.yml index 24e4a6534817db7d06711591e7ba03782bebdd8b..3cf83d1507d6556d0060756be16fa5d930edd7bb 100644 --- a/dbrepo-table-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-table-service/rest-service/src/main/resources/application.yml @@ -22,8 +22,13 @@ spring: name: table-service rabbitmq: host: broker-service + virtual-host: dbrepo username: "${BROKER_USERNAME}" password: "${BROKER_PASSWORD}" + elasticsearch: + password: "${ELASTIC_PASSWORD}" + username: elastic + uris: http://search-service:9200 cloud: loadbalancer.ribbon.enabled: false management.endpoints.web.exposure.include: health,info,prometheus @@ -35,11 +40,6 @@ logging: root: warn at.tuwien.: "${LOG_LEVEL}" org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: table-service - non-secure-port: 9094 - client.serviceUrl.defaultZone: http://discovery-service:9090/eureka/ fda: ready.path: /ready jwt: @@ -47,8 +47,4 @@ fda: public_key: "${JWT_PUBKEY}" client_secret: "${DBREPO_CLIENT_SECRET}" client_id: "${CLIENT_ID}" - gateway.endpoint: http://gateway-service:9095 - elastic: - endpoint: search-service:9200 - username: elastic - password: "${ELASTIC_PASSWORD}" \ No newline at end of file + gateway.endpoint: http://gateway-service \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java index 5df092b16f2428901cd127d968d8c993491d9b01..e52f7c89de188832f1c681d461ffbb6ea30011db 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java +++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java @@ -75,7 +75,6 @@ public class TableEndpointIntegrationTest extends BaseUnitTest { /* create network */ DockerConfig.createAllNetworks(); /* metadata database */ - h2Utils.runScript("schema.sql"); imageRepository.save(IMAGE_1); realmRepository.save(REALM_DBREPO); userRepository.save(USER_1_SIMPLE); diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java index b2671aa828af6d5844f50fbca66c4a27c6707e67..3ea4f20546b2115a11e066387280f1976eac07be 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java +++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java @@ -186,12 +186,12 @@ public class TableEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = "find-table") - public void findById_publicHasRoleDatabaseNotFound_fails() { + public void findById_publicHasRoleDatabaseNotFound_succeeds() throws UserNotFoundException, TableNotFoundException, + NotAllowedException, TableMalformedException, QueryMalformedException, DatabaseNotFoundException, + ImageNotSupportedException, AmqpException, TableNameExistsException, ContainerNotFoundException { /* test */ - assertThrows(DatabaseNotFoundException.class, () -> { - generic_findById(CONTAINER_3_ID, DATABASE_3_ID, TABLE_8_ID, null, TABLE_8, USER_1_USERNAME, USER_1_PRINCIPAL, DATABASE_1_USER_1_READ_ACCESS); - }); + generic_findById(CONTAINER_3_ID, DATABASE_3_ID, TABLE_8_ID, null, TABLE_8, USER_1_USERNAME, USER_1_PRINCIPAL, DATABASE_1_USER_1_READ_ACCESS); } @Test @@ -360,12 +360,12 @@ public class TableEndpointUnitTest extends BaseUnitTest { @Test @WithAnonymousUser - public void findById_privateAnonymous_fails() { + public void findById_privateAnonymous_succeeds() throws UserNotFoundException, TableNotFoundException, + NotAllowedException, TableMalformedException, QueryMalformedException, DatabaseNotFoundException, + ImageNotSupportedException, AmqpException, TableNameExistsException, ContainerNotFoundException { /* test */ - assertThrows(NotAllowedException.class, () -> { - generic_findById(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, null, null, null); - }); + generic_findById(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, null, null, null); } @Test @@ -380,12 +380,12 @@ public class TableEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_1_USERNAME, authorities = "find-table") - public void findById_privateHasRoleDatabaseNotFound_fails() { + public void findById_privateHasRoleDatabaseNotFound_succeeds() throws UserNotFoundException, TableNotFoundException, + NotAllowedException, TableMalformedException, QueryMalformedException, DatabaseNotFoundException, + ImageNotSupportedException, AmqpException, TableNameExistsException, ContainerNotFoundException { /* test */ - assertThrows(DatabaseNotFoundException.class, () -> { - generic_findById(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, null, TABLE_1, USER_1_USERNAME, USER_1_PRINCIPAL, DATABASE_1_USER_1_READ_ACCESS); - }); + generic_findById(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, null, TABLE_1, USER_1_USERNAME, USER_1_PRINCIPAL, DATABASE_1_USER_1_READ_ACCESS); } @Test @@ -401,12 +401,12 @@ public class TableEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_4_USERNAME) - public void findById_privateNoRole_fails() { + public void findById_privateNoRole_succeeds() throws UserNotFoundException, TableNotFoundException, + NotAllowedException, TableMalformedException, QueryMalformedException, DatabaseNotFoundException, + ImageNotSupportedException, AmqpException, TableNameExistsException, ContainerNotFoundException { /* test */ - assertThrows(NotAllowedException.class, () -> { - generic_findById(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, USER_4_USERNAME, USER_4_PRINCIPAL, null); - }); + generic_findById(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, USER_4_USERNAME, USER_4_PRINCIPAL, null); } @Test @@ -450,12 +450,12 @@ public class TableEndpointUnitTest extends BaseUnitTest { @Test @WithMockUser(username = USER_4_USERNAME) - public void delete_privateNoRole_fails() { + public void delete_privateNoRole_succeeds() throws UserNotFoundException, TableNotFoundException, + NotAllowedException, TableMalformedException, QueryMalformedException, DatabaseNotFoundException, + ImageNotSupportedException, AmqpException, TableNameExistsException, ContainerNotFoundException { /* test */ - assertThrows(NotAllowedException.class, () -> { - generic_findById(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, USER_4_USERNAME, USER_4_PRINCIPAL, null); - }); + generic_findById(CONTAINER_1_ID, DATABASE_1_ID, TABLE_1_ID, DATABASE_1, TABLE_1, USER_4_USERNAME, USER_4_PRINCIPAL, null); } /* ################################################################################################### */ diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java index b29d7752a4e410b5e86dbc194ceb818b596572ba..d91e8827fbe4446048bd10d50d12516fdf2e4de8 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java +++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java @@ -10,6 +10,8 @@ import at.tuwien.repository.elastic.TableColumnIdxRepository; import at.tuwien.repository.elastic.TableIdxRepository; import at.tuwien.repository.jpa.TableRepository; import at.tuwien.utils.AmqpUtils; +import com.rabbitmq.client.BuiltinExchangeType; +import com.rabbitmq.client.Channel; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -20,6 +22,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.junit.jupiter.SpringExtension; +import java.io.IOException; import java.util.List; import static org.junit.jupiter.api.Assertions.*; @@ -48,6 +51,9 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { @Autowired private AmqpUtils amqpUtils; + @Autowired + private Channel channel; + @Autowired private MessageQueueService messageQueueService; @@ -69,12 +75,12 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest { } @Test - public void init_succeeds() throws AmqpException { + public void init_succeeds() throws AmqpException, IOException { /* mock */ + channel.exchangeDeclare(DATABASE_1_EXCHANGE, BuiltinExchangeType.FANOUT, true, false, null); when(tableRepository.findAll()) .thenReturn(List.of(TABLE_1, TABLE_2)); - amqpUtils.createExchange(DATABASE_1_EXCHANGE); /* test */ assertTrue(amqpUtils.exchangeExists(DATABASE_1_EXCHANGE)); diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java index 7f209d1d864efc8b8853e0dde409a2650113a1e9..2759fe65b2bfe5b081b1914febbdc45547f9f418 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java +++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java @@ -92,7 +92,6 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest { @BeforeEach public void beforeEach() { - h2Utils.runScript("schema.sql"); imageRepository.save(IMAGE_1); realmRepository.save(REALM_DBREPO); userRepository.save(USER_1_SIMPLE); diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java index 2bdbfed18a07d723f9e49dc8c0488d2f82826b30..d3482ae758f55d8dbf481b979c08762167ea3156 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java +++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java @@ -92,7 +92,6 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest { DockerConfig.createContainer(BIND_WEATHER, CONTAINER_1, CONTAINER_1_ENV); DockerConfig.startContainer(CONTAINER_1); /* metadata database */ - h2Utils.runScript("schema.sql"); imageRepository.save(IMAGE_1); realmRepository.save(REALM_DBREPO); userRepository.save(USER_1_SIMPLE); diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java index eb36b5e3c9d7d7764a00eaa608e9523127796700..63a8ca04afa38c5c3976be442a56c53514239f1a 100644 --- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java +++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/utils/AmqpUtils.java @@ -1,6 +1,5 @@ package at.tuwien.utils; -import at.tuwien.api.amqp.CreateExchangeDto; import at.tuwien.api.amqp.ExchangeDto; import at.tuwien.api.amqp.QueueDto; import at.tuwien.config.AmqpConfig; @@ -32,22 +31,6 @@ public class AmqpUtils { this.amqpConfig = amqpConfig; } - public void createExchange(String exchange) { - exchange = exchange.replace("/", "%2F"); - final URI uri = URI.create("http://" + amqpConfig.getAmpqHost() + ":15672/api/exchanges/%2F/" + exchange); - final CreateExchangeDto payload = CreateExchangeDto.builder() - .type("fanout") - .autoDelete(false) - .durable(true) - .internal(false) - .build(); - final ResponseEntity<Void> response = restTemplate.exchange(uri, HttpMethod.PUT, new HttpEntity<>(payload), Void.class); - if (!response.getStatusCode().equals(HttpStatus.CREATED)) { - log.error("Failed to create exchange, code is {}", response.getStatusCode()); - throw new RuntimeException("Failed to create exchange"); - } - } - public boolean exchangeExists(String exchange) { final ResponseEntity<ExchangeDto[]> response = restTemplate.exchange("/api/exchanges", HttpMethod.GET, null, ExchangeDto[].class); if (!response.getStatusCode().equals(HttpStatus.OK)) { diff --git a/dbrepo-table-service/rest-service/src/test/resources/application.properties b/dbrepo-table-service/rest-service/src/test/resources/application.properties index 41b07348e3e6e770e028deace6feaf5f801b0a25..65007f07659129fba0dbf7f2f6dc6f2c29d2ca7d 100644 --- a/dbrepo-table-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-table-service/rest-service/src/test/resources/application.properties @@ -9,7 +9,8 @@ spring.cloud.config.discovery.enabled=false spring.cloud.config.enabled=false # internal datasource -spring.datasource.url=jdbc:h2:mem:testdb;DATABASE_TO_UPPER=false;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL;INIT=RUNSCRIPT FROM 'classpath:schema.sql' +# spring 6 fix https://github.com/h2database/h2database/issues/3363 +spring.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=VALUE,KEY;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password @@ -20,7 +21,8 @@ spring.jpa.show-sql=false # log logging.level.org.hibernate.SQL=trace -# broker service +# rabbitmq spring.rabbitmq.host=dbrepo-broker-service +spring.rabbitmq.virtual-host=/ spring.rabbitmq.username=guest spring.rabbitmq.password=guest \ No newline at end of file diff --git a/dbrepo-table-service/rest-service/src/test/resources/schema.sql b/dbrepo-table-service/rest-service/src/test/resources/schema.sql deleted file mode 100644 index a668576dc0eb51e77237c42710fb0876ea5afb9b..0000000000000000000000000000000000000000 --- a/dbrepo-table-service/rest-service/src/test/resources/schema.sql +++ /dev/null @@ -1,20 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS `fda`; -SET SCHEMA `fda`; -DROP TABLE IF EXISTS fda.mdb_concepts; -CREATE TABLE fda.mdb_concepts -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); -DROP TABLE IF EXISTS fda.mdb_units; -CREATE TABLE fda.mdb_units -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); \ No newline at end of file diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-table-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java index b2b01c42ee9868215962426b18b3a70450bff7ac..92b60f4f8a5ed8a566e2504d71b63478b1593f68 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ b/dbrepo-table-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java @@ -6,6 +6,10 @@ import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -16,10 +20,6 @@ import org.springframework.security.web.authentication.WebAuthenticationDetailsS import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/AmqpConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/AmqpConfig.java index e9b1381e62228aa2fac455f96efbf20db48bc9e9..e44b5c5ddce5ea79728fa7261b63ba8ae5661bd3 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/AmqpConfig.java +++ b/dbrepo-table-service/services/src/main/java/at/tuwien/config/AmqpConfig.java @@ -20,6 +20,9 @@ public class AmqpConfig { @Value("${spring.rabbitmq.host}") private String ampqHost; + @Value("${spring.rabbitmq.virtual-host}") + private String virtualHost; + @Value("${spring.rabbitmq.username}") private String amqpUsername; @@ -30,6 +33,7 @@ public class AmqpConfig { public Channel getChannel() throws IOException, TimeoutException { final ConnectionFactory factory = new ConnectionFactory(); factory.setHost(ampqHost); + factory.setVirtualHost(virtualHost); factory.setUsername(amqpUsername); factory.setPassword(amqpPassword); final Connection connection = factory.newConnection(); diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java index 1f447e2c839977c02443090cdfb6568c5e04e79b..58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java +++ b/dbrepo-table-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java @@ -1,42 +1,45 @@ package at.tuwien.config; -import org.elasticsearch.client.RestHighLevelClient; +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.json.jackson.JacksonJsonpMapper; +import co.elastic.clients.transport.ElasticsearchTransport; +import co.elastic.clients.transport.rest_client.RestClientTransport; +import lombok.extern.log4j.Log4j2; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.elasticsearch.client.RestClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.data.elasticsearch.client.ClientConfiguration; -import org.springframework.data.elasticsearch.client.RestClients; -import org.springframework.data.elasticsearch.core.ElasticsearchOperations; -import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; -import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; - -import java.util.Properties; +@Log4j2 @Configuration public class ElasticsearchConfig { - @Value("${fda.elastic.endpoint}") + @Value("${spring.elasticsearch.uris}") private String elasticEndpoint; - @Value("${fda.elastic.username}") + @Value("${spring.elasticsearch.username}") private String elasticUsername; - @Value("${fda.elastic.password}") + @Value("${spring.elasticsearch.password}") private String elasticPassword; @Bean - public RestHighLevelClient client() { - ClientConfiguration clientConfiguration = ClientConfiguration.builder() - .connectedTo(elasticEndpoint) - .withBasicAuth(elasticUsername, elasticPassword) + public ElasticsearchClient elasticsearchClient() { + log.debug("elastic endpoint={}", elasticEndpoint); + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword)); + final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint)) + .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder + .setDefaultCredentialsProvider(credentialsProvider)) .build(); - - return RestClients.create(clientConfiguration).rest(); + ElasticsearchTransport transport = new RestClientTransport( + restClient, new JacksonJsonpMapper()); + return new ElasticsearchClient(transport); } - @Bean - public ElasticsearchOperations elasticsearchTemplate() { - return new ElasticsearchRestTemplate(client()); - } } \ No newline at end of file diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/JacksonConfig.java index fba7f99cf2bf1cbb12ac51cd6fd5b80751ff43c1..c4944a469174ad1962d5c54cc483400dbee12f1d 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ b/dbrepo-table-service/services/src/main/java/at/tuwien/config/JacksonConfig.java @@ -19,7 +19,6 @@ public class JacksonConfig { @Bean public ObjectMapper objectMapper() throws JsonProcessingException { final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); objectMapper.registerModule(new Jdk8Module()); objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java index be46fcc18b2bf6f3c4bb1bed18983e780b735241..73dd29d4eff73dd3dd03fc92f83517290ee0e9f7 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ b/dbrepo-table-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java @@ -5,18 +5,19 @@ import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; import io.swagger.v3.oas.annotations.security.SecurityScheme; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.util.matcher.OrRequestMatcher; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; @Configuration @EnableWebSecurity @@ -27,15 +28,25 @@ import javax.servlet.http.HttpServletResponse; bearerFormat = "JWT", scheme = "bearer" ) -public class WebSecurityConfig extends WebSecurityConfigurerAdapter { +public class WebSecurityConfig { @Bean public AuthTokenFilter authTokenFilter() { return new AuthTokenFilter(); } - @Override - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + final OrRequestMatcher internalEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/actuator/prometheus/**", "GET") + ); + final OrRequestMatcher publicEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/api/container/**/database/**/table/**", "GET"), + new AntPathRequestMatcher("/v3/api-docs.yaml"), + new AntPathRequestMatcher("/v3/api-docs/**"), + new AntPathRequestMatcher("/swagger-ui/**"), + new AntPathRequestMatcher("/swagger-ui.html") + ); /* enable CORS and disable CSRF */ http = http.cors().and().csrf().disable(); /* set session management to stateless */ @@ -54,21 +65,18 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { } ).and(); /* set permissions on endpoints */ - http.authorizeRequests() + http.authorizeHttpRequests() /* our internal endpoints */ - .antMatchers(HttpMethod.GET, "/actuator/prometheus/**").permitAll() + .requestMatchers(internalEndpoints).permitAll() /* our public endpoints */ - .antMatchers(HttpMethod.GET, "/api/container/**/database/**/table/**").permitAll() - .antMatchers("/v3/api-docs.yaml", - "/v3/api-docs/**", - "/swagger-ui/**", - "/swagger-ui.html").permitAll() + .requestMatchers(publicEndpoints).permitAll() /* our private endpoints */ .anyRequest().authenticated(); /* add JWT token filter */ http.addFilterBefore(authTokenFilter(), UsernamePasswordAuthenticationFilter.class ); + return http.build(); } @Bean @@ -76,7 +84,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); - config.addAllowedOrigin("*"); + config.addAllowedOriginPattern("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/MessageQueueService.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/MessageQueueService.java index c8ef46283e94425703d5458cb19dd9e2e980fff5..8c34a8a02111b0e20d7c7433d697c44c3e5e2527 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/MessageQueueService.java +++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/MessageQueueService.java @@ -2,13 +2,12 @@ package at.tuwien.service; import at.tuwien.entities.database.table.Table; import at.tuwien.exception.AmqpException; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.PostConstruct; -import java.io.IOException; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; public interface MessageQueueService { + @EventListener(ApplicationReadyEvent.class) void init() throws AmqpException; /** diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java index 7d19c48e1c4eac61c58aab5e5ff02f718e925186..3656f0a6efdc2d0d110f315502e7e795cc02850b 100644 --- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java +++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/HibernateConnector.java @@ -5,13 +5,10 @@ import at.tuwien.entities.container.image.ContainerImage; import at.tuwien.entities.container.image.ContainerImageEnvironmentItem; import at.tuwien.entities.container.image.ContainerImageEnvironmentItemType; import at.tuwien.entities.database.Database; -import at.tuwien.exception.DatabaseConnectionException; import com.mchange.v2.c3p0.ComboPooledDataSource; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Service; -import java.sql.Connection; -import java.sql.SQLException; import java.util.stream.Collectors; @Log4j2 diff --git a/dbrepo-ui/.prod/default.conf b/dbrepo-ui/.prod/default.conf deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/dbrepo-ui/Dockerfile b/dbrepo-ui/Dockerfile index 6fa3d4acf93c3259eb12274b4421c0939949babd..582126fc3e19d3822e440c9675083c3047bc1f20 100644 --- a/dbrepo-ui/Dockerfile +++ b/dbrepo-ui/Dockerfile @@ -17,7 +17,7 @@ COPY ./package.json ./ COPY ./yarn.lock ./ # Install yarn dependencies -RUN yarn install --frozen-lockfile > /dev/null 2>&1 +RUN yarn install --frozen-lockfile COPY ./nuxt.config.js ./ COPY ./ava.config.cjs ./ @@ -36,7 +36,7 @@ COPY ./static ./static COPY ./store ./store COPY ./utils ./utils -RUN yarn build > /dev/null +RUN yarn build FROM node:14-alpine as runtime MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> diff --git a/dbrepo-ui/README.md b/dbrepo-ui/README.md index 50b0454feff6ccb71ec382367fbd49de9cc863b1..c4f407ba90f72ae0af0398394613b55c6cea031f 100644 --- a/dbrepo-ui/README.md +++ b/dbrepo-ui/README.md @@ -44,7 +44,7 @@ See https://nuxtjs.org/ Configure the `.env` file for the IP and port running or run through terminal: ```bash -API=http://fda-gateway-service:9095 npm --prefix ./fda-ui run dev +API=http://fda-gateway-service npm --prefix ./fda-ui run dev ``` Of course you need to add `fda-gateway-service` to your `/etc/hosts` file for Docker "DNS" to your containers: diff --git a/dbrepo-ui/api/broker.service.js b/dbrepo-ui/api/broker.service.js index 32a9ba2bbf7c3b97ca16b3c176f839d9772078c1..6ecea1ff99168d8de14cd8c9a7e242c45e5897e9 100644 --- a/dbrepo-ui/api/broker.service.js +++ b/dbrepo-ui/api/broker.service.js @@ -6,7 +6,7 @@ class BrokerService { findConsumers () { return new Promise((resolve, reject) => { const basic = btoa(`${brokerUsername}:${brokerPassword}`) - axios.get('/api/broker/consumers/%2F', { headers: { Authorization: 'Basic ' + basic } }) + axios.get('/api/broker/consumers/dbrepo', { headers: { Authorization: 'Basic ' + basic } }) .then((response) => { const consumers = response.data console.debug('response consumers', consumers) diff --git a/dbrepo-ui/api/table.service.js b/dbrepo-ui/api/table.service.js index 8cef6aff3f3317efbae7093aeda5a5fea6cc5f0b..4ec9769323546338efc608303750468b90232d56 100644 --- a/dbrepo-ui/api/table.service.js +++ b/dbrepo-ui/api/table.service.js @@ -145,6 +145,7 @@ class TableService { create (id, databaseId, data) { return new Promise((resolve, reject) => { + console.debug('====>', data) api.post(`/api/container/${id}/database/${databaseId}/table`, data, { headers: { Accept: 'application/json' } }) .then((response) => { const table = response.data diff --git a/dbrepo-ui/components/DBToolbar.vue b/dbrepo-ui/components/DBToolbar.vue index ecbc4fe11eb68ae156c440c4ba0dc64ec4343886..b8590bc855355dd9d2e0207a20becb97c25f4e6d 100644 --- a/dbrepo-ui/components/DBToolbar.vue +++ b/dbrepo-ui/components/DBToolbar.vue @@ -55,7 +55,7 @@ <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`"> {{ $t('databases.toolbar.tables', { name: 'vue-i18n' }) }} </v-tab> - <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/query`"> + <v-tab v-if="hasReadAccess" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/query`"> {{ $t('databases.toolbar.subsets', { name: 'vue-i18n' }) }} </v-tab> <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view`"> diff --git a/dbrepo-ui/components/DatabaseList.vue b/dbrepo-ui/components/DatabaseList.vue index 09a64f2f9a75fea3cb8ac7d26b6863379dc1f8c6..fc044ee2ff1321fdcb9e61aee930dbca0accd0eb 100644 --- a/dbrepo-ui/components/DatabaseList.vue +++ b/dbrepo-ui/components/DatabaseList.vue @@ -1,6 +1,6 @@ <template> <div> - <v-progress-linear v-if="loadingContainers || loadingDatabases" :color="loadingColor" :indeterminate="!error" /> + <v-progress-linear v-if="loadingContainers || loadingDatabases" :indeterminate="!error" /> <v-card v-for="(container, idx) in containers" :key="idx" @@ -17,9 +17,13 @@ <div class="db-tags"> <v-chip v-if="hasDatabase(container) && container.database.is_public" small color="green" outlined>Public</v-chip> <v-chip v-if="hasDatabase(container) && !container.database.is_public" small color="red" outlined>Private</v-chip> - <v-chip v-if="hasIdentifier(container)" small outlined>PID</v-chip> <v-chip - v-if="identifierCreated(container)" + v-if="identifierYear(container)" + small + outlined + v-text="identifierYear(container)" /> + <v-chip + v-if="hasIdentifier(container)" small outlined v-text="container.database.identifier.publisher" /> @@ -58,7 +62,6 @@ </template> <script> -import { formatYearUTC, isResearcher } from '@/utils' import DatabaseService from '@/api/database.service' import ContainerService from '@/api/container.service' import ContainerMapper from '@/api/container.mapper' @@ -81,25 +84,11 @@ export default { } }, computed: { - loadingColor () { - return this.error ? 'red lighten-2' : 'primary' - }, token () { return this.$store.state.token }, user () { return this.$store.state.user - }, - isResearcher () { - return isResearcher(this.user) - }, - config () { - if (this.token === null) { - return {} - } - return { - headers: { Authorization: `Bearer ${this.token}` } - } } }, mounted () { @@ -133,11 +122,11 @@ export default { hasIdentifier (container) { return container.database && container.database.identifier }, - identifierCreated (container) { - if (!container || !container.database || !container.database.identifier) { + identifierYear (container) { + if (!container || !container.database || !container.database.identifier || !container.database.identifier.publication_year) { return null } - return formatYearUTC(container.database.identifier.created) + return container.database.identifier.publication_year }, identifierDescription (container) { if (!container || !container.database || !container.database.identifier) { diff --git a/dbrepo-ui/components/TableToolbar.vue b/dbrepo-ui/components/TableToolbar.vue index c11713dd33b36508a043d6112125d6f5a00838e0..b3f22595c99e203c8b9309e3b9cb29aa998d3f0b 100644 --- a/dbrepo-ui/components/TableToolbar.vue +++ b/dbrepo-ui/components/TableToolbar.vue @@ -2,7 +2,7 @@ <div v-if="table"> <v-toolbar flat> <v-toolbar-title> - <v-btn id="back-btn" class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`"> + <v-btn id="back-btn" plain class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`"> <v-icon left>mdi-arrow-left</v-icon> </v-btn> </v-toolbar-title> diff --git a/dbrepo-ui/components/query/Builder.vue b/dbrepo-ui/components/query/Builder.vue index 970cfbd21845e219816d3974c10931d960e81a96..9acae34636ade73f1e78f7ec69b443bad2386197 100644 --- a/dbrepo-ui/components/query/Builder.vue +++ b/dbrepo-ui/components/query/Builder.vue @@ -321,6 +321,7 @@ export default { }, createView () { this.loadingQuery = true + this.view.query = this.sql DatabaseService.createView(this.$route.params.container_id, this.$route.params.database_id, this.view) .then(async (view) => { this.resultId = view.id diff --git a/dbrepo-ui/layouts/default.vue b/dbrepo-ui/layouts/default.vue index 82ed12293a3f0a75108dff7f901ac7747ce69e65..8f9358cb23445b85c536ecd2a37662f3f8e0bbae 100644 --- a/dbrepo-ui/layouts/default.vue +++ b/dbrepo-ui/layouts/default.vue @@ -125,7 +125,6 @@ import AuthenticationService from '@/api/authentication.service' import DatabaseService from '@/api/database.service' import TableService from '@/api/table.service' -import IdentifierService from '@/api/identifier.service' export default { data () { @@ -262,7 +261,7 @@ export default { this.loading = false this.loadTable() }) - .catch(() => { + .finally(() => { this.loading = false }) }, @@ -296,20 +295,6 @@ export default { this.loading = false }) }, - loadIdentifier () { - if (!this.database || 'identifier' in this.database) { - return - } - this.loading = true - IdentifierService.find(this.database.identifier.id) - .then((identifier) => { - this.database.identifier = identifier - this.$store.commit('SET_DATABASE', this.database) - }) - .finally(() => { - this.loading = false - }) - }, retrieve () { this.$router.push({ path: '/search', query: { q: this.search } }) } diff --git a/dbrepo-ui/package.json b/dbrepo-ui/package.json index b310403577d3b2afb6ca85ade62e2f9da892a22e..a3b58578eafcca99ad88ffcbe7349770610db7c7 100644 --- a/dbrepo-ui/package.json +++ b/dbrepo-ui/package.json @@ -23,8 +23,8 @@ "@babel/plugin-transform-runtime": "^7.13.9", "@mdi/js": "^5.8.55", "@nuxtjs/axios": "^5.13.6", - "@nuxtjs/eslint-module": "^2.0.0", "@nuxtjs/dotenv": "^1.4.1", + "@nuxtjs/eslint-module": "^2.0.0", "@nuxtjs/proxy": "^2.1.0", "@nuxtjs/vuetify": "^1.11.2", "axios": "^1.3.0", diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue b/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue index 7f43332873c371001334fe57dc0eb4575367f803..d3358405f24c508851ee038966de1f6260329d9f 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue +++ b/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue @@ -375,10 +375,6 @@ export default { this.validStep4 = true this.createTable() }, - setOthers (column) { - column.null_allowed = false - column.unique = true - }, loadDateFormats () { this.loadingImage = true ContainerService.findOne(this.$route.params.container_id) @@ -412,12 +408,46 @@ export default { // bail out if there is a problem with one of the columns if (!validColumns.every(Boolean)) { return } - TableService.create(this.$route.params.container_id, this.$route.params.database_id, this.tableCreate) + const table = this.tableCreate.columns.reduce((table, column) => { + // eslint-disable-next-line camelcase + const { name, type, null_allowed, primary_key } = column + table.columns.push({ + name, + type, + null_allowed, + primary_key + }) + if (column.unique) { + table.constraints.uniques.push([column.name]) + } + if (column.check_expression) { + table.checks.push(column.check_expression) + } + if (column.foreign_key && column.references) { + table.foreign_keys.push({ + columns: [column.name], + referenced_table: column.foreign_key, + referenced_columns: [column.references] + }) + } + return table + }, { + name: this.tableCreate.name, + description: this.tableCreate.description, + columns: [], + constraints: { + foreign_keys: [], + uniques: [], + checks: [] + } + }) + TableService.create(this.$route.params.container_id, this.$route.params.database_id, table) .then((table) => { this.newTableId = table.id TableService.importCsv(this.$route.params.container_id, this.$route.params.database_id, table.id, this.tableImport) - .then(() => { + .then(async () => { this.$toast.success('Successfully created table from import!') + await this.$store.dispatch('reloadDatabase') this.step = 5 }) .finally(() => { diff --git a/dbrepo-ui/store/index.js b/dbrepo-ui/store/index.js index 70ffc1c3170b79f0369baa019bdd5e4edb120d3b..e42e49e0d00ab0266b0b35aabab5c273a190146c 100644 --- a/dbrepo-ui/store/index.js +++ b/dbrepo-ui/store/index.js @@ -61,6 +61,12 @@ const store = new Store({ commit('SET_USER', user) }) }, + reloadAccess ({ state, commit }) { + DatabaseService.checkAccess(state.container.id, state.database.id) + .then((access) => { + commit('SET_ACCESS', access) + }) + }, reloadDatabase ({ state, commit }) { DatabaseService.findOne(state.database.container.id, state.database.id) .then((database) => { diff --git a/dbrepo-ui/yarn.lock b/dbrepo-ui/yarn.lock index 2a71a6d3aefb0114bc97aa58dc855a878efd730b..630c16967345821cf860b7a63cd9aab1e3a6ed4f 100644 --- a/dbrepo-ui/yarn.lock +++ b/dbrepo-ui/yarn.lock @@ -2,12 +2,12 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" "@ava/babel@^1.0.1": @@ -49,55 +49,56 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.14.0", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.0.tgz#2a592fd89bacb1fcde68de31bee4f2f2dacb0e86" - integrity sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw== - -"@babel/core@^7.1.0", "@babel/core@^7.12.16", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.14.3", "@babel/core@^7.4.4", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0", "@babel/core@^7.8.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.0.tgz#d2f5f4f2033c00de8096be3c9f45772563e150c3" - integrity sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.0" - "@babel/helper-compilation-targets" "^7.19.0" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helpers" "^7.19.0" - "@babel/parser" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.0", "@babel/compat-data@^7.21.5": + version "7.21.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" + integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== + +"@babel/core@^7.1.0", "@babel/core@^7.12.16", "@babel/core@^7.12.3", "@babel/core@^7.14.3", "@babel/core@^7.21.3", "@babel/core@^7.4.4", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0", "@babel/core@^7.8.4": + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.8.tgz#2a8c7f0f53d60100ba4c32470ba0281c92aa9aa4" + integrity sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-compilation-targets" "^7.21.5" + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helpers" "^7.21.5" + "@babel/parser" "^7.21.8" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.1" + json5 "^2.2.2" semver "^6.3.0" "@babel/eslint-parser@^7.12.16": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz#255a63796819a97b7578751bb08ab9f2a375a031" - integrity sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ== + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.21.8.tgz#59fb6fc4f3b017ab86987c076226ceef7b2b2ef2" + integrity sha512-HLhI+2q+BP3sf78mFUZNCGc10KEmoUqtUT1OCdMZsN+qr4qFeLUod62/zAnF3jNQstwyasDkZnVXwfK2Bml7MQ== dependencies: - eslint-scope "^5.1.1" + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.0.0", "@babel/generator@^7.19.0", "@babel/generator@^7.7.2", "@babel/generator@^7.8.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.0.tgz#785596c06425e59334df2ccee63ab166b738419a" - integrity sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg== +"@babel/generator@^7.0.0", "@babel/generator@^7.21.5", "@babel/generator@^7.7.2", "@babel/generator@^7.8.4": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f" + integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w== dependencies: - "@babel/types" "^7.19.0" + "@babel/types" "^7.21.5" "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.18.6": @@ -108,48 +109,51 @@ "@babel/types" "^7.18.6" "@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz#817f73b6c59726ab39f6ba18c234268a519e5abb" + integrity sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g== dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" + "@babel/types" "^7.21.5" -"@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz#537ec8339d53e806ed422f1e06c8f17d55b96bb0" - integrity sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" + integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== dependencies: - "@babel/compat-data" "^7.19.0" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.20.2" + "@babel/compat-data" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b" - integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz#205b26330258625ef8869672ebca1e0dee5a0f02" + integrity sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-member-expression-to-functions" "^7.21.5" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-replace-supers" "^7.21.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/helper-split-export-declaration" "^7.18.6" + semver "^6.3.0" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b" - integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz#a7886f61c2e29e21fd4aaeaf1e473deba6b571dc" + integrity sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.1.0" + regexpu-core "^5.3.1" + semver "^6.3.0" -"@babel/helper-define-polyfill-provider@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" - integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== dependencies: "@babel/helper-compilation-targets" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" @@ -158,25 +162,18 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== - dependencies: - "@babel/types" "^7.18.6" +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" + integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" @@ -185,33 +182,33 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" - integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== +"@babel/helper-member-expression-to-functions@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz#3b1a009af932e586af77c1030fba9ee0bde396c0" + integrity sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.21.5" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.13.12", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.21.4" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" - integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" + integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-simple-access" "^7.21.5" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" @@ -220,12 +217,12 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" - integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" + integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== -"@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": +"@babel/helper-remap-async-to-generator@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== @@ -235,30 +232,31 @@ "@babel/helper-wrap-function" "^7.18.9" "@babel/types" "^7.18.9" -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" - integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz#a6ad005ba1c7d9bc2973dfde05a1bba7065dde3c" + integrity sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-member-expression-to-functions" "^7.21.5" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" -"@babel/helper-simple-access@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" - integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== +"@babel/helper-simple-access@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" + integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.21.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" - integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.20.0" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" @@ -267,39 +265,39 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-string-parser@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" - integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== +"@babel/helper-string-parser@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" + integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== -"@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== +"@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== "@babel/helper-wrap-function@^7.18.9": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz#89f18335cff1152373222f76a4b37799636ae8b1" - integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== dependencies: "@babel/helper-function-name" "^7.19.0" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" -"@babel/helpers@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18" - integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== +"@babel/helpers@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08" + integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA== dependencies: - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.5" + "@babel/types" "^7.21.5" "@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": version "7.18.6" @@ -310,10 +308,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.14.9", "@babel/parser@^7.18.10", "@babel/parser@^7.18.4", "@babel/parser@^7.19.0", "@babel/parser@^7.7.0", "@babel/parser@^7.9.6": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.0.tgz#497fcafb1d5b61376959c1c338745ef0577aa02c" - integrity sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.14.9", "@babel/parser@^7.18.4", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5", "@babel/parser@^7.21.8", "@babel/parser@^7.7.0", "@babel/parser@^7.9.6": + version "7.21.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" + integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -322,26 +320,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" -"@babel/plugin-proposal-async-generator-functions@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz#cf5740194f170467df20581712400487efc79ff1" - integrity sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ== +"@babel/plugin-proposal-async-generator-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== dependencies: "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.18.6": +"@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -349,25 +347,25 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== +"@babel/plugin-proposal-class-static-block@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" + integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@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" -"@babel/plugin-proposal-decorators@^7.13.15": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.19.0.tgz#5a3bc0699ee34117c73c960a5396ffce104c4eaa" - integrity sha512-Bo5nOSjiJccjv00+BrDkmfeBLBi2B0qe8ygj24KdL8VdwtZz+710NCwehF+x/Ng+0mkHx5za2eAofmvVFLF4Fg== +"@babel/plugin-proposal-decorators@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.21.0.tgz#70e0c89fdcd7465c97593edb8f628ba6e4199d63" + integrity sha512-MfgX49uRrFUTL/HvWtmx3zmpyzMMr4MTj3d527MLlr/4RTT9G/ytFFP7qet2uM2Ve03b+BkpWUpK+lRXnQ+v9w== dependencies: - "@babel/helper-create-class-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/plugin-syntax-decorators" "^7.19.0" + "@babel/plugin-syntax-decorators" "^7.21.0" "@babel/plugin-proposal-dynamic-import@^7.18.6", "@babel/plugin-proposal-dynamic-import@^7.8.3": version "7.18.6" @@ -393,15 +391,15 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== @@ -417,16 +415,16 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" - integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== +"@babel/plugin-proposal-object-rest-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@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.18.8" + "@babel/plugin-transform-parameters" "^7.20.7" "@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" @@ -436,16 +434,16 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.8.3": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== +"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0", "@babel/plugin-proposal-optional-chaining@^7.8.3": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.13.0", "@babel/plugin-proposal-private-methods@^7.18.6": +"@babel/plugin-proposal-private-methods@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== @@ -453,14 +451,14 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== +"@babel/plugin-proposal-private-property-in-object@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" + integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^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" "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": @@ -499,12 +497,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599" - integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ== +"@babel/plugin-syntax-decorators@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.21.0.tgz#d2b3f31c3e86fa86e16bb540b7660c55bd7d0e78" + integrity sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -520,14 +518,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" - integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -541,12 +539,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== +"@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" + integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -604,28 +602,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.18.6", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" - integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== +"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" + integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-arrow-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" - integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== +"@babel/plugin-transform-arrow-functions@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz#9bb42a53de447936a57ba256fbf537fc312b6929" + integrity sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.21.5" -"@babel/plugin-transform-async-to-generator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== +"@babel/plugin-transform-async-to-generator@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== dependencies: "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-transform-block-scoped-functions@^7.18.6": version "7.18.6" @@ -634,41 +632,42 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" - integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== +"@babel/plugin-transform-block-scoping@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" + integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-classes@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz#0e61ec257fba409c41372175e7c1e606dc79bb20" - integrity sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A== +"@babel/plugin-transform-classes@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" + integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.19.0" + "@babel/helper-compilation-targets" "^7.20.7" "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" + "@babel/helper-function-name" "^7.21.0" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" - integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== +"@babel/plugin-transform-computed-properties@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz#3a2d8bb771cd2ef1cd736435f6552fe502e11b44" + integrity sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/template" "^7.20.7" -"@babel/plugin-transform-destructuring@^7.18.13": - version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz#9e03bc4a94475d62b7f4114938e6c5c33372cbf5" - integrity sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow== +"@babel/plugin-transform-destructuring@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" @@ -693,12 +692,12 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== +"@babel/plugin-transform-for-of@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz#e890032b535f5a2e237a18535f56a9fdaa7b83fc" + integrity sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.21.5" "@babel/plugin-transform-function-name@^7.18.9": version "7.18.9" @@ -723,35 +722,32 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" - integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== +"@babel/plugin-transform-modules-amd@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-transform-modules-commonjs@^7.18.6", "@babel/plugin-transform-modules-commonjs@^7.8.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" - integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== +"@babel/plugin-transform-modules-commonjs@^7.21.5", "@babel/plugin-transform-modules-commonjs@^7.8.3": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz#d69fb947eed51af91de82e4708f676864e5e47bc" + integrity sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.21.5" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-simple-access" "^7.21.5" -"@babel/plugin-transform-modules-systemjs@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz#5f20b471284430f02d9c5059d9b9a16d4b085a1f" - integrity sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A== +"@babel/plugin-transform-modules-systemjs@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== dependencies: "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-identifier" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-identifier" "^7.19.1" "@babel/plugin-transform-modules-umd@^7.18.6": version "7.18.6" @@ -761,13 +757,13 @@ "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz#58c52422e4f91a381727faed7d513c89d7f41ada" - integrity sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-new-target@^7.18.6": version "7.18.6" @@ -784,12 +780,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" - integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== +"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" + integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-property-literals@^7.18.6": version "7.18.6" @@ -798,13 +794,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== +"@babel/plugin-transform-regenerator@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz#576c62f9923f94bcb1c855adc53561fd7913724e" + integrity sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" + "@babel/helper-plugin-utils" "^7.21.5" + regenerator-transform "^0.15.1" "@babel/plugin-transform-reserved-words@^7.18.6": version "7.18.6" @@ -813,16 +809,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@^7.13.15", "@babel/plugin-transform-runtime@^7.13.9": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz#37d14d1fa810a368fd635d4d1476c0154144a96f" - integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== +"@babel/plugin-transform-runtime@^7.13.9", "@babel/plugin-transform-runtime@^7.21.0": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" + integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== 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" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-plugin-utils" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.18.6": @@ -832,13 +828,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6" - integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== +"@babel/plugin-transform-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" @@ -861,21 +857,22 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typescript@^7.18.6": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.0.tgz#50c3a68ec8efd5e040bde2cd764e8e16bc0cbeaf" - integrity sha512-DOOIywxPpkQHXijXv+s9MDAyZcLp12oYRl3CMWZ6u7TjSoCBq/KqHR/nNFR3+i2xqheZxoF0H2XyL7B6xeSRuA== +"@babel/plugin-transform-typescript@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" + integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-typescript" "^7.18.6" + "@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-typescript" "^7.20.0" -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== +"@babel/plugin-transform-unicode-escapes@^7.21.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2" + integrity sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.21.5" "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" @@ -885,38 +882,39 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.14.1", "@babel/preset-env@^7.14.4", "@babel/preset-env@^7.4.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.19.0.tgz#fd18caf499a67d6411b9ded68dc70d01ed1e5da7" - integrity sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ== +"@babel/preset-env@^7.14.4", "@babel/preset-env@^7.20.2", "@babel/preset-env@^7.4.4": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.5.tgz#db2089d99efd2297716f018aeead815ac3decffb" + integrity sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg== dependencies: - "@babel/compat-data" "^7.19.0" - "@babel/helper-compilation-targets" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-option" "^7.18.6" + "@babel/compat-data" "^7.21.5" + "@babel/helper-compilation-targets" "^7.21.5" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" "@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.19.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" + "@babel/plugin-proposal-async-generator-functions" "^7.20.7" "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.21.0" "@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-logical-assignment-operators" "^7.20.7" "@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-object-rest-spread" "^7.20.7" "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.21.0" "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.21.0" "@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-import-assertions" "^7.20.0" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@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" @@ -926,44 +924,44 @@ "@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-arrow-functions" "^7.21.5" + "@babel/plugin-transform-async-to-generator" "^7.20.7" "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.18.9" - "@babel/plugin-transform-classes" "^7.19.0" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.18.13" + "@babel/plugin-transform-block-scoping" "^7.21.0" + "@babel/plugin-transform-classes" "^7.21.0" + "@babel/plugin-transform-computed-properties" "^7.21.5" + "@babel/plugin-transform-destructuring" "^7.21.3" "@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-for-of" "^7.21.5" "@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.19.0" + "@babel/plugin-transform-modules-amd" "^7.20.11" + "@babel/plugin-transform-modules-commonjs" "^7.21.5" + "@babel/plugin-transform-modules-systemjs" "^7.20.11" "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" "@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-parameters" "^7.21.3" "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.21.5" "@babel/plugin-transform-reserved-words" "^7.18.6" "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-spread" "^7.20.7" "@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-escapes" "^7.21.5" "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.19.0" - 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" + "@babel/types" "^7.21.5" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" semver "^6.3.0" "@babel/preset-modules@^0.1.5": @@ -978,18 +976,20 @@ esutils "^2.0.2" "@babel/preset-typescript@^7.13.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" - integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz#68292c884b0e26070b4d66b202072d391358395f" + integrity sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-typescript" "^7.18.6" + "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/plugin-transform-modules-commonjs" "^7.21.5" + "@babel/plugin-transform-typescript" "^7.21.3" "@babel/register@^7.13.16": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.18.9.tgz#1888b24bc28d5cc41c412feb015e9ff6b96e439c" - integrity sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw== + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.21.0.tgz#c97bf56c2472e063774f31d344c592ebdcefa132" + integrity sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -997,45 +997,50 @@ pirates "^4.0.5" source-map-support "^0.5.16" -"@babel/runtime@^7.14.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.8.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== - dependencies: - regenerator-runtime "^0.13.4" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/template@^7.18.10", "@babel/template@^7.3.3": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== +"@babel/runtime@^7.15.4", "@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" + integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" + regenerator-runtime "^0.13.11" -"@babel/traverse@^7.14.9", "@babel/traverse@^7.18.9", "@babel/traverse@^7.19.0", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.0.tgz#eb9c561c7360005c592cc645abafe0c3c4548eed" - integrity sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA== +"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.3.3": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.0" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.14.9", "@babel/traverse@^7.20.5", "@babel/traverse@^7.21.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.2": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133" + integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.5" + "@babel/helper-environment-visitor" "^7.21.5" + "@babel/helper-function-name" "^7.21.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/parser" "^7.21.5" + "@babel/types" "^7.21.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" - integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" + integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== dependencies: - "@babel/helper-string-parser" "^7.18.10" - "@babel/helper-validator-identifier" "^7.18.6" + "@babel/helper-string-parser" "^7.21.5" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1050,10 +1055,230 @@ dependencies: arrify "^1.0.1" -"@csstools/convert-colors@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" - integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== +"@csstools/cascade-layer-name-parser@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.2.tgz#35253f57c6c83d684fe396672486c644e6a84127" + integrity sha512-xm7Mgwej/wBfLoK0K5LfntmPJzoULayl1XZY9JYgQgT29JiqNw++sLnx95u5y9zCihblzkyaRYJrsRMhIBzRdg== + +"@csstools/color-helpers@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-2.0.0.tgz#4ac578cb00b4e853b94f2250267d85ba957c4fc9" + integrity sha512-VcPjEnp07RNgz/D+oI2uIALg+IPCSl6mj0XhA3pl3F2bM2B95vgzatExmmzSg/X0zkh+R2v+jFY/J2pV/bnwpw== + +"@csstools/css-calc@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.1.1.tgz#c622728b7f0c9aae70952623c2b0d3d114752987" + integrity sha512-Nh+iLCtjlooTzuR0lpmB8I6hPX/VupcGQ3Z1U2+wgJJ4fa8+cWkub+lCsbZcYPzBGsZLEL8fQAg+Na5dwEFJxg== + +"@csstools/css-color-parser@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.1.2.tgz#e5956c0fe9c30d9f228b0e37173ff61f0dd89dad" + integrity sha512-MjW/VspbFSkvbuou7tUUu2+FAlAR7VJ/PA69M9EGKltThbONC8nyW33wHRzNvLzRLGstZLEO5X5oR7IMhMDi0A== + dependencies: + "@csstools/color-helpers" "^2.0.0" + "@csstools/css-calc" "^1.1.1" + +"@csstools/css-parser-algorithms@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.1.1.tgz#7b62e6412a468a2d1096ed267edd1e4a7fd4a119" + integrity sha512-viRnRh02AgO4mwIQb2xQNJju0i+Fh9roNgmbR5xEuG7J3TGgxjnE95HnBLgsFJOJOksvcfxOUCgODcft6Y07cA== + +"@csstools/css-tokenizer@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e" + integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA== + +"@csstools/media-query-list-parser@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.0.4.tgz#466bd254041530dfd1e88bcb1921e8ca4af75b6a" + integrity sha512-GyYot6jHgcSDZZ+tLSnrzkR7aJhF2ZW6d+CXH66mjy5WpAQhZD4HDke2OQ36SivGRWlZJpAz7TzbW6OKlEpxAA== + +"@csstools/postcss-cascade-layers@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-3.0.1.tgz#d839386e90428b448e3f75276bc01d516e852a0d" + integrity sha512-dD8W98dOYNOH/yX4V4HXOhfCOnvVAg8TtsL+qCGNoKXuq5z2C/d026wGWgySgC8cajXXo/wNezS31Glj5GcqrA== + dependencies: + "@csstools/selector-specificity" "^2.0.2" + postcss-selector-parser "^6.0.10" + +"@csstools/postcss-color-function@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-2.2.1.tgz#fa28cc742c29ae63dbe0812dd9a03998a67dd318" + integrity sha512-T52iiqmzyKk09B9iNTQbuWa9Tn83SztXY7o6r2+j+o1BS/7+CiCjTgN2HgzybDmx8cr6XYhQ1BzqgV9tJzhrmw== + dependencies: + "@csstools/css-color-parser" "^1.1.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/postcss-progressive-custom-properties" "^2.0.0" + +"@csstools/postcss-color-mix-function@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-1.0.1.tgz#587f7df69d40f84c7bb4e9d7f178266cb7f6851b" + integrity sha512-NSVrzjVcI4TMzDfh6GKZXvEuelT81xpXzruuTNJrwKMTZXEBHY9G2gvmr0eC0wwmL8EF1TblXyPPfBbZobvfXg== + dependencies: + "@csstools/css-color-parser" "^1.1.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/postcss-progressive-custom-properties" "^2.0.0" + +"@csstools/postcss-font-format-keywords@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-2.0.2.tgz#d798d96f4af6cddcfee459f598c976e6011042d2" + integrity sha512-iKYZlIs6JsNT7NKyRjyIyezTCHLh4L4BBB3F5Nx7Dc4Z/QmBgX+YJFuUSar8IM6KclGiAUFGomXFdYxAwJydlA== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-gradients-interpolation-method@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-3.0.4.tgz#c03402087c41feee0115f714cc87696e6424ba92" + integrity sha512-GgKoY7OlvL65UPigEdlrvMAUCR5kOQCjtue2/36TPrBNoRS6KM2KOqmjIVsxEwYYwK+L28pdnM8r10m03hhZxA== + dependencies: + "@csstools/css-color-parser" "^1.1.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/postcss-progressive-custom-properties" "^2.0.0" + +"@csstools/postcss-hwb-function@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-2.2.1.tgz#ab50918104e4ef500c42e55e4ccdd27fc33d52b9" + integrity sha512-eiqB4DIs+xqProAly7KwIgE04oze1YHb0QSCw/Y7062d9gpw+Cdif3Y0Z+Te+U7JROYdO0/0j91A6Qy8fo/Rlw== + dependencies: + "@csstools/css-color-parser" "^1.1.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + +"@csstools/postcss-ic-unit@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-2.0.2.tgz#5a5e481c53977deec3d63793788eec924d4c5f7d" + integrity sha512-N84qGTJkfLTPj2qOG5P4CIqGjpZBbjOEMKMn+UjO5wlb9lcBTfBsxCF0lQsFdWJUzBHYFOz19dL66v71WF3Pig== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-is-pseudo-class@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-3.2.0.tgz#1277cc187bdb075013341dab42b4140d1cafae27" + integrity sha512-uooelBL99jMg8ZD6xy0Pj1hSalchWmplcin00eI+JHpv1jW2iwbi1cn2UnVsToM4JLwJSZFzTSWCgSpmlyhe3A== + dependencies: + "@csstools/selector-specificity" "^2.0.0" + postcss-selector-parser "^6.0.10" + +"@csstools/postcss-logical-float-and-clear@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-1.0.1.tgz#d255ea7aad18880930b63d8a04164f56182f2ecf" + integrity sha512-eO9z2sMLddvlfFEW5Fxbjyd03zaO7cJafDurK4rCqyRt9P7aaWwha0LcSzoROlcZrw1NBV2JAp2vMKfPMQO1xw== + +"@csstools/postcss-logical-resize@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-1.0.1.tgz#826d3de929d7d786c32c2c118f78e813a1c2cdec" + integrity sha512-x1ge74eCSvpBkDDWppl+7FuD2dL68WP+wwP2qvdUcKY17vJksz+XoE1ZRV38uJgS6FNUwC0AxrPW5gy3MxsDHQ== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-logical-viewport-units@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-1.0.3.tgz#63e212954015ecdc493878601c3daa4da6ba6714" + integrity sha512-6zqcyRg9HSqIHIPMYdt6THWhRmE5/tyHKJQLysn2TeDf/ftq7Em9qwMTx98t2C/7UxIsYS8lOiHHxAVjWn2WUg== + dependencies: + "@csstools/css-tokenizer" "^2.1.1" + +"@csstools/postcss-media-minmax@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.0.2.tgz#77efc4fdd96c7ff97f0d714c940187d25fd87619" + integrity sha512-DsEykSINZTqlBefi1uSQBym1Rj0NQOj92dLRd5jUQpSy8yBVaXXmkiUgBUbb+gQh8imAdqPpz2v4sAUnw8yXXA== + dependencies: + "@csstools/css-calc" "^1.1.1" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/media-query-list-parser" "^2.0.4" + +"@csstools/postcss-media-queries-aspect-ratio-number-values@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-1.0.2.tgz#23ca3c3decc79d9089c2028ded20a97a2c784eee" + integrity sha512-rOSR5p+5m0joXUoitYgCyMqNCu97yfLsLG3cnNaM8VeJRCWHGEu5hE9Gv0M7n9A4wo2pYF8QqaxkTlWbSJY9Fg== + dependencies: + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/media-query-list-parser" "^2.0.4" + +"@csstools/postcss-nested-calc@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-2.0.2.tgz#a0857650ef88b1aa7b094c7ea8ea1378c35695e0" + integrity sha512-jbwrP8rN4e7LNaRcpx3xpMUjhtt34I9OV+zgbcsYAAk6k1+3kODXJBf95/JMYWhu9g1oif7r06QVUgfWsKxCFw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-normalize-display-values@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-2.0.1.tgz#35dc188c5b4713cf902959fe3c8ce613fcb7543e" + integrity sha512-TQT5g3JQ5gPXC239YuRK8jFceXF9d25ZvBkyjzBGGoW5st5sPXFVQS8OjYb9IJ/K3CdfK4528y483cgS2DJR/w== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-oklab-function@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-2.2.1.tgz#4f8f4d8d69e6e479e094b5d327c7b259352e8b81" + integrity sha512-g4wrVopp6xXr1KetUK4Lj36P+PFPwvUUtd2gaqo7X/0xgJHmMtKMPhD9p77H9bmIpPtkIYQ8b7+7cdmrWNEVAw== + dependencies: + "@csstools/css-color-parser" "^1.1.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/postcss-progressive-custom-properties" "^2.0.0" + +"@csstools/postcss-progressive-custom-properties@^2.0.0", "@csstools/postcss-progressive-custom-properties@^2.1.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-2.1.1.tgz#82df9314451db63bf7f4975a4d32f148e85db490" + integrity sha512-6p8eO5+j+9hn4h2Klr9dbmya0GIb9SRrnPaCxqR1muVlV1waAZq6YkmlApEwXrox9qxggSwGZD5TnLRIY9f7WA== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-scope-pseudo-class@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-2.0.2.tgz#6325e1e3b321093c59b008ec670bb772e17f06fe" + integrity sha512-6Pvo4uexUCXt+Hz5iUtemQAcIuCYnL+ePs1khFR6/xPgC92aQLJ0zGHonWoewiBE+I++4gXK3pr+R1rlOFHe5w== + dependencies: + postcss-selector-parser "^6.0.10" + +"@csstools/postcss-stepped-value-functions@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-2.1.1.tgz#f31aa0e7bd0ce3e4a0450573e1e27ce5e602b100" + integrity sha512-YCvdF0GCZK35nhLgs7ippcxDlRVe5QsSht3+EghqTjnYnyl3BbWIN6fYQ1dKWYTJ+7Bgi41TgqQFfJDcp9Xy/w== + dependencies: + "@csstools/css-calc" "^1.1.1" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + +"@csstools/postcss-text-decoration-shorthand@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-2.2.3.tgz#e634a488aa5ba252907deb787ad6cc24b8c2bb0a" + integrity sha512-PADJidg/tdhDk120aWlGuDxsp5ZTc9Nx7GhJ8t0qBCk5fOgLK6V3DsB9X6sOAhDokIihXKzjtUu15puac5McWw== + dependencies: + "@csstools/color-helpers" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-trigonometric-functions@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-2.1.1.tgz#871a2048b0f81495d6cd8858ffb1fb04231ca741" + integrity sha512-XcXmHEFfHXhvYz40FtDlA4Fp4NQln2bWTsCwthd2c+MCnYArUYU3YaMqzR5CrKP3pMoGYTBnp5fMqf1HxItNyw== + dependencies: + "@csstools/css-calc" "^1.1.1" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + +"@csstools/postcss-unset-value@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-2.0.1.tgz#67091dd6cff556bff896c95053eb070cc6b21c25" + integrity sha512-oJ9Xl29/yU8U7/pnMJRqAZd4YXNCfGEdcP4ywREuqm/xMqcgDNDppYRoCGDt40aaZQIEKBS79LytUDN/DHf0Ew== + +"@csstools/selector-specificity@^2.0.0", "@csstools/selector-specificity@^2.0.1", "@csstools/selector-specificity@^2.0.2": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" + integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== + +"@discoveryjs/json-ext@0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@eslint/eslintrc@^0.4.3": version "0.4.3" @@ -1295,59 +1520,63 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.15" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" - integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" "@mdi/js@^5.8.55": version "5.9.55" resolved "https://registry.yarnpkg.com/@mdi/js/-/js-5.9.55.tgz#8f5bc4d924c23f30dab20545ddc768e778bbc882" integrity sha512-BbeHMgeK2/vjdJIRnx12wvQ6s8xAYfvMmEAVsUx9b+7GiQGQ9Za8jpwp17dMKr9CgKRvemlAM4S7S3QOtEbp4A== +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" + integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== + dependencies: + eslint-scope "5.1.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1385,80 +1614,80 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@nuxt/babel-preset-app@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/babel-preset-app/-/babel-preset-app-2.15.8.tgz#c78eb8c47c1cafec1c5aba6a52385a3ce877b968" - integrity sha512-z23bY5P7dLTmIbk0ZZ95mcEXIEER/mQCOqEp2vxnzG2nurks+vq6tNcUAXqME1Wl6aXWTXlqky5plBe7RQHzhQ== - dependencies: - "@babel/compat-data" "^7.14.0" - "@babel/core" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-module-imports" "^7.13.12" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-decorators" "^7.13.15" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-private-methods" "^7.13.0" - "@babel/plugin-transform-runtime" "^7.13.15" - "@babel/preset-env" "^7.14.1" - "@babel/runtime" "^7.14.0" - "@vue/babel-preset-jsx" "^1.2.4" - core-js "^2.6.5" - core-js-compat "^3.12.1" - regenerator-runtime "^0.13.7" - -"@nuxt/builder@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/builder/-/builder-2.15.8.tgz#66ead4be0a2ce6932a2b7e521cfe1621e49290e7" - integrity sha512-WVhN874LFMdgRiJqpxmeKI+vh5lhCUBVOyR9PhL1m1V/GV3fb+Dqc1BKS6XgayrWAWavPLveCJmQ/FID0puOfQ== - dependencies: - "@nuxt/devalue" "^1.2.5" - "@nuxt/utils" "2.15.8" - "@nuxt/vue-app" "2.15.8" - "@nuxt/webpack" "2.15.8" - chalk "^4.1.1" - chokidar "^3.5.1" +"@nuxt/babel-preset-app@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/babel-preset-app/-/babel-preset-app-2.16.3.tgz#223c98c6799b7ca293fece960b5db59eb9c0115e" + integrity sha512-FZnQUnnXvGTXPnnwAMa9gRmSu16Wn796NffzwBzKQHoKVkal2HJcZ+D7/EnqeqVd8dFijFCrdquEj1WoastUSA== + dependencies: + "@babel/compat-data" "^7.21.0" + "@babel/core" "^7.21.3" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-imports" "^7.18.6" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-decorators" "^7.21.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.21.0" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-transform-runtime" "^7.21.0" + "@babel/preset-env" "^7.20.2" + "@babel/runtime" "^7.21.0" + "@vue/babel-preset-jsx" "^1.4.0" + core-js "^3.19.0" + core-js-compat "^3.29.1" + regenerator-runtime "^0.13.11" + +"@nuxt/builder@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/builder/-/builder-2.16.3.tgz#7c30bbf00c7c9a7d27d24a24414f2a20fd00f0d6" + integrity sha512-yQWqr1YnlgOyqT/au1rgORAL3BkH2gJ4Dn2o5DDUGZQZLnkhEAYB5WblTk8e78xENhjfzIYF3pqzxMhMqNxqBw== + dependencies: + "@nuxt/devalue" "^2.0.0" + "@nuxt/utils" "2.16.3" + "@nuxt/vue-app" "2.16.3" + "@nuxt/webpack" "2.16.3" + chalk "^4.1.2" + chokidar "^3.5.3" consola "^2.15.3" - fs-extra "^9.1.0" - glob "^7.1.7" + fs-extra "^10.1.0" + glob "^8.1.0" hash-sum "^2.0.0" - ignore "^5.1.8" + ignore "^5.2.4" lodash "^4.17.21" pify "^5.0.0" - serialize-javascript "^5.0.1" + serialize-javascript "^6.0.1" upath "^2.0.1" -"@nuxt/cli@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/cli/-/cli-2.15.8.tgz#3b946ee08c7b5b3223c8952873c65727e775ec30" - integrity sha512-KcGIILW/dAjBKea1DHsuLCG1sNzhzETShwT23DhXWO304qL8ljf4ndYKzn2RenzauGRGz7MREta80CbJCkLSHw== +"@nuxt/cli@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/cli/-/cli-2.16.3.tgz#ef211391daaacceef508cdb1ab4d8dfc616923f7" + integrity sha512-zml8eW+1MkSquGwL8ywyb6T8N5tPpt85Zl9imxcyR79lukcnzmfIhlz4o25rEtrpii5wKTbebmHE7vldJcu/bA== dependencies: - "@nuxt/config" "2.15.8" - "@nuxt/utils" "2.15.8" - boxen "^5.0.1" - chalk "^4.1.1" + "@nuxt/config" "2.16.3" + "@nuxt/utils" "2.16.3" + boxen "^5.1.2" + chalk "^4.1.2" compression "^1.7.4" connect "^3.7.0" consola "^2.15.3" - crc "^3.8.0" - defu "^4.0.1" - destr "^1.1.0" - execa "^5.0.0" + crc "^4.3.2" + defu "^6.1.2" + destr "^1.2.2" + execa "^5.1.1" exit "^0.1.2" - fs-extra "^9.1.0" - globby "^11.0.3" + fs-extra "^10.1.0" + globby "^11.0.4" hable "^3.0.0" lodash "^4.17.21" - minimist "^1.2.5" + minimist "^1.2.8" opener "1.5.2" pretty-bytes "^5.6.0" - semver "^7.3.5" - serve-static "^1.14.1" - std-env "^2.3.0" + semver "^7.3.8" + serve-static "^1.15.0" + std-env "^3.3.2" upath "^2.0.1" wrap-ansi "^7.0.0" -"@nuxt/components@^2.1.8": +"@nuxt/components@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@nuxt/components/-/components-2.2.1.tgz#49c4442ac5a0ef49f49ef7d9960f4376fc3e7c78" integrity sha512-r1LHUzifvheTnJtYrMuA+apgsrEJbxcgFKIimeXKb+jl8TnPWdV3egmrxBCaDJchrtY/wmHyP47tunsft7AWwg== @@ -1472,43 +1701,41 @@ upath "^2.0.1" vue-template-compiler "^2.6.14" -"@nuxt/config@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/config/-/config-2.15.8.tgz#56cc1b052871072a26f76c6d3b69d9b53808ce52" - integrity sha512-KMQbjmUf9RVHeTZEf7zcuFnh03XKZioYhok6GOCY+leu3g5n/UhyPvLnTsgTfsLWohqoRoOm94u4A+tNYwn9VQ== +"@nuxt/config@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/config/-/config-2.16.3.tgz#88addc90535a120ed32ef53f4c2a1cb09a662809" + integrity sha512-hBvr5/b5CS6UdXPgB8q/jvQHS0Bprf+b0hknL6ks4EkxhtNKM1Et3a0s3V3Gh/odLkkJ9yrtihFF+CymzBm6ew== dependencies: - "@nuxt/utils" "2.15.8" + "@nuxt/utils" "2.16.3" consola "^2.15.3" - defu "^4.0.1" - destr "^1.1.0" - dotenv "^9.0.2" + defu "^6.1.2" + destr "^1.2.2" + dotenv "^16.0.3" lodash "^4.17.21" - rc9 "^1.2.0" - std-env "^2.3.0" - ufo "^0.7.4" - -"@nuxt/core@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/core/-/core-2.15.8.tgz#443d13da9edc5c4ae47d7902f1d6504a8cce27a2" - integrity sha512-31pipWRvwHiyB5VDqffgSO7JtmHxyzgshIzuZzSinxMbVmK3BKsOwacD/51oEyELgrPlUgLqcY9dg+RURgmHGQ== - dependencies: - "@nuxt/config" "2.15.8" - "@nuxt/server" "2.15.8" - "@nuxt/utils" "2.15.8" + rc9 "^2.0.1" + std-env "^3.3.2" + ufo "^1.1.1" + +"@nuxt/core@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/core/-/core-2.16.3.tgz#185860c73a980285e895106cb506db2a7f7891da" + integrity sha512-74351lKHZUxg3LxgtxUOCfTn6RHZZ4KtLKkGVr1YBkEuk/EtsOtkGUZI6psDk0RkXmxBtRk075neMfmaD7RAlQ== + dependencies: + "@nuxt/config" "2.16.3" + "@nuxt/server" "2.16.3" + "@nuxt/utils" "2.16.3" consola "^2.15.3" - fs-extra "^9.1.0" + fs-extra "^10.1.0" hable "^3.0.0" hash-sum "^2.0.0" lodash "^4.17.21" -"@nuxt/devalue@^1.2.5": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@nuxt/devalue/-/devalue-1.2.5.tgz#8d95e3e74b3332d3eb713342c5c4d18096047d66" - integrity sha512-Tg86C7tqzvZtZli2BQVqgzZN136mZDTgauvJXagglKkP2xt5Kw3NUIiJyjX0Ww/IZy2xVmD0LN+CEPpij4dB2g== - dependencies: - consola "^2.9.0" +"@nuxt/devalue@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nuxt/devalue/-/devalue-2.0.2.tgz#5749f04df13bda4c863338d8dabaf370f45ef7c7" + integrity sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA== -"@nuxt/friendly-errors-webpack-plugin@^2.5.1": +"@nuxt/friendly-errors-webpack-plugin@^2.5.2": version "2.5.2" resolved "https://registry.yarnpkg.com/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.5.2.tgz#982a43ee2da61611f7396439e57038392d3944d5" integrity sha512-LLc+90lnxVbpKkMqk5z1EWpXoODhc6gRkqqXJCInJwF5xabHAE7biFvbULfvTRmtaTzAaP8IV4HQDLUgeAUTTw== @@ -1518,22 +1745,22 @@ error-stack-parser "^2.0.0" string-width "^4.2.3" -"@nuxt/generator@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/generator/-/generator-2.15.8.tgz#d6bd4a677edf14f34d516e13bcb70d62cdd4c5b4" - integrity sha512-hreLdYbBIe3SWcP8LsMG7OlDTx2ZVucX8+f8Vrjft3Q4r8iCwLMYC1s1N5etxeHAZfS2kZiLmF92iscOdfbgMQ== +"@nuxt/generator@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/generator/-/generator-2.16.3.tgz#a3467d474eed7ab1db85e21dea75c18015871576" + integrity sha512-I0dvArAHOpru66quBSpZYl6urrc8rbs7MzNS33qq55qJZ8vtvm3pTYJgpeHm7CrmCcWEP/GLxLUvSUShtwkfzQ== dependencies: - "@nuxt/utils" "2.15.8" - chalk "^4.1.1" + "@nuxt/utils" "2.16.3" + chalk "^4.1.2" consola "^2.15.3" - defu "^4.0.1" + defu "^6.1.2" devalue "^2.0.1" - fs-extra "^9.1.0" + fs-extra "^10.1.0" html-minifier "^4.0.0" - node-html-parser "^3.2.0" - ufo "^0.7.4" + node-html-parser "^6.1.5" + ufo "^1.1.1" -"@nuxt/loading-screen@^2.0.3": +"@nuxt/loading-screen@^2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@nuxt/loading-screen/-/loading-screen-2.0.4.tgz#756abd861f77c57001be4d21d47534723afb4f3a" integrity sha512-xpEDAoRu75tLUYCkUJCIvJkWJSuwr8pqomvQ+fkXpSrkxZ/9OzlBFjAbVdOAWTMj4aV/LVQso4vcEdircKeFIQ== @@ -1544,7 +1771,7 @@ node-res "^5.0.1" serve-static "^1.14.1" -"@nuxt/opencollective@^0.3.2": +"@nuxt/opencollective@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@nuxt/opencollective/-/opencollective-0.3.3.tgz#80ff0eb8f6fca1d0ed5a089b9688f41bff2dd8ab" integrity sha512-6IKCd+gP0HliixqZT/p8nW3tucD6Sv/u/eR2A9X4rxT/6hXlMzA4GZQzq4d2qnBAwSwGpmKyzkyTjNjrhaA25A== @@ -1553,52 +1780,51 @@ consola "^2.15.0" node-fetch "^2.6.7" -"@nuxt/server@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/server/-/server-2.15.8.tgz#ec733897de78f858ae0eebd174e8549f247c4e99" - integrity sha512-E4EtXudxtWQBUHMHOxFwm5DlPOkJbW+iF1+zc0dGmXLscep1KWPrlP+4nrpZj8/UKzpupamE8ZTS9I4IbnExVA== +"@nuxt/server@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/server/-/server-2.16.3.tgz#c95c7975c0194d767d794a42de6f8b6c14456ebb" + integrity sha512-BN2yqUGytFlM77B0J8os8lnqNQcTT0qDC2lllglrM5F6KPv5rhKyN5khMNPruO5u2vf2JNkXIaUrJYNc4bzKpQ== dependencies: - "@nuxt/utils" "2.15.8" - "@nuxt/vue-renderer" "2.15.8" + "@nuxt/utils" "2.16.3" + "@nuxt/vue-renderer" "2.16.3" "@nuxtjs/youch" "^4.2.3" compression "^1.7.4" connect "^3.7.0" consola "^2.15.3" etag "^1.8.1" fresh "^0.5.2" - fs-extra "^9.1.0" - ip "^1.1.5" - launch-editor-middleware "^2.2.1" + fs-extra "^10.1.0" + ip "^1.1.8" + launch-editor-middleware "^2.6.0" on-headers "^1.0.2" pify "^5.0.0" - serve-placeholder "^1.2.3" - serve-static "^1.14.1" + serve-placeholder "^2.0.1" + serve-static "^1.15.0" server-destroy "^1.0.1" - ufo "^0.7.4" + ufo "^1.1.1" -"@nuxt/telemetry@^1.3.3": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@nuxt/telemetry/-/telemetry-1.3.6.tgz#a27a27b2f56a2ad4ef2c1bef82e12f0bc0dc40ac" - integrity sha512-sZpLf/rU3cvN8/alR1HpJIl3mHPA1GOg41GKdOOrtw7Gi/lCEVk4hK+lpXgYInZ2n6i1JyknpKhM9YzX2RU33w== +"@nuxt/telemetry@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@nuxt/telemetry/-/telemetry-1.4.1.tgz#92765a9614f0d137cf4f43ff007ce8787e45de5a" + integrity sha512-3+F6kI17QtcgKQD9NKlLZ4LUy0koXULzkX1FgyILU17PptClnGOu+c+jT+PlZK2GsCjucLwQLjOQQkRIczU3uA== dependencies: - arg "^5.0.0" + arg "^5.0.2" chalk "^4.1.1" - ci-info "^3.1.1" + ci-info "^3.7.1" consola "^2.15.3" create-require "^1.1.1" - defu "^5.0.0" - destr "^1.1.0" + defu "^6.1.2" + destr "^1.2.2" dotenv "^9.0.2" fs-extra "^8.1.0" - git-url-parse "^11.4.4" + git-url-parse "^13.1.0" inquirer "^7.3.3" - is-docker "^2.2.1" - jiti "^1.9.2" + jiti "^1.16.2" nanoid "^3.1.23" node-fetch "^2.6.1" parse-git-config "^3.0.0" - rc9 "^1.2.0" - std-env "^2.3.0" + rc9 "^2.0.1" + std-env "^3.3.1" "@nuxt/test-utils@^0.2.2": version "0.2.2" @@ -1611,107 +1837,109 @@ get-port "^5.1.1" got "^11.8.2" -"@nuxt/utils@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/utils/-/utils-2.15.8.tgz#0c3594f01be63ab521583904cafd32215b719d4c" - integrity sha512-e0VBarUbPiQ4ZO1T58puoFIuXme7L5gk1QfwyxOONlp2ryE7aRyZ8X/mryuOiIeyP64c4nwSUtN7q9EUWRb7Lg== +"@nuxt/utils@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/utils/-/utils-2.16.3.tgz#2cac10aed3c58cb2531d7dd72086e109e087c375" + integrity sha512-M0W1v4gZDMXyt1MnCoDijIvoV7Xu8NwdbHqWB9gyxIGvoycjNmWWu6yT4LkymZx2c2JUxWTVp6VoUKUWW5P46Q== dependencies: consola "^2.15.3" create-require "^1.1.1" - fs-extra "^9.1.0" + fs-extra "^10.1.0" hash-sum "^2.0.0" - jiti "^1.9.2" + jiti "^1.18.2" lodash "^4.17.21" proper-lockfile "^4.1.2" - semver "^7.3.5" - serialize-javascript "^5.0.1" - signal-exit "^3.0.3" - ua-parser-js "^0.7.28" - ufo "^0.7.4" - -"@nuxt/vue-app@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/vue-app/-/vue-app-2.15.8.tgz#46b7ec8fc93f8d1f4cdf4f6b04134cb40ceb7c4a" - integrity sha512-FJf9FSMPsWT3BqkS37zEuPTxLKzSg2EIwp1sP8Eou25eE08qxRfe2PwTVA8HnXUPNdpz2uk/T9DlNw+JraiFRQ== - dependencies: - node-fetch "^2.6.1" - ufo "^0.7.4" - unfetch "^4.2.0" - vue "^2.6.12" - vue-client-only "^2.0.0" + semver "^7.3.8" + serialize-javascript "^6.0.1" + signal-exit "^3.0.7" + ua-parser-js "^1.0.34" + ufo "^1.1.1" + +"@nuxt/vue-app@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/vue-app/-/vue-app-2.16.3.tgz#aee071c2da23633cde180ba663544ae97bace2f4" + integrity sha512-Lacweyb3K0tRcHKIYVbAkGEptnXy0aNzXVF/n0niTMqtyWQ16pp2md3Ab0vcYXZf8Ya1Yy1NB8FhPqPYjG8OtA== + dependencies: + node-fetch-native "^1.0.2" + ufo "^1.1.1" + unfetch "^5.0.0" + vue "^2.7.10" + vue-client-only "^2.1.0" vue-meta "^2.4.0" vue-no-ssr "^1.1.1" - vue-router "^3.5.1" - vue-template-compiler "^2.6.12" + vue-router "^3.6.5" + vue-template-compiler "^2.7.14" vuex "^3.6.2" -"@nuxt/vue-renderer@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/vue-renderer/-/vue-renderer-2.15.8.tgz#1cd781de18724a98e27655e89bfe64cd5521491e" - integrity sha512-54I/k+4G6axP9XVYYdtH6M1S6T49OIkarpF6/yIJj0yi3S/2tdJ9eUyfoLZ9EbquZFDDRHBxSswTtr2l/eakPw== +"@nuxt/vue-renderer@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/vue-renderer/-/vue-renderer-2.16.3.tgz#1f004ace66d84956860702d9f4e2fd85f4026796" + integrity sha512-w46NiRZaAOU55S2UyTzGJqO7alO2YGgPFfy3HVOA5iXdNnpHwIBeVUIPLpmv6qByWxyu4OAOQu6pDURTWtaJdA== dependencies: - "@nuxt/devalue" "^1.2.5" - "@nuxt/utils" "2.15.8" + "@nuxt/devalue" "^2.0.0" + "@nuxt/utils" "2.16.3" consola "^2.15.3" - defu "^4.0.1" - fs-extra "^9.1.0" + defu "^6.1.2" + fs-extra "^10.1.0" lodash "^4.17.21" lru-cache "^5.1.1" - ufo "^0.7.4" - vue "^2.6.12" + ufo "^1.1.1" + vue "^2.7.10" vue-meta "^2.4.0" - vue-server-renderer "^2.6.12" - -"@nuxt/webpack@2.15.8": - version "2.15.8" - resolved "https://registry.yarnpkg.com/@nuxt/webpack/-/webpack-2.15.8.tgz#6169b4b8a13ee2cdb4987df6c5a401e18c412ef1" - integrity sha512-CzJYFed23Ow/UK0+cI1FVthDre1p2qc8Q97oizG39d3/SIh3aUHjgj8c60wcR+RSxVO0FzZMXkmq02NmA7vWJg== - dependencies: - "@babel/core" "^7.14.0" - "@nuxt/babel-preset-app" "2.15.8" - "@nuxt/friendly-errors-webpack-plugin" "^2.5.1" - "@nuxt/utils" "2.15.8" - babel-loader "^8.2.2" + vue-server-renderer "^2.7.14" + +"@nuxt/webpack@2.16.3": + version "2.16.3" + resolved "https://registry.yarnpkg.com/@nuxt/webpack/-/webpack-2.16.3.tgz#4754f77f94978c06eb8f4c356f6bdd5ff9a14d16" + integrity sha512-VHXTMQj+8bUaaeIZKH4z2Ip/TnO4GuvpFV6GL7D+wjGMB+qeSsTPlWS7/FQxOt86uKEzpMz9w4jPJTYzgLV6pg== + dependencies: + "@babel/core" "^7.21.3" + "@nuxt/babel-preset-app" "2.16.3" + "@nuxt/friendly-errors-webpack-plugin" "^2.5.2" + "@nuxt/utils" "2.16.3" + babel-loader "^8.3.0" cache-loader "^4.1.0" - caniuse-lite "^1.0.30001228" + caniuse-lite "^1.0.30001467" consola "^2.15.3" - css-loader "^4.3.0" - cssnano "^4.1.11" + css-loader "^5.2.7" + cssnano "^5.1.15" eventsource-polyfill "^0.9.6" extract-css-chunks-webpack-plugin "^4.9.0" file-loader "^6.2.0" - glob "^7.1.7" + glob "^8.1.0" hard-source-webpack-plugin "^0.13.1" hash-sum "^2.0.0" html-webpack-plugin "^4.5.1" lodash "^4.17.21" memory-fs "^0.5.0" - optimize-css-assets-webpack-plugin "^5.0.4" + optimize-css-assets-webpack-plugin "^6.0.1" pify "^5.0.0" - pnp-webpack-plugin "^1.6.4" - postcss "^7.0.32" - postcss-import "^12.0.1" + pnp-webpack-plugin "^1.7.0" + postcss "^8.4.21" + postcss-import "^15.1.0" postcss-import-resolver "^2.0.0" - postcss-loader "^3.0.0" - postcss-preset-env "^6.7.0" - postcss-url "^8.0.0" - semver "^7.3.5" - std-env "^2.3.0" - style-resources-loader "^1.4.1" + postcss-loader "^4.3.0" + postcss-preset-env "^8.0.1" + postcss-url "^10.1.3" + semver "^7.3.8" + std-env "^3.3.2" + style-resources-loader "^1.5.0" terser-webpack-plugin "^4.2.3" thread-loader "^3.0.4" time-fix-plugin "^2.0.7" - ufo "^0.7.4" + ufo "^1.1.1" + upath "^2.0.1" url-loader "^4.1.1" - vue-loader "^15.9.7" + vue-loader "^15.10.1" vue-style-loader "^4.1.3" - vue-template-compiler "^2.6.12" + vue-template-compiler "^2.7.14" + watchpack "^2.4.0" webpack "^4.46.0" - webpack-bundle-analyzer "^4.4.1" - webpack-dev-middleware "^4.2.0" - webpack-hot-middleware "^2.25.0" + webpack-bundle-analyzer "^4.8.0" + webpack-dev-middleware "^5.3.3" + webpack-hot-middleware "^2.25.3" webpack-node-externals "^3.0.0" - webpackbar "^4.0.0" + webpackbar "^5.0.2" "@nuxtjs/axios@^5.13.6": version "5.13.6" @@ -1797,9 +2025,9 @@ integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" @@ -1829,13 +2057,18 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.19" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + version "7.20.0" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" + integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" "@types/babel__generator" "*" "@types/babel__template" "*" "@types/babel__traverse" "*" @@ -1856,26 +2089,26 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.18.1" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.1.tgz#ce5e2c8c272b99b7a9fd69fa39f0b4cd85028bd9" - integrity sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA== + version "7.18.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.5.tgz#c107216842905afafd3b6e774f6f935da6f5db80" + integrity sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q== dependencies: "@babel/types" "^7.3.0" "@types/cacheable-request@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" - integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== dependencies: "@types/http-cache-semantics" "*" - "@types/keyv" "*" + "@types/keyv" "^3.1.4" "@types/node" "*" - "@types/responselike" "*" + "@types/responselike" "^1.0.0" "@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" @@ -1890,9 +2123,9 @@ integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/http-proxy@^1.17.5": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" - integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + version "1.17.11" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" + integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== dependencies: "@types/node" "*" @@ -1915,7 +2148,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -1925,7 +2158,7 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/keyv@*": +"@types/keyv@^3.1.4": version "3.1.4" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== @@ -1933,31 +2166,24 @@ "@types/node" "*" "@types/node@*": - version "18.7.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.15.tgz#20ae1ec80c57ee844b469f968a1cd511d4088b29" - integrity sha512-XnjpaI8Bgc3eBag2Aw4t2Uj/49lLBSStHWfqKvIuXD7FIrZyMLWp8KuAFHAqxMZYTF9l08N1ctUn9YNybZJVmQ== + version "20.1.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.0.tgz#258805edc37c327cf706e64c6957f241ca4c4c20" + integrity sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A== "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== -"@types/prettier@^2.1.5": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" - integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== - -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/responselike@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-3.0.0.tgz#5ecc1fc88552e5ac03de648a7796f9e125d002dc" - integrity sha512-zfgGLWx5IQOTJgQPD4UfGEhapTKUPC1ra/QCG02y3GUJWrhX05bBf/EfTh3aFj2DKi7cLo+cipXLNclD27tQXQ== - dependencies: - responselike "*" +"@types/prettier@^2.1.5": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== "@types/responselike@^1.0.0": version "1.0.0" @@ -1982,9 +2208,9 @@ integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== "@types/uglify-js@*": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.0.tgz#95271e7abe0bf7094c60284f76ee43232aef43b9" - integrity sha512-3HO6rm0y+/cqvOyA8xcYLweF0TKXlAxmQASjbOi49Co51A1N4nR4bEwBgRoD9kNM+rqFGArjKr654SLp2CoGmQ== + version "3.17.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.17.1.tgz#e0ffcef756476410e5bce2cb01384ed878a195b5" + integrity sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g== dependencies: source-map "^0.6.1" @@ -1998,9 +2224,9 @@ source-map "^0.7.3" "@types/webpack@^4.41.8": - version "4.41.32" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.32.tgz#a7bab03b72904070162b2f169415492209e94212" - integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg== + version "4.41.33" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.33.tgz#16164845a5be6a306bcbe554a8e67f9cac215ffc" + integrity sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g== dependencies: "@types/node" "*" "@types/tapable" "^1" @@ -2015,9 +2241,9 @@ integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + version "16.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" + integrity sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ== dependencies: "@types/yargs-parser" "*" @@ -2061,7 +2287,7 @@ lodash.kebabcase "^4.1.1" svg-tags "^1.0.0" -"@vue/babel-preset-jsx@^1.2.4": +"@vue/babel-preset-jsx@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz#f4914ba314235ab097bc4372ed67473c0780bfcc" integrity sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA== @@ -2124,15 +2350,6 @@ "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" camelcase "^5.0.0" -"@vue/compiler-sfc@2.7.10": - version "2.7.10" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.10.tgz#3fe08e780053a3bbf41328c65ae5dfdee0385206" - integrity sha512-55Shns6WPxlYsz4WX7q9ZJBL77sKE1ZAYNYStLs6GbhIOMrNtjMvzcob6gu3cGlfpCR4bT7NXgyJ3tly2+Hx8Q== - dependencies: - "@babel/parser" "^7.18.4" - postcss "^8.4.14" - source-map "^0.6.1" - "@vue/compiler-sfc@2.7.14": version "2.7.14" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz#3446fd2fbb670d709277fc3ffa88efc5e10284fd" @@ -2174,9 +2391,9 @@ prettier "^1.18.2 || ^2.0.0" "@vue/test-utils@^1.2.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.3.0.tgz#d563decdcd9c68a7bca151d4179a2bfd6d5c3e15" - integrity sha512-Xk2Xiyj2k5dFb8eYUKkcN9PzqZSppTlx7LaQWBbdA8tqh3jHr/KHX2/YLhNFc/xwDrgeLybqd+4ZCPJSGPIqeA== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.3.5.tgz#7beba75901c3a08a48b5657b63de02094dc40719" + integrity sha512-ezdlDNoxi5m/eP5Chg34AjnmNplrik4fyzB2DB9Yqa32OpywV8IvHqK9eCf+nIVsHFBejjV00agPFYRH2/D3Hg== dependencies: dom-event-types "^1.0.0" lodash "^4.17.15" @@ -2389,9 +2606,9 @@ acorn@^7.1.1, acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== agent-base@6: version "6.0.2" @@ -2413,11 +2630,25 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -2428,21 +2659,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.9.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" uri-js "^4.2.2" -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ== - ansi-align@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" @@ -2510,9 +2736,9 @@ anymatch@^2.0.0: normalize-path "^2.1.1" anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -2539,7 +2765,7 @@ archy@^1.0.0: resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== -arg@^5.0.0: +arg@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== @@ -2571,6 +2797,14 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -2582,14 +2816,14 @@ array-flatten@1.1.1: integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-includes@^3.1.1: - version "3.1.5" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" - integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" - get-intrinsic "^1.1.1" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" is-string "^1.0.7" array-union@^2.1.0: @@ -2603,23 +2837,23 @@ array-unique@^0.3.2: integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== array.prototype.flat@^1.2.3: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -array.prototype.reduce@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz#8167e80089f78bff70a99e20bd4201d4663b0a6f" - integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== +array.prototype.reduce@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" + integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" @@ -2667,37 +2901,31 @@ astral-regex@^2.0.0: integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" + integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^9.6.1: - version "9.8.8" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" - integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== +autoprefixer@^10.4.14: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" normalize-range "^0.1.2" - num2fraction "^1.2.2" - picocolors "^0.2.1" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" ava@^3.15.0: version "3.15.0" @@ -2761,10 +2989,15 @@ ava@^3.15.0: write-file-atomic "^3.0.3" yargs "^16.2.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + axios-retry@^3.1.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.3.1.tgz#47624646138aedefbad2ac32f226f4ee94b6dcab" - integrity sha512-RohAUQTDxBSWLFEnoIG/6bvmy8l3TfpkclgStjl5MDCMBDgapAWCmr1r/9harQfWC8bzLC8job6UcL1A1Yc+/Q== + version "3.4.0" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.4.0.tgz#f464dbe9408e5aa78fa319afd38bb69b533d8854" + integrity sha512-VdgaP+gHH4iQYCCNUWF2pcqeciVOdGrBBAYUfTY+wPcO5Ltvp/37MLFNCmJKo7Gj3SHvCSdL8ouI1qLYJN3liA== dependencies: "@babel/runtime" "^7.15.4" is-retry-allowed "^2.2.0" @@ -2777,9 +3010,9 @@ axios@^0.21.1: follow-redirects "^1.14.0" axios@^1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.3.tgz#e7011384ba839b885007c9c9fae1ff23dceb295b" - integrity sha512-eYq77dYIFS77AQlhzEL937yUBSepBfPIe8FcgEDN35vMNZKMrs81pgnyrQpwfy4NF4b4XWX1Zgx7yX+25w8QJA== + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== dependencies: follow-redirects "^1.15.0" form-data "^4.0.0" @@ -2811,23 +3044,16 @@ babel-jest@^27.0.2, babel-jest@^27.5.1: graceful-fs "^4.2.9" slash "^3.0.0" -babel-loader@^8.2.2: - version "8.2.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" - integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== +babel-loader@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== dependencies: find-cache-dir "^3.3.1" loader-utils "^2.0.0" make-dir "^3.1.0" schema-utils "^2.6.5" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - babel-plugin-espower@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/babel-plugin-espower/-/babel-plugin-espower-3.0.1.tgz#180db17126f88e754105b8b5216d21e520a6bd4e" @@ -2873,29 +3099,29 @@ babel-plugin-module-resolver@^4.1.0: reselect "^4.0.0" resolve "^1.13.1" -babel-plugin-polyfill-corejs2@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" - integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== dependencies: "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.2" + "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" - integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.2" - core-js-compat "^3.21.0" + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" -babel-plugin-polyfill-regenerator@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" - integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.2" + "@babel/helper-define-polyfill-provider" "^0.3.3" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -3002,10 +3228,10 @@ bn.js@^5.0.0, bn.js@^5.1.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: bytes "3.1.2" content-type "~1.0.4" @@ -3015,17 +3241,17 @@ body-parser@1.20.0: http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.10.3" + qs "6.11.0" raw-body "2.5.1" type-is "~1.6.18" unpipe "1.0.0" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== -boxen@^5.0.0, boxen@^5.0.1: +boxen@^5.0.0, boxen@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== @@ -3153,15 +3379,15 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.20.2, browserslist@^4.21.3, browserslist@^4.6.4: - version "4.21.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" - integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== +browserslist@^4.0.0, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== dependencies: - caniuse-lite "^1.0.30001370" - electron-to-chromium "^1.4.202" - node-releases "^2.0.6" - update-browserslist-db "^1.0.5" + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" bser@2.1.1: version "2.1.1" @@ -3194,7 +3420,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.1.0, buffer@^5.5.0: +buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -3361,30 +3587,11 @@ call-signature@0.0.2: resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" integrity sha512-qvYvkAVcoae0obt8OsZn0VEBHeEpvYIZDy1gGYtZDJG0fHawew+Mi0dBjieFz8F8dzQ2Kr19+nsDm+T5XFVs+Q== -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== - dependencies: - caller-callsite "^2.0.0" - callsite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" integrity sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ== -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== - callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3411,7 +3618,7 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0, camelcase@^6.2.0: +camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -3426,10 +3633,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001228, caniuse-lite@^1.0.30001370: - version "1.0.30001390" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001390.tgz#158a43011e7068ef7fc73590e9fd91a7cece5e7f" - integrity sha512-sS4CaUM+/+vqQUlCvCJ2WtDlV81aWtHhqeEVkLokVJJa3ViN4zDxAGfq9R8i1m90uGHxo99cy10Od+lvn3hf0g== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001467: + version "1.0.30001486" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001486.tgz#56a08885228edf62cbe1ac8980f2b5dae159997e" + integrity sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg== chalk@^1.1.3: version "1.1.3" @@ -3442,7 +3649,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3474,7 +3681,7 @@ chart.js@^3.8.0: resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.9.1.tgz#3abf2c775169c4c71217a107163ac708515924b8" integrity sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w== -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1, chokidar@^3.4.3, chokidar@^3.5.1, chokidar@^3.5.2: +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1, chokidar@^3.4.3, chokidar@^3.5.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -3533,10 +3740,10 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-info@^3.1.1, ci-info@^3.2.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" - integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== +ci-info@^3.2.0, ci-info@^3.7.1: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== ci-parallel-vars@^1.0.1: version "1.0.1" @@ -3603,9 +3810,9 @@ cli-cursor@^3.1.0: restore-cursor "^3.1.0" cli-spinners@^2.5.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + version "2.9.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== cli-truncate@^2.1.0: version "2.1.0" @@ -3664,15 +3871,6 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - code-excerpt@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-3.0.0.tgz#fcfb6748c03dba8431c19f5474747fad3f250f10" @@ -3693,7 +3891,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.3: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -3712,36 +3910,25 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.6.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== colorette@2.0.16: version "2.0.16" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== -colorette@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== +colorette@^2.0.10: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== combined-stream@^1.0.8: version "1.0.8" @@ -3885,7 +4072,7 @@ connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" -consola@^2.10.0, consola@^2.10.1, consola@^2.11.3, consola@^2.15.0, consola@^2.15.3, consola@^2.6.0, consola@^2.9.0: +consola@^2.10.1, consola@^2.11.3, consola@^2.15.0, consola@^2.15.3, consola@^2.6.0: version "2.15.3" resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== @@ -3920,16 +4107,14 @@ content-disposition@0.5.4: safe-buffer "5.2.1" content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== convert-source-map@^1.3.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== convert-to-spaces@^1.0.1: version "1.0.2" @@ -3973,45 +4158,43 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== -core-js-compat@^3.12.1, core-js-compat@^3.21.0, core-js-compat@^3.22.1: - version "3.25.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.0.tgz#489affbfbf9cb3fa56192fe2dd9ebaee985a66c5" - integrity sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow== +core-js-compat@^3.25.1, core-js-compat@^3.29.1: + version "3.30.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.2.tgz#83f136e375babdb8c80ad3c22d67c69098c1dd8b" + integrity sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA== dependencies: - browserslist "^4.21.3" - semver "7.0.0" + browserslist "^4.21.5" -core-js@^2.0.0, core-js@^2.6.5: +core-js@^2.0.0: version "2.6.12" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.6.5: - version "3.25.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.25.0.tgz#be71d9e0dd648ffd70c44a7ec2319d039357eceb" - integrity sha512-CVU1xvJEfJGhyCpBrzzzU1kjCfgsGUxhEvwUV2e/cOedYWHdmluamx+knDnmhqALddMG16fZvIqvs9aijsHHaA== +core-js@^3.19.0, core-js@^3.6.5: + version "3.30.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.2.tgz#6528abfda65e5ad728143ea23f7a14f0dcf503fc" + integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg== core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" + "@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" -crc@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" +crc@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/crc/-/crc-4.3.2.tgz#49b7821cbf2cf61dfd079ed93863bbebd5469b9a" + integrity sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A== create-ecdh@^4.0.0: version "4.0.4" @@ -4087,53 +4270,28 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -css-blank-pseudo@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" - integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== - dependencies: - postcss "^7.0.5" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q== - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== +css-blank-pseudo@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-5.0.2.tgz#3df5cd950f64de960974da05e76954fd3d7442f9" + integrity sha512-aCU4AZ7uEcVSUzagTlA9pHciz7aWPKA/YzrEkpdSopJ2pvhIxiQ5sYeMz1/KByxlIo4XBdvMNJAVKMg/GRnhfw== dependencies: - postcss "^7.0.1" - timsort "^0.3.0" + postcss-selector-parser "^6.0.10" -css-has-pseudo@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" - integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^5.0.0-rc.4" +css-declaration-sorter@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" + integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== -css-loader@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" - integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== +css-has-pseudo@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-5.0.2.tgz#8798118c705d858b7aeb9d839a39edd901c1cc83" + integrity sha512-q+U+4QdwwB7T9VEW/LyO6CFrLAeLqOykC5mDqJXc7aKZAhDbq7BvGT13VGJe+IwBfdN2o3Xdw2kJ5IxwV1Sc9Q== dependencies: - 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.1" - semver "^7.3.2" + "@csstools/selector-specificity" "^2.0.1" + postcss-selector-parser "^6.0.10" + postcss-value-parser "^4.2.0" -css-loader@^5.2.6: +css-loader@^5.2.6, css-loader@^5.2.7: version "5.2.7" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== @@ -4149,27 +4307,10 @@ css-loader@^5.2.6: schema-utils "^3.0.0" semver "^7.3.5" -css-prefers-color-scheme@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" - integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== - dependencies: - postcss "^7.0.5" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" +css-prefers-color-scheme@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-8.0.2.tgz#a0671f54eb19ed0d30b952574c0af11ec355fb6d" + integrity sha512-OvFghizHJ45x7nsJJUSYLyQNTzsCU8yWjxAc/nhPQg1pbs18LMoET8N3kOweFDPy0JV0OSXN2iqRFhPBHYOeMA== css-select@^4.1.3: version "4.3.0" @@ -4182,6 +4323,17 @@ css-select@^4.1.3: domutils "^2.8.0" nth-check "^2.0.1" +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + css-selector-tokenizer@^0.7.0: version "0.7.3" resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" @@ -4190,15 +4342,7 @@ css-selector-tokenizer@^0.7.0: cssesc "^3.0.0" fastparse "^1.1.2" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: +css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== @@ -4206,20 +4350,15 @@ css-tree@^1.1.2: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - -css-what@^6.0.1: +css-what@^6.0.1, css-what@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -cssdb@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" - integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== +cssdb@^7.5.3: + version "7.5.4" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.5.4.tgz#e34dafee5184d67634604e345e389ca79ac179ea" + integrity sha512-fGD+J6Jlq+aurfE1VDXlLS4Pt0VtNlu2+YgfGOdMxRyl/HQ9bDiHTwSck1Yz8A97Dt/82izSK6Bp/4nVqacOsg== cssesc@^2.0.0: version "2.0.0" @@ -4231,75 +4370,56 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== - dependencies: - 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.3" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw== - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw== - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== +cssnano-preset-default@^5.2.14: + version "5.2.14" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" + integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.1" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.4" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.2" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== -cssnano@^4.1.10, cssnano@^4.1.11: - version "4.1.11" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== +cssnano@^5.0.2, cssnano@^5.1.15: + version "5.1.15" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" + integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.8" - is-resolvable "^1.0.0" - postcss "^7.0.0" + cssnano-preset-default "^5.2.14" + lilconfig "^2.0.3" + yaml "^1.10.2" -csso@^4.0.2: +csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== @@ -4324,9 +4444,9 @@ cssstyle@^2.3.0: cssom "~0.3.6" csstype@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" - integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== cuint@^0.2.2: version "0.2.2" @@ -4355,14 +4475,16 @@ data-urls@^2.0.0: whatwg-url "^8.0.0" date-fns-tz@^1.3.6: - version "1.3.7" - resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.3.7.tgz#e8e9d2aaceba5f1cc0e677631563081fdcb0e69a" - integrity sha512-1t1b8zyJo+UI8aR+g3iqr5fkUHWpd58VBx8J/ZSQ+w7YrGlw80Ag4sA86qkfCXRBLmMc4I2US+aPMd4uKvwj5g== + version "1.3.8" + resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.3.8.tgz#083e3a4e1f19b7857fa0c18deea6c2bc46ded7b9" + integrity sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ== date-fns@^2.16.1: - version "2.29.2" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.2.tgz#0d4b3d0f3dff0f920820a070920f0d9662c51931" - integrity sha512-0VNbwmWJDS/G3ySwFSJA3ayhbURMTJLtwM2DTxf9CWondCnh6DTNlO9JgRSq6ibf4eD0lfMJNBxUdEAHHix+bA== + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" date-time@^2.1.0: version "2.1.0" @@ -4424,14 +4546,14 @@ decamelize@^1.2.0: integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js@^10.2.1: - version "10.4.0" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.0.tgz#97a7448873b01e92e5ff9117d89a7bca8e63e0fe" - integrity sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg== + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== decompress-response@^3.3.0: version "3.3.0" @@ -4475,21 +4597,21 @@ deep-is@^0.1.3, deep-is@~0.1.3: integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-require-extensions@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" - integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.1.tgz#bfae00feeaeada68c2ae256c62540f60b80625bd" + integrity sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw== dependencies: strip-bom "^4.0.0" defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" @@ -4503,10 +4625,10 @@ defer-to-connect@^2.0.0: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" object-keys "^1.1.1" @@ -4538,20 +4660,15 @@ defu@^3.2.2: resolved "https://registry.yarnpkg.com/defu/-/defu-3.2.2.tgz#be20f4cc49b9805d54ee6b610658d53894942e97" integrity sha512-8UWj5lNv7HD+kB0e9w77Z7TdQlbUYDVWqITLHNqFIn6khrNHv5WQo38Dcm1f6HeNyZf0U7UbPf6WeZDSdCzGDQ== -defu@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/defu/-/defu-4.0.1.tgz#9d7d7a48f9295f08285d153dcff174c89b9bcb22" - integrity sha512-lC+G0KvvWRbisQa50+iFelm3/eMmwo4IlBmfASOVlw9MZpHHyQeVsZxc5j23+TQy5ydgEoTVSrWl7ptou1kzJQ== - defu@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/defu/-/defu-5.0.1.tgz#a034278f9b032bf0845d261aa75e9ad98da878ac" integrity sha512-EPS1carKg+dkEVy3qNTqIdp2qV7mUP08nIsupfwQpz++slCVRw7qbQyWvSTig+kFPwz2XXp5/kIIkH+CwrJKkQ== -defu@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.0.tgz#7a5411655da73335c7d933256911f17c74443e2d" - integrity sha512-pOFYRTIhoKujrmbTRhcW5lYQLBXw/dlTwfI8IguF1QCDJOcJzNH1w+YFjxqy6BAuJrClTy6MUE8q+oKJ2FLsIw== +defu@^6.0.0, defu@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.2.tgz#1217cba167410a1765ba93893c6dbac9ed9d9e5c" + integrity sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ== del@^6.0.0: version "6.1.1" @@ -4585,10 +4702,10 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destr@^1.1.0, destr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/destr/-/destr-1.1.1.tgz#910457d10a2f2f247add4ca4fdb4a03adcc49079" - integrity sha512-QqkneF8LrYmwATMdnuD2MLI3GHQIcBnG6qFC2q9bSH430VTCDAVjcspPmUaKhPGtAtPAftIUFqY1obQYQuwmbg== +destr@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/destr/-/destr-1.2.2.tgz#7ba9befcafb645a50e76b260449c63927b51e22f" + integrity sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA== destroy@1.2.0, destroy@^1.0.4: version "1.2.0" @@ -4666,14 +4783,6 @@ dom-event-types@^1.0.0: resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.1.0.tgz#120c1f92ddea7758db1ccee0a100a33c39f4701b" integrity sha512-jNCX+uNJ3v38BKvPbpki6j5ItVlnSqVV6vDWGS6rExzCMjsc39frLjm1n91o6YaKK6AZl0wLloItW6C6mr61BQ== -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" @@ -4683,17 +4792,21 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.2.0: +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== @@ -4712,13 +4825,12 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: - dom-serializer "0" - domelementtype "1" + domelementtype "^2.3.0" domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" @@ -4729,6 +4841,15 @@ domutils@^2.5.2, domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -4794,10 +4915,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.202: - version "1.4.242" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.242.tgz#51284820b0e6f6ce6c60d3945a3c4f9e4bd88f5f" - integrity sha512-nPdgMWtjjWGCtreW/2adkrB2jyHjClo9PtVhR6rW+oxa4E4Wom642Tn+5LslHP3XPL5MCpkn5/UEY60EXylNeQ== +electron-to-chromium@^1.4.284: + version "1.4.385" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.385.tgz#1afd8d6280d510145148777b899ff481c65531ff" + integrity sha512-L9zlje9bIw0h+CwPQumiuVlfMcV4boxRjFIWDcLfFqTZNbkwOExBzfmswytHawObQX4OUhtNv8gIiB21kOurIg== elliptic@^6.5.3: version "6.5.4" @@ -4873,6 +4994,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + equal-length@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/equal-length/-/equal-length-1.0.1.tgz#21ca112d48ab24b4e1e7ffc0e5339d31fdfc274c" @@ -4899,40 +5025,60 @@ error-stack-parser@^2.0.0: dependencies: stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.1: - version "1.20.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.2.tgz#8495a07bc56d342a3b8ea3ab01bd986700c2ccb3" - integrity sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ== +es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstract@^1.21.2: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" function.prototype.name "^1.1.5" - get-intrinsic "^1.1.2" + get-intrinsic "^1.2.0" 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.3" - is-callable "^1.2.4" + 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.10" is-weakref "^1.0.2" - object-inspect "^1.12.2" + object-inspect "^1.12.3" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + es-shim-unscopables@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" @@ -5010,12 +5156,13 @@ eslint-config-standard@^14.1.1: integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== eslint-import-resolver-node@^0.3.3: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" - resolve "^1.20.0" + is-core-module "^2.11.0" + resolve "^1.22.1" eslint-loader@^4.0.2: version "4.0.2" @@ -5029,9 +5176,9 @@ eslint-loader@^4.0.2: schema-utils "^2.6.5" eslint-module-utils@^2.6.0: - version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" @@ -5128,6 +5275,14 @@ eslint-plugin-vue@^6.2.2: semver "^5.6.0" vue-eslint-parser "^7.0.0" +eslint-scope@5.1.1, eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -5136,14 +5291,6 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.0.0, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - eslint-template-visitor@^2.0.0: version "2.3.2" resolved "https://registry.yarnpkg.com/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz#b52f96ff311e773a345d79053ccc78275bbc463d" @@ -5264,9 +5411,9 @@ espurify@^1.6.0: core-js "^2.0.0" esquery@^1.3.1, esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -5320,7 +5467,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@^5.0.0: +execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -5364,13 +5511,13 @@ expect@^27.5.1: jest-message-util "^27.5.1" express@^4.17.1: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.0" + body-parser "1.20.1" content-disposition "0.5.4" content-type "~1.0.4" cookie "0.5.0" @@ -5389,7 +5536,7 @@ express@^4.17.1: parseurl "~1.3.3" path-to-regexp "0.1.7" proxy-addr "~2.0.7" - qs "6.10.3" + qs "6.11.0" range-parser "~1.2.1" safe-buffer "5.2.1" send "0.18.0" @@ -5459,9 +5606,9 @@ fast-diff@^1.1.2, fast-diff@^1.2.0: integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -5485,16 +5632,16 @@ fastparse@^1.1.2: integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" @@ -5547,11 +5694,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== - finalhandler@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -5634,7 +5776,7 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" -flat@^5.0.0: +flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== @@ -5644,11 +5786,6 @@ flatted@^3.0.5, flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -flatten@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" - integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== - flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -5657,16 +5794,18 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== - -follow-redirects@^1.15.0: +follow-redirects@^1.0.0, follow-redirects@^1.14.0, follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -5703,6 +5842,11 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -5728,6 +5872,15 @@ fromentries@^1.2.0: resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -5737,16 +5890,6 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-memo@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/fs-memo/-/fs-memo-1.2.0.tgz#a2ec3be606b902077adbb37ec529c5ec5fb2e037" @@ -5812,7 +5955,7 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -functions-have-names@^1.2.2: +functions-have-names@^1.2.2, functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== @@ -5834,10 +5977,10 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -5902,20 +6045,20 @@ git-config-path@^2.0.0: resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-2.0.0.tgz#62633d61af63af4405a5024efd325762f58a181b" integrity sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA== -git-up@^4.0.0: - version "4.0.5" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.5.tgz#e7bb70981a37ea2fb8fe049669800a1f9a01d759" - integrity sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA== +git-up@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" + integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== dependencies: - is-ssh "^1.3.0" - parse-url "^6.0.0" + is-ssh "^1.4.0" + parse-url "^8.1.0" -git-url-parse@^11.4.4: - version "11.6.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.6.0.tgz#c634b8de7faa66498a2b88932df31702c67df605" - integrity sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g== +git-url-parse@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" + integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== dependencies: - git-up "^4.0.0" + git-up "^7.0.0" glob-parent@^3.1.0: version "3.1.0" @@ -5932,6 +6075,11 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -5944,10 +6092,10 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7, gl once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== +glob@^8.0.3, glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5956,9 +6104,9 @@ glob@^8.0.3: once "^1.3.0" global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== dependencies: ini "2.0.0" @@ -5968,13 +6116,20 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" -globby@^11.0.1, globby@^11.0.3, globby@^11.0.4: +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.0.1, globby@^11.0.4: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -5986,10 +6141,17 @@ globby@^11.0.1, globby@^11.0.3, globby@^11.0.4: merge2 "^1.4.1" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + got@^11.8.2: - version "11.8.5" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" - integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== dependencies: "@sindresorhus/is" "^4.0.0" "@szmarczak/http-timer" "^4.0.5" @@ -6021,9 +6183,9 @@ got@^9.6.0: url-parse-lax "^3.0.0" graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== gzip-size@^6.0.0: version "6.0.0" @@ -6090,7 +6252,12 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -6138,7 +6305,7 @@ has-yarn@^2.1.0: resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== -has@^1.0.0, has@^1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -6185,11 +6352,6 @@ he@1.2.0, he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -6204,16 +6366,6 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A== - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA== - html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -6288,9 +6440,9 @@ htmlparser2@^6.1.0: entities "^2.0.0" http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-errors@2.0.0: version "2.0.0" @@ -6370,13 +6522,6 @@ icss-replace-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" integrity sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg== -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" - icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" @@ -6402,25 +6547,10 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.1, ignore@^5.1.8, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg== - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" +ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -6430,13 +6560,6 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w== - dependencies: - resolve-from "^3.0.0" - import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -6527,12 +6650,12 @@ inquirer@^7.3.3: strip-ansi "^6.0.0" through "^2.3.6" -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.2.0" has "^1.0.3" side-channel "^1.0.4" @@ -6541,7 +6664,7 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -ip@^1.1.5: +ip@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== @@ -6552,14 +6675,9 @@ ipaddr.js@1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== irregular-plurals@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.3.0.tgz#67d0715d4361a60d9fd9ee80af3881c631a31ee2" - integrity sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g== - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg== + version "3.5.0" + resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.5.0.tgz#0835e6639aa8425bdc8b0d33d0dc4e89d9c01d2b" + integrity sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ== is-accessor-descriptor@^0.1.6: version "0.1.6" @@ -6583,16 +6701,20 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -6627,10 +6749,10 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-ci@^2.0.0: version "2.0.0" @@ -6639,22 +6761,10 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA== - dependencies: - 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" - -is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== +is-core-module@^2.11.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== dependencies: has "^1.0.3" @@ -6697,11 +6807,6 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== - is-docker@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -6860,11 +6965,6 @@ is-regex@^1.0.4, is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - is-retry-allowed@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" @@ -6877,7 +6977,7 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" -is-ssh@^1.3.0: +is-ssh@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== @@ -6903,6 +7003,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -6960,6 +7071,11 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -7000,9 +7116,9 @@ istanbul-lib-instrument@^4.0.0: semver "^6.3.0" istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" - integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -7273,9 +7389,9 @@ jest-mock@^27.5.1: "@types/node" "*" jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^27.5.1: version "27.5.1" @@ -7462,15 +7578,15 @@ jest@^27.0.2: import-local "^3.0.2" jest-cli "^27.5.1" -jiti@^1.9.2: - version "1.14.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.14.0.tgz#5350fff532a4d891ca4bcd700c47c1f40e6ee326" - integrity sha512-4IwstlaKQc9vCTC+qUXLM1hajy2ImiL9KnLvVYiaHOtS/v3wRjhLlGl121AmgDgx/O43uKmxownJghS5XMya2A== +jiti@^1.16.2, jiti@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" + integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== jose@^4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/jose/-/jose-4.9.2.tgz#268994df4443b9c191de0b001c2e3796ac6cf368" - integrity sha512-EqKvu2PqJCD3Jrg3PvcYZVS7D21qMVLSYMDAFcOdGUEOpJSLNtJO7NjLANvu3SYHVl6pdP2ff7ve6EZW2nX7Nw== + version "4.14.4" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.14.4.tgz#59e09204e2670c3164ee24cbfe7115c6f8bff9ca" + integrity sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g== js-base64@^2.1.9: version "2.6.4" @@ -7478,9 +7594,9 @@ js-base64@^2.1.9: integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== js-beautify@^1.6.12: - version "1.14.6" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.6.tgz#b23ca5d74a462c282c7711bb51150bcc97f2b507" - integrity sha512-GfofQY5zDp+cuHc+gsEXKPpNw2KbPddreEo35O6jT6i0RVK6LhsoYBhq5TvK4/n74wnA0QbK8gGd+jUZwTMKJw== + version "1.14.7" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.7.tgz#9206296de33f86dc106d3e50a35b7cf8729703b2" + integrity sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A== dependencies: config-chain "^1.1.13" editorconfig "^0.15.3" @@ -7488,9 +7604,9 @@ js-beautify@^1.6.12: nopt "^6.0.0" js-cookie@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414" - integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw== + version "3.0.5" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" + integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== js-string-escape@^1.0.1: version "1.0.1" @@ -7598,17 +7714,17 @@ json5@^0.5.0, json5@^0.5.1: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== +json5@^1.0.1, json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" -json5@^2.1.1, json5@^2.1.2, json5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +json5@^2.1.1, json5@^2.1.2, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^4.0.0: version "4.0.0" @@ -7639,9 +7755,9 @@ keyv@^3.0.0: json-buffer "3.0.0" keyv@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.0.tgz#dbce9ade79610b6e641a9a65f2f6499ba06b9bc6" - integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== + version "4.5.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== dependencies: json-buffer "3.0.1" @@ -7675,9 +7791,9 @@ kleur@^3.0.3: integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== klona@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" - integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== knex@^0.95.6: version "0.95.15" @@ -7713,7 +7829,7 @@ latest-version@^5.1.0: dependencies: package-json "^6.3.0" -launch-editor-middleware@^2.2.1: +launch-editor-middleware@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.6.0.tgz#2ba4fe4b695d7fe3d44dee86b6d46d57b8332dfd" integrity sha512-K2yxgljj5TdCeRN1lBtO3/J26+AIDDDw+04y6VAiZbWcTdBwsYN6RrZBnW5DN/QiSIdKNjKdATLUUluWWFYTIA== @@ -7749,6 +7865,11 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lilconfig@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -7796,18 +7917,18 @@ loader-utils@^0.2.16: object-assign "^4.0.1" loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + version "1.4.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" + integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" json5 "^1.0.1" loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" @@ -7946,11 +8067,6 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - lru-cache@^4.1.2, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -7988,7 +8104,7 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0, make-dir@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -8061,17 +8177,12 @@ mdn-data@2.0.14: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -mem@^8.0.0, mem@^8.1.1: +mem@^8.0.0: version "8.1.1" resolved "https://registry.yarnpkg.com/mem/-/mem-8.1.1.tgz#cf118b357c65ab7b7e0817bdf00c8062297c0122" integrity sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA== @@ -8079,10 +8190,10 @@ mem@^8.0.0, mem@^8.1.1: map-age-cleaner "^0.1.3" mimic-fn "^3.1.0" -memfs@^3.2.2: - version "3.4.7" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" - integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== +memfs@^3.4.3: + version "3.5.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.1.tgz#f0cd1e2bfaef58f6fe09bfb9c2288f07fea099ec" + integrity sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA== dependencies: fs-monkey "^1.0.3" @@ -8169,7 +8280,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.19, mime-types@^2.1.27, mime-types@^2.1.30, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.19, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -8181,10 +8292,10 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.3.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== +mime@~2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== mimic-fn@^2.1.0: version "2.1.0" @@ -8224,16 +8335,23 @@ minimatch@^3.0.4, minimatch@^3.1.1: brace-expansion "^1.1.7" minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimatch@~3.0.4: + version "3.0.8" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" + integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" @@ -8257,12 +8375,17 @@ minipass-pipeline@^1.2.2: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.1: - version "3.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" @@ -8295,7 +8418,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -8374,14 +8497,14 @@ mute-stream@0.0.8: integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: - version "2.16.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" - integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== + version "2.17.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== -nanoid@^3.1.23, nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@^3.1.23, nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== nanomatch@^1.2.9: version "1.2.13" @@ -8430,19 +8553,24 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-fetch-native@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.1.0.tgz#a530f5c4cadb49b382dcf81d8f5f19ed0f457fbe" + integrity sha512-nl5goFCig93JZ9FIV8GHT9xpNqXbxQUzkOmKIMKmncsBH9jhg7qKex8hirpymkBFmNQ114chEEG5lS4wgK2I+Q== + node-fetch@^2.6.1, node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + version "2.6.9" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== dependencies: whatwg-url "^5.0.0" -node-html-parser@^3.2.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-3.3.6.tgz#fdbb3ba16d1252d7197ec39f0260d9c10ef33590" - integrity sha512-VkWDHvNgFGB3mbQGMyzqRE1i/BG7TKX9wRXC8e/v8kL0kZR/Oy6RjYxXH91K6/+m3g8iQ8dTqRy75lTYoA2Cjg== +node-html-parser@^6.1.5: + version "6.1.5" + resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-6.1.5.tgz#c819dceb13a10a7642ff92f94f870b4f77968097" + integrity sha512-fAaM511feX++/Chnhe475a0NHD8M7AxDInsqQpz6x63GRF7xYNdS8Vo5dKsIVPgsOvG7eioRRTZQnWBrhDHBSg== dependencies: - css-select "^4.1.3" + css-select "^5.1.0" he "1.2.0" node-int64@^0.4.0: @@ -8491,10 +8619,10 @@ node-preload@^0.2.1: dependencies: process-on-spawn "^1.0.0" -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== node-res@^5.0.1: version "5.0.1" @@ -8551,17 +8679,12 @@ normalize-url@1.9.1: query-string "^4.1.0" sort-keys "^1.0.0" -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - normalize-url@^4.1.0: version "4.5.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== -normalize-url@^6.0.1, normalize-url@^6.1.0: +normalize-url@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== @@ -8573,13 +8696,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -8587,11 +8703,6 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== - nuxt-i18n@^6.15.4: version "6.28.1" resolved "https://registry.yarnpkg.com/nuxt-i18n/-/nuxt-i18n-6.28.1.tgz#63e3e809fa41d855c5c7c443c0074eecaa97d273" @@ -8611,30 +8722,30 @@ nuxt-i18n@^6.15.4: vue-i18n "^8.25.0" nuxt@^2.15.8: - version "2.15.8" - resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-2.15.8.tgz#946cba46bdaaf0e3918aa27fd9ea0fed8ed303b0" - integrity sha512-ceK3qLg/Baj7J8mK9bIxqw9AavrF+LXqwYEreBdY/a4Sj8YV4mIvhqea/6E7VTCNNGvKT2sJ/TTJjtfQ597lTA== - dependencies: - "@nuxt/babel-preset-app" "2.15.8" - "@nuxt/builder" "2.15.8" - "@nuxt/cli" "2.15.8" - "@nuxt/components" "^2.1.8" - "@nuxt/config" "2.15.8" - "@nuxt/core" "2.15.8" - "@nuxt/generator" "2.15.8" - "@nuxt/loading-screen" "^2.0.3" - "@nuxt/opencollective" "^0.3.2" - "@nuxt/server" "2.15.8" - "@nuxt/telemetry" "^1.3.3" - "@nuxt/utils" "2.15.8" - "@nuxt/vue-app" "2.15.8" - "@nuxt/vue-renderer" "2.15.8" - "@nuxt/webpack" "2.15.8" + version "2.16.3" + resolved "https://registry.yarnpkg.com/nuxt/-/nuxt-2.16.3.tgz#d0338ab9145bc60aa3d927f03d20e439b9adddf4" + integrity sha512-KfqOwtsgo2vew+mHNTQZOf23SlUYYnppH65Rj7whmbXJ+J28Rdvx8ccTj0Mir13TVpjUMtxYBq9VWAL6cFZyOA== + dependencies: + "@nuxt/babel-preset-app" "2.16.3" + "@nuxt/builder" "2.16.3" + "@nuxt/cli" "2.16.3" + "@nuxt/components" "^2.2.1" + "@nuxt/config" "2.16.3" + "@nuxt/core" "2.16.3" + "@nuxt/generator" "2.16.3" + "@nuxt/loading-screen" "^2.0.4" + "@nuxt/opencollective" "^0.3.3" + "@nuxt/server" "2.16.3" + "@nuxt/telemetry" "^1.4.1" + "@nuxt/utils" "2.16.3" + "@nuxt/vue-app" "2.16.3" + "@nuxt/vue-renderer" "2.16.3" + "@nuxt/webpack" "2.16.3" nwsapi@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" - integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== + version "2.2.4" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5" + integrity sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g== nyc@^15.1.0: version "15.1.0" @@ -8688,10 +8799,10 @@ object-hash@^2.0.3: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-is@^1.0.1: version "1.1.5" @@ -8713,7 +8824,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.4: +object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== @@ -8723,15 +8834,16 @@ object.assign@^4.1.0, object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.4" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37" - integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== +object.getownpropertydescriptors@^2.0.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz#5e5c384dd209fa4efffead39e3a0512770ccc312" + integrity sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ== dependencies: - array.prototype.reduce "^1.0.4" + array.prototype.reduce "^1.0.5" call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.1" + define-properties "^1.2.0" + es-abstract "^1.21.2" + safe-array-concat "^1.0.0" object.pick@^1.3.0: version "1.3.0" @@ -8740,14 +8852,14 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== +object.values@^1.1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" on-finished@2.4.1, on-finished@^2.3.0: version "2.4.1" @@ -8787,13 +8899,14 @@ opener@1.5.2, opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -optimize-css-assets-webpack-plugin@^5.0.4: - version "5.0.8" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz#cbccdcf5a6ef61d4f8cc78cf083a67446e5f402a" - integrity sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q== +optimize-css-assets-webpack-plugin@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-6.0.1.tgz#7719bceabba1f3891ec3ae04efb81a1cc99cd793" + integrity sha512-BshV2UZPfggZLdUfN3zFBbG4sl/DynUI+YCB6fRRDWaqO2OiWN8GPcp4Y0/fEV6B3k9Hzyk3czve3V/8B/SzKQ== dependencies: - cssnano "^4.1.10" + cssnano "^5.0.2" last-call-webpack-plugin "^3.0.0" + postcss "^8.2.1" optionator@^0.8.1: version "0.8.3" @@ -9049,25 +9162,19 @@ parse-ms@^2.1.0: resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== -parse-path@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.4.tgz#4bf424e6b743fb080831f03b536af9fc43f0ffea" - integrity sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw== +parse-path@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" + integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" - qs "^6.9.4" - query-string "^6.13.8" + protocols "^2.0.0" -parse-url@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.5.tgz#4acab8982cef1846a0f8675fa686cef24b2f6f9b" - integrity sha512-e35AeLTSIlkw/5GFq70IN7po8fmDUjpDPY1rIK+VubRfsUvBonjQ+PBZG+vWMACnQSmNlvl524IucoDmcioMxA== +parse-url@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" + integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== dependencies: - is-ssh "^1.3.0" - normalize-url "^6.1.0" - parse-path "^4.0.0" - protocols "^1.4.0" + parse-path "^7.0.0" parse5@6.0.1: version "6.0.1" @@ -9229,17 +9336,17 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -playwright-core@1.25.1: - version "1.25.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.25.1.tgz#abe56aec8bef645fba988320d9f9328fafab0446" - integrity sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g== +playwright-core@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.33.0.tgz#269efe29a927cd6d144d05f3c2d2f72bd72447a1" + integrity sha512-aizyPE1Cj62vAECdph1iaMILpT0WUDCq3E6rW6I+dleSbBoGbktvJtzS6VHkZ4DKNEOG9qJpiom/ZxO+S15LAw== playwright@^1.14.0: - version "1.25.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.25.1.tgz#23fe129ca05568a72ee2a3842baa0a1985d1b345" - integrity sha512-kOlW7mllnQ70ALTwAor73q/FhdH9EEXLUqjdzqioYLcSVC4n4NBfDqeCikGuayFZrLECLkU6Hcbziy/szqTXSA== + version "1.33.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.33.0.tgz#88df1cffe97718ab8a02303e12c9133681ec7fab" + integrity sha512-+zzU3V2TslRX2ETBRgQKsKytYBkJeLZ2xzUj4JohnZnxQnivoUvOvNbRBYWSYykQTO0Y4zb8NwZTYFUO+EpPBQ== dependencies: - playwright-core "1.25.1" + playwright-core "1.33.0" plur@^4.0.0: version "4.0.0" @@ -9253,7 +9360,7 @@ pluralize@^8.0.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== -pnp-webpack-plugin@^1.6.4: +pnp-webpack-plugin@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz#65741384f6d8056f36e2255a8d67ffc20866f5c9" integrity sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg== @@ -9265,194 +9372,162 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== -postcss-attribute-case-insensitive@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" - integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^6.0.2" - -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-color-functional-notation@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" - integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-gray@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" - integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== +postcss-attribute-case-insensitive@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz#e843091859323342e461878d201ee70278809e01" + integrity sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw== dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.5" - postcss-values-parser "^2.0.0" + postcss-selector-parser "^6.0.10" -postcss-color-hex-alpha@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" - integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== dependencies: - postcss "^7.0.14" - postcss-values-parser "^2.0.1" + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" -postcss-color-mod-function@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" - integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== +postcss-clamp@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" + postcss-value-parser "^4.2.0" -postcss-color-rebeccapurple@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" - integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== +postcss-color-functional-notation@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-5.0.2.tgz#6d03c928aa3a13487703af86c301bdcd501e7430" + integrity sha512-M6ygxWOyd6eWf3sd1Lv8xi4SeF4iBPfJvkfMU4ITh8ExJc1qhbvh/U8Cv/uOvBgUVOMDdScvCdlg8+hREQzs7w== dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" + postcss-value-parser "^4.2.0" -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== +postcss-color-hex-alpha@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz#6d3ed50342802469880981a1999515d003ff7d79" + integrity sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg== dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== +postcss-color-rebeccapurple@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-8.0.2.tgz#c0f2dcf1ef4dd393314920aa181cca8c390a2648" + integrity sha512-xWf/JmAxVoB5bltHpXk+uGRoGFwu4WDAR7210el+iyvTdqiKpDhtcT8N3edXMoVJY0WHFMrKMUieql/wRNiXkw== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-custom-media@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" - integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== +postcss-colormin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" + integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== dependencies: - postcss "^7.0.14" + browserslist "^4.21.4" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-custom-media@^9.1.3: + version "9.1.3" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-9.1.3.tgz#68bb2ae377bb07c19f03f252930cc380af894dce" + integrity sha512-W1C4Fu6KAZ7sKYQCuGMr8gyaE4BtjTQGPLVS4m0WCaWM6l7PgVbvmDeb4ClBc5R/7kdwESYf0hdxGtEPhi9CLA== + dependencies: + "@csstools/cascade-layer-name-parser" "^1.0.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/media-query-list-parser" "^2.0.4" + +postcss-custom-properties@^13.1.5: + version "13.1.5" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.1.5.tgz#75567e3b4a664f820bcc3ba8b6ae3c8d27db05d1" + integrity sha512-98DXk81zTGqMVkGANysMHbGIg3voH383DYo3/+c+Abzay3nao+vM/f4Jgzsakk9S7BDsEw5DiW7sFy5G4W2wLA== + dependencies: + "@csstools/cascade-layer-name-parser" "^1.0.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + postcss-value-parser "^4.2.0" + +postcss-custom-selectors@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.3.tgz#047e2bc4726fe8e448c23047c99785fcdbe1ef87" + integrity sha512-GTVscax6O/8s7agFF0HsOoIyjrnAbLjgCUle8tn+0oDGJuVx7p56U7ClSRoC49poxFuMfu2B4Q8GnxSCOeuFKw== + dependencies: + "@csstools/cascade-layer-name-parser" "^1.0.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + postcss-selector-parser "^6.0.4" -postcss-custom-properties@^8.0.11: - version "8.0.11" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" - integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== +postcss-dir-pseudo-class@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-7.0.2.tgz#71618b7eb4abe067845d11b3c8f322760c9b3e88" + integrity sha512-cMnslilYxBf9k3qejnovrUONZx1rXeUZJw06fgIUBzABJe3D2LiLL5WAER7Imt3nrkaIgG05XZBztueLEf5P8w== dependencies: - postcss "^7.0.17" - postcss-values-parser "^2.0.1" + postcss-selector-parser "^6.0.10" -postcss-custom-selectors@^5.1.2: +postcss-discard-comments@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" - integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-dir-pseudo-class@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" - integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== -postcss-double-position-gradients@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" - integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== +postcss-double-position-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-4.0.2.tgz#855a23201f26be447210504e9b668429cbf4640c" + integrity sha512-GXL1RmFREDK4Q9aYvI2RhVrA6a6qqSMQQ5ke8gSH1xgV6exsqbcJpIumC7AOgooH6/WIG3/K/T8xxAiVHy/tJg== dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" + "@csstools/postcss-progressive-custom-properties" "^2.0.0" + postcss-value-parser "^4.2.0" -postcss-env-function@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" - integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== +postcss-focus-visible@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-8.0.2.tgz#a7ac26ffe3e9c2bd17d7200d75e2d79ee8110891" + integrity sha512-f/Vd+EC/GaKElknU59esVcRYr/Y3t1ZAQyL4u2xSOgkDy4bMCmG7VP5cGvj3+BTLNE9ETfEuz2nnt4qkZwTTeA== dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" + postcss-selector-parser "^6.0.10" -postcss-focus-visible@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" - integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== +postcss-focus-within@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-7.0.2.tgz#5d2c866030e66ed22b204c9506de640943310b1c" + integrity sha512-AHAJ89UQBcqBvFgQJE9XasGuwMNkKsGj4D/f9Uk60jFmEBHpAL14DrnSk3Rj+SwZTr/WUG+mh+Rvf8fid/346w== dependencies: - postcss "^7.0.2" + postcss-selector-parser "^6.0.10" -postcss-focus-within@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" - integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== - dependencies: - postcss "^7.0.2" +postcss-font-variant@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== -postcss-font-variant@^4.0.0: +postcss-gap-properties@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" - integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== - dependencies: - postcss "^7.0.2" - -postcss-gap-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" - integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== - dependencies: - postcss "^7.0.2" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-4.0.1.tgz#0347d6a84a46bfbe88bedc542cc4b354e04a8338" + integrity sha512-V5OuQGw4lBumPlwHWk/PRfMKjaq/LTGR4WDTemIMCaMevArVfCCA9wBJiL1VjDAd+rzuCIlkRoRvDsSiAaZ4Fg== -postcss-image-set-function@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" - integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== +postcss-image-set-function@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-5.0.2.tgz#088e0f535f43e74d6ea8033ff7b0482e2735ea6e" + integrity sha512-Sszjwo0ubETX0Fi5MvpYzsONwrsjeabjMoc5YqHvURFItXgIu3HdCjcVuVKGMPGzKRhgaknmdM5uVWInWPJmeg== dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" + postcss-value-parser "^4.2.0" postcss-import-resolver@^2.0.0: version "2.0.0" @@ -9461,132 +9536,97 @@ postcss-import-resolver@^2.0.0: dependencies: enhanced-resolve "^4.1.1" -postcss-import@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153" - integrity sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw== +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== dependencies: - postcss "^7.0.1" - postcss-value-parser "^3.2.3" + postcss-value-parser "^4.0.0" read-cache "^1.0.0" resolve "^1.1.7" -postcss-initial@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" - integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== - dependencies: - postcss "^7.0.2" - -postcss-lab-function@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" - integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" +postcss-initial@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" + integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== +postcss-lab-function@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-5.2.1.tgz#a1f324fa5c098bddf36de221abcc32070c77b5db" + integrity sha512-u71Adr4nWi+4EmSZq5EV/fg9d1dYO6W26RNtT9LISEyjhH1q23vJIUkSqRwHgD6v7xxsxLOY5cSdVyaNE6rqzw== dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" + "@csstools/css-color-parser" "^1.1.2" + "@csstools/css-parser-algorithms" "^2.1.1" + "@csstools/css-tokenizer" "^2.1.1" + "@csstools/postcss-progressive-custom-properties" "^2.0.0" -postcss-logical@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" - integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== +postcss-loader@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.3.0.tgz#2c4de9657cd4f07af5ab42bd60a673004da1b8cc" + integrity sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q== dependencies: - postcss "^7.0.2" + cosmiconfig "^7.0.0" + klona "^2.0.4" + loader-utils "^2.0.0" + schema-utils "^3.0.0" + semver "^7.3.4" -postcss-media-minmax@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" - integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== +postcss-logical@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-6.1.0.tgz#c33ae75d3edaea7eb821e76dc4e6d0ecedc3200d" + integrity sha512-qb1+LpClhYjxac8SfOcWotnY3unKZesDqIOm+jnGt8rTl7xaIWpE2bPGZHxflOip1E/4ETo79qlJyRL3yrHn1g== dependencies: - postcss "^7.0.2" + postcss-value-parser "^4.2.0" -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" + postcss-value-parser "^4.2.0" + stylehacks "^5.1.1" -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== +postcss-merge-rules@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" + integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== dependencies: - browserslist "^4.0.0" + browserslist "^4.21.4" 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" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== dependencies: - 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" + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" + browserslist "^4.21.4" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== dependencies: - postcss "^7.0.5" + postcss-selector-parser "^6.0.5" postcss-modules-extract-imports@^3.0.0: version "3.0.0" @@ -9601,16 +9641,6 @@ postcss-modules-local-by-default@^1.1.1: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-local-by-default@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== - dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - postcss-modules-local-by-default@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" @@ -9628,14 +9658,6 @@ postcss-modules-scope@^1.0.2: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - postcss-modules-scope@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" @@ -9655,14 +9677,6 @@ postcss-modules-sync@^1.0.0: postcss-modules-scope "^1.0.2" string-hash "^1.1.0" -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== - dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" - postcss-modules-values@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" @@ -9670,229 +9684,205 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" - integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== - dependencies: - postcss "^7.0.2" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== +postcss-nesting@^11.2.1: + version "11.2.2" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-11.2.2.tgz#ddedfea5a1fdcd8d753298d82297ad15d5640c0f" + integrity sha512-aOTiUniAB1bcPE6GGiynWRa6PZFPhOTAm5q3q5cem6QeSijIHHkWr6gs65ukCZMXeak8yXeZVbBJET3VM+HlhA== dependencies: - postcss "^7.0.0" + "@csstools/selector-specificity" "^2.0.0" + postcss-selector-parser "^6.0.10" -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-overflow-shorthand@^2.0.0: +postcss-opacity-percentage@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" - integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== - dependencies: - postcss "^7.0.2" + resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz#c0a56060cd4586e3f954dbde1efffc2deed53002" + integrity sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ== -postcss-page-break@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" - integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== dependencies: - postcss "^7.0.2" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" -postcss-place@^4.0.1: +postcss-overflow-shorthand@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" - integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-preset-env@^6.7.0: - version "6.7.1" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.1.tgz#26563d2e9395d626a45a836450844540694bfcef" - integrity sha512-rlRkgX9t0v2On33n7TK8pnkcYOATGQSv48J2RS8GsXhqtg+xk6AummHP88Y5mJo0TLJelBjePvSjScTNkj3+qw== - dependencies: - autoprefixer "^9.6.1" - browserslist "^4.6.4" - caniuse-lite "^1.0.30000981" - css-blank-pseudo "^0.1.4" - css-has-pseudo "^0.10.0" - css-prefers-color-scheme "^3.1.1" - cssdb "^4.4.0" - postcss "^7.0.17" - postcss-attribute-case-insensitive "^4.0.1" - postcss-color-functional-notation "^2.0.1" - postcss-color-gray "^5.0.0" - postcss-color-hex-alpha "^5.0.3" - postcss-color-mod-function "^3.0.3" - postcss-color-rebeccapurple "^4.0.1" - postcss-custom-media "^7.0.8" - postcss-custom-properties "^8.0.11" - postcss-custom-selectors "^5.1.2" - postcss-dir-pseudo-class "^5.0.0" - postcss-double-position-gradients "^1.0.0" - postcss-env-function "^2.0.2" - postcss-focus-visible "^4.0.0" - postcss-focus-within "^3.0.0" - postcss-font-variant "^4.0.0" - postcss-gap-properties "^2.0.0" - postcss-image-set-function "^3.0.1" - postcss-initial "^3.0.0" - postcss-lab-function "^2.0.1" - postcss-logical "^3.0.0" - postcss-media-minmax "^4.0.0" - postcss-nesting "^7.0.0" - postcss-overflow-shorthand "^2.0.0" - postcss-page-break "^2.0.0" - postcss-place "^4.0.1" - postcss-pseudo-class-any-link "^6.0.0" - postcss-replace-overflow-wrap "^3.0.0" - postcss-selector-matches "^4.0.0" - postcss-selector-not "^4.0.0" - -postcss-pseudo-class-any-link@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" - integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-4.0.1.tgz#cb61ca24d8c4e1dbf14d85181b017cfa6953aa34" + integrity sha512-HQZ0qi/9iSYHW4w3ogNqVNr2J49DHJAl7r8O2p0Meip38jsdnRPgiDW7r/LlLrrMBMe3KHkvNtAV2UmRVxzLIg== dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" + postcss-value-parser "^4.2.0" -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== +postcss-place@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-8.0.1.tgz#408d7a27e99192df51c95fe62a3a34def62aa66a" + integrity sha512-Ow2LedN8sL4pq8ubukO77phSVt4QyCm35ZGCYXKvRFayAwcpgB0sjNJglDoTuRdUL32q/ZC1VkPBo0AOEr4Uiw== dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" + postcss-value-parser "^4.2.0" -postcss-replace-overflow-wrap@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" - integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== +postcss-preset-env@^8.0.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-8.3.2.tgz#9ec368e0f0df9c693d52b69d525d366fe4b1833a" + integrity sha512-VSAOsfxTXzO/gX5QljC8x8hN3ABbD9iqqLgqHqohBdNI5FhJptwpl96kpu+kYvvzK7BWwaHYou0IeYrp+NqmcQ== + dependencies: + "@csstools/postcss-cascade-layers" "^3.0.1" + "@csstools/postcss-color-function" "^2.2.1" + "@csstools/postcss-color-mix-function" "^1.0.1" + "@csstools/postcss-font-format-keywords" "^2.0.2" + "@csstools/postcss-gradients-interpolation-method" "^3.0.4" + "@csstools/postcss-hwb-function" "^2.2.1" + "@csstools/postcss-ic-unit" "^2.0.2" + "@csstools/postcss-is-pseudo-class" "^3.2.0" + "@csstools/postcss-logical-float-and-clear" "^1.0.1" + "@csstools/postcss-logical-resize" "^1.0.1" + "@csstools/postcss-logical-viewport-units" "^1.0.3" + "@csstools/postcss-media-minmax" "^1.0.2" + "@csstools/postcss-media-queries-aspect-ratio-number-values" "^1.0.2" + "@csstools/postcss-nested-calc" "^2.0.2" + "@csstools/postcss-normalize-display-values" "^2.0.1" + "@csstools/postcss-oklab-function" "^2.2.1" + "@csstools/postcss-progressive-custom-properties" "^2.1.0" + "@csstools/postcss-scope-pseudo-class" "^2.0.2" + "@csstools/postcss-stepped-value-functions" "^2.1.1" + "@csstools/postcss-text-decoration-shorthand" "^2.2.3" + "@csstools/postcss-trigonometric-functions" "^2.1.1" + "@csstools/postcss-unset-value" "^2.0.1" + autoprefixer "^10.4.14" + browserslist "^4.21.5" + css-blank-pseudo "^5.0.2" + css-has-pseudo "^5.0.2" + css-prefers-color-scheme "^8.0.2" + cssdb "^7.5.3" + postcss-attribute-case-insensitive "^6.0.2" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^5.0.2" + postcss-color-hex-alpha "^9.0.2" + postcss-color-rebeccapurple "^8.0.2" + postcss-custom-media "^9.1.3" + postcss-custom-properties "^13.1.5" + postcss-custom-selectors "^7.1.3" + postcss-dir-pseudo-class "^7.0.2" + postcss-double-position-gradients "^4.0.2" + postcss-focus-visible "^8.0.2" + postcss-focus-within "^7.0.2" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^4.0.1" + postcss-image-set-function "^5.0.2" + postcss-initial "^4.0.1" + postcss-lab-function "^5.2.1" + postcss-logical "^6.1.0" + postcss-nesting "^11.2.1" + postcss-opacity-percentage "^2.0.0" + postcss-overflow-shorthand "^4.0.1" + postcss-page-break "^3.0.4" + postcss-place "^8.0.1" + postcss-pseudo-class-any-link "^8.0.2" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^7.0.1" + postcss-value-parser "^4.2.0" + +postcss-pseudo-class-any-link@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-8.0.2.tgz#f5738503f2045de0c4dc216eca99bd835f74e42e" + integrity sha512-FYTIuRE07jZ2CW8POvctRgArQJ43yxhr5vLmImdKUvjFCkR09kh8pIdlCwdx/jbFm7MiW4QP58L4oOUv3grQYA== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-reduce-initial@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" + integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== dependencies: - postcss "^7.0.2" + browserslist "^4.21.4" + caniuse-api "^3.0.0" -postcss-selector-matches@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" - integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" + postcss-value-parser "^4.2.0" -postcss-selector-not@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" - integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== +postcss-selector-not@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz#8142e90c8eb6c8c5faecb3e9d96d4353d02e94fb" + integrity sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ== dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" + postcss-selector-parser "^6.0.10" -postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: +postcss-selector-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== @@ -9901,62 +9891,44 @@ postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-sel indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.12" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz#2efae5ffab3c8bfb2b7fbf0c426e3bca616c4abb" + integrity sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" + postcss-value-parser "^4.2.0" + svgo "^2.7.0" -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" + postcss-selector-parser "^6.0.5" -postcss-url@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-8.0.0.tgz#7b10059bd12929cdbb1971c60f61a0e5af86b4ca" - integrity sha512-E2cbOQ5aii2zNHh8F6fk1cxls7QVFZjLPSrqvmiza8OuXLzIpErij8BDS5Y3STPfJgpIMNCPEr8JlKQWEoozUw== +postcss-url@^10.1.3: + version "10.1.3" + resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-10.1.3.tgz#54120cc910309e2475ec05c2cfa8f8a2deafdf1e" + integrity sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw== dependencies: - mime "^2.3.1" - minimatch "^3.0.4" - mkdirp "^0.5.0" - postcss "^7.0.2" - xxhashjs "^0.2.1" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + make-dir "~3.1.0" + mime "~2.5.2" + minimatch "~3.0.4" + xxhashjs "~0.2.2" -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" - integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - postcss@^5.2.5: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" @@ -9976,7 +9948,7 @@ postcss@^6.0.1: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.36, postcss@^7.0.5, postcss@^7.0.6: +postcss@^7.0.14, postcss@^7.0.36: version "7.0.39" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== @@ -9984,12 +9956,12 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2 picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.2.15, postcss@^8.4.14: - version "8.4.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" - integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== +postcss@^8.2.1, postcss@^8.2.15, postcss@^8.4.14, postcss@^8.4.21: + version "8.4.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" + integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== dependencies: - nanoid "^3.3.4" + nanoid "^3.3.6" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -10019,9 +9991,9 @@ prettier@1.16.3: integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw== "prettier@^1.18.2 || ^2.0.0": - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-bytes@^5.6.0: version "5.6.0" @@ -10115,12 +10087,7 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== -protocols@^1.4.0: - version "1.4.8" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" - integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== - -protocols@^2.0.1: +protocols@^2.0.0, protocols@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== @@ -10201,9 +10168,9 @@ punycode@^1.2.4: integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== pupa@^2.1.1: version "2.1.1" @@ -10212,15 +10179,10 @@ pupa@^2.1.1: dependencies: escape-goat "^2.0.0" -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - -qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" @@ -10231,13 +10193,6 @@ qs@^6.11.1: dependencies: side-channel "^1.0.4" -qs@^6.9.4: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" @@ -10246,16 +10201,6 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -query-string@^6.13.8: - version "6.14.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" - integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== - dependencies: - decode-uri-component "^0.2.0" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -10311,14 +10256,14 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" -rc9@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rc9/-/rc9-1.2.2.tgz#0d79202e088dd80e2e0f77ac36f520247d2d3964" - integrity sha512-zbe8+HR2X28eZepAwohuKkebbEsA67h0DO9I7g12QrHa2CQopR9gztOLPIPXXGTvcxeUjAN4wZ+b29t3m/u05g== +rc9@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/rc9/-/rc9-2.1.0.tgz#57d3a01e55907393ef9bd0cc29f2bd66a6cd0972" + integrity sha512-ROO9bv8PPqngWKoiUZU3JDQ4sugpdRs9DfwHnzDSxK25XtQn6BEHL6EOd/OtKuDT2qodrtNR+0WkPT6l0jxH5Q== dependencies: - defu "^6.0.0" - destr "^1.1.1" - flat "^5.0.0" + defu "^6.1.2" + destr "^1.2.2" + flat "^5.0.2" rc@1.2.8, rc@^1.2.8: version "1.2.8" @@ -10379,9 +10324,9 @@ read-pkg@^5.2.0: type-fest "^0.6.0" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -10402,9 +10347,9 @@ readable-stream@1.1.x: string_decoder "~0.10.x" readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -10433,10 +10378,10 @@ rechoir@0.7.0: dependencies: resolve "^1.9.0" -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== dependencies: regenerate "^1.4.2" @@ -10445,15 +10390,15 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== dependencies: "@babel/runtime" "^7.8.4" @@ -10466,35 +10411,35 @@ regex-not@^1.0.0, regex-not@^1.0.2: safe-regex "^1.1.0" regexp-tree@^0.1.21, regexp-tree@~0.1.1: - version "0.1.24" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" - integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== + version "0.1.27" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" regexpp@^3.0.0, regexpp@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" - integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: + "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" registry-auth-token@^4.0.0: version "4.2.2" @@ -10510,15 +10455,10 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== - -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" @@ -10611,9 +10551,9 @@ requires-port@^1.0.0: integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== reselect@^4.0.0: - version "4.1.6" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656" - integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== + version "4.1.8" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== reserved-words@^0.1.2: version "0.1.2" @@ -10632,11 +10572,6 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -10653,26 +10588,19 @@ resolve-url@^0.2.1: integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + version "1.1.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.9.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.9.0: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.11.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@*: - version "3.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" - integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== - dependencies: - lowercase-keys "^3.0.0" - responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -10710,16 +10638,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w== - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg== - rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -10768,6 +10686,16 @@ rxjs@^6.6.0: dependencies: tslib "^1.9.0" +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -10778,6 +10706,15 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, s resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -10798,9 +10735,9 @@ safe-regex@^2.1.1: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sass-loader@^10.2.0: - version "10.3.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.3.1.tgz#a45f0d1dd7ea90de7eb099239a18c83dea6e6341" - integrity sha512-y2aBdtYkbqorVavkC3fcJIUDGIegzDWPn3/LAFhsf3G+MzPKTJx37sROf5pXtUeggSVbNbmfj8TgRaSLMelXRA== + version "10.4.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.4.1.tgz#bea4e173ddf512c9d7f53e9ec686186146807cbf" + integrity sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ== dependencies: klona "^2.0.4" loader-utils "^2.0.0" @@ -10815,11 +10752,6 @@ sass@1.32.12, sass@~1.32.13: dependencies: chokidar ">=3.0.0 <4.0.0" -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -10836,7 +10768,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: +schema-utils@^2.0.0, schema-utils@^2.6.5, schema-utils@^2.7.0: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -10846,14 +10778,24 @@ schema-utils@^2.0.0, schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7 ajv-keywords "^3.5.2" schema-utils@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.1.tgz#eb2d042df8b01f4b5c276a2dfd41ba0faab72e8d" + integrity sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + scule@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/scule/-/scule-0.2.1.tgz#0c1dc847b18e07219ae9a3832f2f83224e2079dc" @@ -10871,20 +10813,15 @@ semver-diff@^3.1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== dependencies: lru-cache "^6.0.0" @@ -10928,21 +10865,21 @@ serialize-javascript@^5.0.1: dependencies: randombytes "^2.1.0" -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== dependencies: randombytes "^2.1.0" -serve-placeholder@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/serve-placeholder/-/serve-placeholder-1.2.4.tgz#513eac9c435272c7fe9a86612c852ae9b1467fd4" - integrity sha512-jWD9cZXLcr4vHTTL5KEPIUBUYyOWN/z6v/tn0l6XxFhi9iqV3Fc5Y1aFeduUyz+cx8sALzGCUczkPfeOlrq9jg== +serve-placeholder@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/serve-placeholder/-/serve-placeholder-2.0.1.tgz#dfa741812f49dfea472a68c4f292dbc40d28389a" + integrity sha512-rUzLlXk4uPFnbEaIz3SW8VISTxMuONas88nYWjAWaM2W9VDbt9tyFOr3lq8RhVOFrT3XISoBw8vni5una8qMnQ== dependencies: - defu "^5.0.0" + defu "^6.0.0" -serve-static@1.15.0, serve-static@^1.14.1: +serve-static@1.15.0, serve-static@^1.14.1, serve-static@^1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== @@ -11010,9 +10947,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== side-channel@^1.0.4: version "1.0.4" @@ -11028,18 +10965,11 @@ sigmund@^1.0.1: resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g== -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - sirv@^1.0.7: version "1.0.19" resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" @@ -11188,9 +11118,9 @@ spawn-wrap@^2.0.0: which "^2.0.1" spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -11209,14 +11139,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -11262,9 +11187,9 @@ stack-trace@0.0.10: integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" @@ -11291,12 +11216,10 @@ statuses@~1.5.0: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -std-env@^2.2.1, std-env@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-2.3.1.tgz#d42271908819c243f8defc77a140fc1fcee336a1" - integrity sha512-eOsoKTWnr6C8aWrqJJ2KAReXoa7Vn5Ywyw6uCXgA/xDhxPoaIsBa5aNJmISY04dLwXPBnDHW4diGM7Sn5K4R/g== - dependencies: - ci-info "^3.1.1" +std-env@^3.0.1, std-env@^3.3.1, std-env@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe" + integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== stream-browserify@^2.0.1: version "2.0.2" @@ -11340,11 +11263,6 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== - string-hash@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" @@ -11367,23 +11285,32 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -11450,7 +11377,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -style-resources-loader@^1.4.1: +style-resources-loader@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/style-resources-loader/-/style-resources-loader-1.5.0.tgz#6e0585ca475b9dac45387c308be90d74c814f41f" integrity sha512-fIfyvQ+uvXaCBGGAgfh+9v46ARQB1AWdaop2RpQw0PBVuROsTBqGvx8dj0kxwjGOAyq3vepe4AOK3M6+Q/q2jw== @@ -11460,14 +11387,13 @@ style-resources-loader@^1.4.1: schema-utils "^2.7.0" tslib "^2.3.1" -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== +stylehacks@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" supertap@^2.0.0: version "2.0.0" @@ -11531,24 +11457,18 @@ svg-tags@^1.0.0: resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== +svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== dependencies: - 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" + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" symbol-tree@^3.2.4: version "3.2.4" @@ -11556,9 +11476,9 @@ symbol-tree@^3.2.4: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -11572,13 +11492,13 @@ tapable@^1.0.0, tapable@^1.0.0-beta.5, tapable@^1.1.3: integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tar@^6.0.2: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + version "6.1.14" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.14.tgz#e87926bec1cfe7c9e783a77a79f3e81c1cfa3b66" + integrity sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" @@ -11641,9 +11561,9 @@ terser@^4.1.2, terser@^4.6.3: source-map-support "~0.5.12" terser@^5.3.4: - version "5.15.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" - integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== + version "5.17.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.1.tgz#948f10830454761e2eeedc6debe45c532c83fd69" + integrity sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -11676,9 +11596,9 @@ thread-loader@^3.0.4: schema-utils "^3.0.0" throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + version "6.0.2" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" + integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== through2@^2.0.0: version "2.0.5" @@ -11715,11 +11635,6 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -11822,12 +11737,12 @@ ts-pnp@^1.1.6: integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== tsconfig-paths@^3.9.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" + json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" @@ -11837,9 +11752,9 @@ tslib@^1.8.1, tslib@^1.9.0: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.3, tslib@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== tsutils@^3.17.1: version "3.21.0" @@ -11910,6 +11825,15 @@ type-is@^1.6.4, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -11923,24 +11847,29 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.3.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" - integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -ua-parser-js@^0.7.28: - version "0.7.31" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" - integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== +ua-parser-js@^1.0.34: + version "1.0.35" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz#c4ef44343bc3db0a3cbefdf21822f1b1fc1ab011" + integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== -ufo@^0.7.4, ufo@^0.7.7: +ufo@^0.7.7: version "0.7.11" resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.11.tgz#17defad497981290383c5d26357773431fdbadcb" integrity sha512-IT3q0lPvtkqQ8toHQN/BkOi4VIqoqheqM1FnkNWT9y0G8B3xJhwnoKBu5OHx8zHDOvveQzfKuFowJ0VSARiIDg== +ufo@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.2.tgz#d0d9e0fa09dece0c31ffd57bd363f030a35cfe76" + integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ== + uglify-js@^3.5.1: - version "3.17.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" - integrity sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg== + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== unbox-primitive@^1.0.2: version "1.0.2" @@ -11952,10 +11881,10 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -unfetch@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" - integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== +unfetch@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-5.0.0.tgz#8a5b6e5779ebe4dde0049f7d7a81d4a1af99d142" + integrity sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" @@ -11970,15 +11899,15 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== union-value@^1.0.0: version "1.0.1" @@ -11995,11 +11924,6 @@ uniq@^1.0.1: resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ== - unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -12041,11 +11965,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== - unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -12064,10 +11983,10 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz#16279639cff1d0f800b14792de43d97df2d11b7d" - integrity sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg== +update-browserslist-db@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -12159,16 +12078,6 @@ util.promisify@1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -12225,11 +12134,6 @@ vary@^1.1.2, vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -12241,11 +12145,11 @@ vue-axios@^3.5.2: integrity sha512-GP+dct7UlAWkl1qoP3ppw0z6jcSua5/IrMpjB5O8bh089iIiJ+hdxPYH2NPEpajlYgkW5EVMP95ttXWdas1O0g== vue-chartjs@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/vue-chartjs/-/vue-chartjs-4.1.1.tgz#b1ffc2845e09d14cb5255305b11bd3e8df8058ab" - integrity sha512-rKIQ3jPrjhwxjKdNJppnYxRuBSrx4QeM3nNHsfIxEqjX6QS4Jq6e6vnZBxh2MDpURDC2uvuI2N0eIt1cWXbBVA== + version "4.1.2" + resolved "https://registry.yarnpkg.com/vue-chartjs/-/vue-chartjs-4.1.2.tgz#f899ba14f3b80660f8d2c610a015341806dfc437" + integrity sha512-QSggYjeFv/L4jFSBQpX8NzrAvX0B+Ha6nDgxkTG8tEXxYOOTwKI4phRLe+B4f+REnkmg7hgPY24R0cixZJyXBg== -vue-client-only@^2.0.0: +vue-client-only@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/vue-client-only/-/vue-client-only-2.1.0.tgz#1a67a47b8ecacfa86d75830173fffee3bf8a4ee3" integrity sha512-vKl1skEKn8EK9f8P2ZzhRnuaRHLHrlt1sbRmazlvsx6EiC3A8oWF8YCBrMJzoN+W3OnElwIGbVjsx6/xelY1AA== @@ -12269,9 +12173,9 @@ vue-hot-reload-api@^2.3.0: integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== vue-i18n@^8.25.0: - version "8.27.2" - resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.27.2.tgz#b649a65ff42b7d1a482679b732902f889965a068" - integrity sha512-QVzn7u2WVH8F7eSKIM00lujC7x1mnuGPaTnDTmB01Hd709jDtB9kYtBqM+MWmp5AJRx3gnqAdZbee9MelqwFBg== + version "8.28.2" + resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.28.2.tgz#913558066e274395c0a9f40b2f3393d5c2636840" + integrity sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA== vue-jwt-decode@^0.1.0: version "0.1.0" @@ -12280,10 +12184,10 @@ vue-jwt-decode@^0.1.0: dependencies: vue "^2.3.3" -vue-loader@^15.9.7: - version "15.10.0" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.10.0.tgz#2a12695c421a2a2cc2138f05a949d04ed086e38b" - integrity sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg== +vue-loader@^15.10.1, vue-loader@^15.9.7: + version "15.10.1" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.10.1.tgz#c451c4cd05a911aae7b5dbbbc09fb913fb3cca18" + integrity sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA== dependencies: "@vue/component-compiler-utils" "^3.1.0" hash-sum "^1.0.2" @@ -12303,15 +12207,15 @@ vue-no-ssr@^1.1.1: resolved "https://registry.yarnpkg.com/vue-no-ssr/-/vue-no-ssr-1.1.1.tgz#875f3be6fb0ae41568a837f3ac1a80eaa137b998" integrity sha512-ZMjqRpWabMPqPc7gIrG0Nw6vRf1+itwf0Itft7LbMXs2g3Zs/NFmevjZGN1x7K3Q95GmIjWbQZTVerxiBxI+0g== -vue-router@^3.5.1: - version "3.6.4" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.6.4.tgz#46b77eca93cd69f6840c4730b13976a130144ecc" - integrity sha512-QSJs5aKKPiwBH++gelVbnq0ZFbUZXjlsjAklUM+F8dtd49YY72QsD1uGpBk/cqLK1bkZ8HiqPjS8NkhaGtpqHw== +vue-router@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.6.5.tgz#95847d52b9a7e3f1361cb605c8e6441f202afad8" + integrity sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ== -vue-server-renderer@^2.6.12: - version "2.7.10" - resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.7.10.tgz#e73241c879fcc81de91882ceff135a40f756377c" - integrity sha512-hvlnyTZmDmnI7IpQE5YwIwexPi6yJq8eeNTUgLycPX3uhuEobygAQklHoeVREvwNKcET/MnVOtjF4c7t7mw6CQ== +vue-server-renderer@^2.7.14: + version "2.7.14" + resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.7.14.tgz#986f3fdca63fbb38bb6834698f11e0d6a81f182f" + integrity sha512-NlGFn24tnUrj7Sqb8njhIhWREuCJcM3140aMunLNcx951BHG8j3XOrPP7psSCaFA8z6L4IWEjudztdwTp1CBVw== dependencies: chalk "^4.1.2" hash-sum "^2.0.0" @@ -12330,10 +12234,10 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@^2.6.12, vue-template-compiler@^2.6.14: - version "2.7.10" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.10.tgz#9e20f35b2fdccacacf732dd7dedb49bf65f4556b" - integrity sha512-QO+8R9YRq1Gudm8ZMdo/lImZLJVUIAM8c07Vp84ojdDAf8HmPJc7XB556PcXV218k2AkKznsRz6xB5uOjAC4EQ== +vue-template-compiler@^2.6.12, vue-template-compiler@^2.6.14, vue-template-compiler@^2.7.14: + version "2.7.14" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" + integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== dependencies: de-indent "^1.0.2" he "^1.2.0" @@ -12355,7 +12259,7 @@ vue2-ace-editor@^0.0.15: dependencies: brace "^0.11.0" -vue@^2.3.3: +vue@^2.3.3, vue@^2.6.12, vue@^2.7.10: version "2.7.14" resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.14.tgz#3743dcd248fd3a34d421ae456b864a0246bafb17" integrity sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ== @@ -12363,14 +12267,6 @@ vue@^2.3.3: "@vue/compiler-sfc" "2.7.14" csstype "^3.1.0" -vue@^2.6.12: - version "2.7.10" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.10.tgz#ae516cc6c88e1c424754468844218fdd5e280f40" - integrity sha512-HmFC70qarSHPXcKtW8U8fgIkF6JGvjEmDiVInTkKZP0gIlEPhlVlcJJLkdGIDiNkIeA2zJPQTWJUI4iWe+AVfg== - dependencies: - "@vue/compiler-sfc" "2.7.10" - csstype "^3.1.0" - vuetify-loader@^1.7.3: version "1.9.2" resolved "https://registry.yarnpkg.com/vuetify-loader/-/vuetify-loader-1.9.2.tgz#adcadac71c6d9b24bde42a5b81dfda1871f73f81" @@ -12383,9 +12279,9 @@ vuetify-loader@^1.7.3: loader-utils "^2.0.0" vuetify@^2.6, vuetify@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.6.9.tgz#abd3884bee9947c4a5b1dd560ad832bc4d8fccbf" - integrity sha512-f4jy/DWCwyrkgbbArg0ugSX70aHfv7oO3zz2nuXqoD3W0X8AgunrakzKkt0H+BnuZgesoit9NzLoJNj1GY5DWw== + version "2.6.15" + resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.6.15.tgz#058c976f4e6e834076d80ae0c09bd61baa836d26" + integrity sha512-2a6sBSHzivXgi9pZMyHuzTgMyInCkj/BrVwTnoCa1Y/Dnfwj7lkWzgKQDScbGVK0q4vJ+YHoBBrLOmnhz1R0YA== vuex-persist@^3.1.3: version "3.1.3" @@ -12439,6 +12335,14 @@ watchpack@^1.7.4: chokidar "^3.4.1" watchpack-chokidar2 "^2.0.1" +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -12461,11 +12365,12 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-bundle-analyzer@^4.4.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz#bee2ee05f4ba4ed430e4831a319126bb4ed9f5a6" - integrity sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw== +webpack-bundle-analyzer@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04" + integrity sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg== dependencies: + "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" acorn-walk "^8.0.0" chalk "^4.1.0" @@ -12476,22 +12381,21 @@ webpack-bundle-analyzer@^4.4.1: sirv "^1.0.7" ws "^7.3.1" -webpack-dev-middleware@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz#179cc40795882cae510b1aa7f3710cbe93c9333e" - integrity sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w== +webpack-dev-middleware@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== dependencies: - colorette "^1.2.2" - mem "^8.1.1" - memfs "^3.2.2" - mime-types "^2.1.30" + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" range-parser "^1.2.1" - schema-utils "^3.0.0" + schema-utils "^4.0.0" -webpack-hot-middleware@^2.25.0: - version "2.25.2" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.2.tgz#f7f936f3871d8c4eb95ecdf23a34e9cefe9806e8" - integrity sha512-CVgm3NAQyfdIonRvXisRwPTUYuSbyZ6BY7782tMeUzWOO7RmVI2NaBYuCp41qyD4gYCkJyTneAJdK69A13B0+A== +webpack-hot-middleware@^2.25.3: + version "2.25.3" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz#be343ce2848022cfd854dd82820cd730998c6794" + integrity sha512-IK/0WAHs7MTu1tzLTjio73LjS3Ov+VvBKQmE8WPlJutgG5zT6Urgq/BbAdRrHTRpyzK0dvAvFh1Qg98akxgZpA== dependencies: ansi-html-community "0.0.8" html-entities "^2.1.0" @@ -12539,19 +12443,15 @@ webpack@^4.0.0, webpack@^4.46.0: watchpack "^1.7.4" webpack-sources "^1.4.1" -webpackbar@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-4.0.0.tgz#ee7a87f16077505b5720551af413c8ecd5b1f780" - integrity sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ== +webpackbar@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" + integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== dependencies: - ansi-escapes "^4.2.1" - chalk "^2.4.2" - consola "^2.10.0" - figures "^3.0.0" + chalk "^4.1.0" + consola "^2.15.3" pretty-time "^1.1.0" - std-env "^2.2.1" - text-table "^0.2.0" - wrap-ansi "^6.0.0" + std-env "^3.0.1" well-known-symbols@^2.0.0: version "2.0.0" @@ -12599,9 +12499,21 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" which@^2.0.1: version "2.0.2" @@ -12629,7 +12541,7 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -wrap-ansi@^6.0.0, wrap-ansi@^6.2.0: +wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== @@ -12708,7 +12620,7 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xxhashjs@^0.2.1: +xxhashjs@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== @@ -12740,6 +12652,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^1.10.0, yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" diff --git a/dbrepo-user-service/Dockerfile b/dbrepo-user-service/Dockerfile index 58faa272f64d684f94956b9493202599fb36a547..4255e803ee5c8f0c4a1f39b1890027a8a716a5df 100644 --- a/dbrepo-user-service/Dockerfile +++ b/dbrepo-user-service/Dockerfile @@ -3,7 +3,8 @@ FROM dbrepo-metadata-db:latest as dependency MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> ###### SECOND STAGE ###### -FROM maven:slim as build +FROM maven:3-openjdk-17 as build +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> COPY ./pom.xml ./ @@ -19,13 +20,16 @@ COPY ./report ./report RUN mvn -q clean package -DskipTests ###### THIRD STAGE ###### -FROM openjdk:11-jre-slim as runtime +FROM openjdk:17-alpine as runtime +MAINTAINER Martin Weise <martin.weise@tuwien.ac.at> + +RUN apk --no-cache add bash ENV METADATA_DB=fda ENV METADATA_USERNAME=root ENV METADATA_PASSWORD=dbrepo -ENV GATEWAY_ENDPOINT=http://gateway-service:9095 -ENV JWT_ISSUER=http://localhost:8080/realms/dbrepo +ENV GATEWAY_ENDPOINT=http://gateway-service +ENV JWT_ISSUER=http://localhost/realms/dbrepo ENV JWT_PUBKEY=public-key ENV LOG_LEVEL=debug ENV DEFAULT_ROLE=default-researcher-roles diff --git a/dbrepo-user-service/pom.xml b/dbrepo-user-service/pom.xml index 771332a592e7639c9b81d897066b83d2c4ddbae0..f1ae609dcab5e95ec63de47944bff6e0f0dac174 100644 --- a/dbrepo-user-service/pom.xml +++ b/dbrepo-user-service/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.3.10.RELEASE</version> + <version>3.0.6</version> </parent> <groupId>at.tuwien</groupId> @@ -39,19 +39,19 @@ </modules> <properties> - <java.version>11</java.version> - <spring-cloud.version>3.0.1</spring-cloud.version> - <mapstruct.version>1.4.2.Final</mapstruct.version> - <docker.version>3.2.7</docker.version> - <testcontainers.version>1.15.2</testcontainers.version> - <swagger.version>2.1.7</swagger.version> - <springfox.version>3.0.0</springfox.version> - <jacoco.version>0.8.7</jacoco.version> - <opencsv.version>5.4</opencsv.version> - <hibernate-c3po.version>5.6.3.Final</hibernate-c3po.version> - <maven-report.version>3.0.0</maven-report.version> + <java.version>17</java.version> + <spring-cloud.version>4.0.2</spring-cloud.version> + <mapstruct.version>1.5.5.Final</mapstruct.version> + <docker.version>3.3.0</docker.version> + <swagger.version>2.2.9</swagger.version> + <jacoco.version>0.8.10</jacoco.version> <jwt.version>4.3.0</jwt.version> + <hibernate-c3po.version>5.6.3.Final</hibernate-c3po.version> + <opencsv.version>5.7.1</opencsv.version> + <super-csv.version>2.4.0</super-csv.version> + <jsql.version>4.6</jsql.version> <keycloak.version>21.0.2</keycloak.version> + <hibernate.version>6.2.2.Final</hibernate.version> </properties> <dependencies> @@ -71,7 +71,7 @@ <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> - <dependency><!-- https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes#validation-starter-no-longer-included-in-web-starters --> + <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> @@ -160,11 +160,6 @@ <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-test</artifactId> - <scope>test</scope> - </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> @@ -188,17 +183,6 @@ <artifactId>mapstruct</artifactId> <version>${mapstruct.version}</version> </dependency> - <!-- Gateway --> - <dependency> - <groupId>org.projectreactor</groupId> - <artifactId>reactor-spring</artifactId> - <version>1.0.1.RELEASE</version> - </dependency> - <dependency> - <groupId>javax.ws.rs</groupId> - <artifactId>javax.ws.rs-api</artifactId> - <version>2.1.1</version> - </dependency> </dependencies> <build> diff --git a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java index b2aa2e79ac5c1a350b8815c85c3e07719b88f2cb..f83b023b7d1bb1eff0bcad07cf4642fb781a60c6 100644 --- a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java +++ b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/endpoint/UserEndpoint.java @@ -1,7 +1,6 @@ package at.tuwien.endpoint; import at.tuwien.api.auth.SignupRequestDto; -import at.tuwien.api.container.ContainerBriefDto; import at.tuwien.api.error.ApiErrorDto; import at.tuwien.api.user.*; import at.tuwien.config.AuthenticationConfig; @@ -28,8 +27,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; import java.security.Principal; import java.util.List; import java.util.UUID; diff --git a/dbrepo-user-service/rest-service/src/main/resources/application-local.yml b/dbrepo-user-service/rest-service/src/main/resources/application-local.yml index 6a5a1c57f83af9ee6edf53f90bc9f2e64e31fc39..e15f94b2cc50f9c62e045667cb5940994a29a7cb 100644 --- a/dbrepo-user-service/rest-service/src/main/resources/application-local.yml +++ b/dbrepo-user-service/rest-service/src/main/resources/application-local.yml @@ -22,8 +22,13 @@ spring: name: user-service rabbitmq: host: localhost + virtual-host: dbrepo username: fda password: fda + elasticsearch: + password: elastic + username: elastic + uris: http://localhost:9200 cloud: loadbalancer.ribbon.enabled: false management.endpoints.web.exposure.include: health,info,prometheus @@ -35,19 +40,10 @@ logging: root: warn at.tuwien.: trace org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: user-service - non-secure-port: 9098 - client.serviceUrl.defaultZone: http://localhost:9090/eureka/ fda: - elastic: - endpoint: localhost:9200 - username: elastic - password: elastic ready.path: ./ready - gateway.endpoint: http://localhost:9095 + gateway.endpoint: http://localhost default_role: default-researcher-roles jwt: - issuer: https://localhost:8443/realms/dbrepo + issuer: http://localhost/realms/dbrepo public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB \ No newline at end of file diff --git a/dbrepo-user-service/rest-service/src/main/resources/application.yml b/dbrepo-user-service/rest-service/src/main/resources/application.yml index f0606a3bf70aa251c5870c345172c7dee2d2d721..3ff5be6c907e573889250c970fdadec733235b22 100644 --- a/dbrepo-user-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-user-service/rest-service/src/main/resources/application.yml @@ -22,8 +22,13 @@ spring: name: user-service rabbitmq: host: broker-service + virtual-host: dbrepo username: "${BROKER_USERNAME}" password: "${BROKER_PASSWORD}" + elasticsearch: + password: "${ELASTIC_PASSWORD}" + username: elastic + uris: http://search-service:9200 cloud: loadbalancer.ribbon.enabled: false management.endpoints.web.exposure.include: health,info,prometheus @@ -35,16 +40,7 @@ logging: root: warn at.tuwien.: "${LOG_LEVEL}" org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug -eureka: - instance: - hostname: user-service - non-secure-port: 9098 - client.serviceUrl.defaultZone: http://discovery-service:9090/eureka/ fda: - elastic: - endpoint: search-service:9200 - username: elastic - password: "${ELASTIC_PASSWORD}" ready.path: /ready gateway.endpoint: "${GATEWAY_ENDPOINT}" default_role: "${DEFAULT_ROLE}" diff --git a/dbrepo-user-service/rest-service/src/test/resources/application.properties b/dbrepo-user-service/rest-service/src/test/resources/application.properties index a2cfb02bead54bf217dd0152bb3170dda5e113f1..d2ef7c7093608f1e7f58be83ca2e045c65f53a8d 100644 --- a/dbrepo-user-service/rest-service/src/test/resources/application.properties +++ b/dbrepo-user-service/rest-service/src/test/resources/application.properties @@ -9,7 +9,8 @@ spring.cloud.config.discovery.enabled=false spring.cloud.config.enabled=false # internal datasource -spring.datasource.url=jdbc:h2:mem:testdb;DATABASE_TO_UPPER=false;DB_CLOSE_ON_EXIT=FALSE;INIT=RUNSCRIPT FROM './src/test/resources/schema.sql' +# spring 6 fix https://github.com/h2database/h2database/issues/3363 +spring.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=VALUE,KEY;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password diff --git a/dbrepo-user-service/rest-service/src/test/resources/schema.sql b/dbrepo-user-service/rest-service/src/test/resources/schema.sql deleted file mode 100644 index 906d8df808fa8f79c1f7c1c26088c55da6c9ee9b..0000000000000000000000000000000000000000 --- a/dbrepo-user-service/rest-service/src/test/resources/schema.sql +++ /dev/null @@ -1,25 +0,0 @@ -CREATE SCHEMA IF NOT EXISTS `fda`; -SET SCHEMA `fda`; -DROP TABLE IF EXISTS fda.mdb_concepts; -CREATE TABLE IF NOT EXISTS fda.mdb_concepts -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); -DROP TABLE IF EXISTS fda.mdb_units; -CREATE TABLE IF NOT EXISTS fda.mdb_units -( - uri VARCHAR(500) not null, - name VARCHAR(255), - created timestamp NOT NULL DEFAULT NOW(), - created_by bigint, - PRIMARY KEY (uri) -); --- Modified for H2 --- Assume id=1 is invalid --- Assume id=2 is still valid token --- CREATE VIEW IF NOT EXISTS fda.mdb_invalid_tokens AS --- (SELECT `id`, `token_hash`, `creator`, `created`, `expires`, `last_used` FROM fda.`mdb_tokens` WHERE `id` = 1); \ No newline at end of file diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java b/dbrepo-user-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java index b2b01c42ee9868215962426b18b3a70450bff7ac..92b60f4f8a5ed8a566e2504d71b63478b1593f68 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/auth/AuthTokenFilter.java @@ -6,6 +6,10 @@ import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -16,10 +20,6 @@ import org.springframework.security.web.authentication.WebAuthenticationDetailsS import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-user-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java index dd42aa517fb5bda732d39a5660918bbe61cfc6ce..58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java @@ -1,42 +1,45 @@ package at.tuwien.config; +import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.json.jackson.JacksonJsonpMapper; +import co.elastic.clients.transport.ElasticsearchTransport; +import co.elastic.clients.transport.rest_client.RestClientTransport; import lombok.extern.log4j.Log4j2; -import org.elasticsearch.client.RestHighLevelClient; +import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.elasticsearch.client.RestClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.elasticsearch.client.ClientConfiguration; -import org.springframework.data.elasticsearch.client.RestClients; -import org.springframework.data.elasticsearch.core.ElasticsearchOperations; -import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; @Log4j2 @Configuration public class ElasticsearchConfig { - @Value("${fda.elastic.endpoint}") + @Value("${spring.elasticsearch.uris}") private String elasticEndpoint; - @Value("${fda.elastic.username}") + @Value("${spring.elasticsearch.username}") private String elasticUsername; - @Value("${fda.elastic.password}") + @Value("${spring.elasticsearch.password}") private String elasticPassword; @Bean - public RestHighLevelClient client() { + public ElasticsearchClient elasticsearchClient() { log.debug("elastic endpoint={}", elasticEndpoint); - final ClientConfiguration clientConfiguration = ClientConfiguration.builder() - .connectedTo(elasticEndpoint) - .withBasicAuth(elasticUsername, elasticPassword) + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword)); + final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint)) + .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder + .setDefaultCredentialsProvider(credentialsProvider)) .build(); - return RestClients.create(clientConfiguration) - .rest(); - } - - @Bean - public ElasticsearchOperations elasticsearchTemplate() { - return new ElasticsearchRestTemplate(client()); + ElasticsearchTransport transport = new RestClientTransport( + restClient, new JacksonJsonpMapper()); + return new ElasticsearchClient(transport); } } \ No newline at end of file diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/dbrepo-user-service/services/src/main/java/at/tuwien/config/JacksonConfig.java index fba7f99cf2bf1cbb12ac51cd6fd5b80751ff43c1..c4944a469174ad1962d5c54cc483400dbee12f1d 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/config/JacksonConfig.java @@ -19,7 +19,6 @@ public class JacksonConfig { @Bean public ObjectMapper objectMapper() throws JsonProcessingException { final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.findAndRegisterModules(); objectMapper.registerModule(new Jdk8Module()); objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java b/dbrepo-user-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java index 0a2af8f294a81b4e9e133ec7a4ef91c412ca4d17..3f1cf7c1ce8ee31ca780df5040443152d00c915b 100644 --- a/dbrepo-user-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java +++ b/dbrepo-user-service/services/src/main/java/at/tuwien/config/WebSecurityConfig.java @@ -5,18 +5,19 @@ import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; import io.swagger.v3.oas.annotations.security.SecurityScheme; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; +import org.springframework.security.web.util.matcher.OrRequestMatcher; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; @Configuration @EnableWebSecurity @@ -27,15 +28,26 @@ import javax.servlet.http.HttpServletResponse; bearerFormat = "JWT", scheme = "bearer" ) -public class WebSecurityConfig extends WebSecurityConfigurerAdapter { +public class WebSecurityConfig { @Bean public AuthTokenFilter authTokenFilter() { return new AuthTokenFilter(); } - @Override - protected void configure(HttpSecurity http) throws Exception { + @Bean + public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + final OrRequestMatcher internalEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/actuator/prometheus/**", "GET") + ); + final OrRequestMatcher publicEndpoints = new OrRequestMatcher( + new AntPathRequestMatcher("/api/user/**", "GET"), + new AntPathRequestMatcher("/api/user/**", "POST"), + new AntPathRequestMatcher("/v3/api-docs.yaml"), + new AntPathRequestMatcher("/v3/api-docs/**"), + new AntPathRequestMatcher("/swagger-ui/**"), + new AntPathRequestMatcher("/swagger-ui.html") + ); /* enable CORS and disable CSRF */ http = http.cors().and().csrf().disable(); /* set session management to stateless */ @@ -54,22 +66,18 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { } ).and(); /* set permissions on endpoints */ - http.authorizeRequests() + http.authorizeHttpRequests() /* our internal endpoints */ - .antMatchers(HttpMethod.GET, "/actuator/prometheus/**").permitAll() + .requestMatchers(internalEndpoints).permitAll() /* our public endpoints */ - .antMatchers(HttpMethod.GET, "/api/user/**").permitAll() - .antMatchers(HttpMethod.POST, "/api/user/**").permitAll() - .antMatchers("/v3/api-docs.yaml", - "/v3/api-docs/**", - "/swagger-ui/**", - "/swagger-ui.html").permitAll() + .requestMatchers(publicEndpoints).permitAll() /* our private endpoints */ .anyRequest().authenticated(); /* add JWT token filter */ http.addFilterBefore(authTokenFilter(), UsernamePasswordAuthenticationFilter.class ); + return http.build(); } @Bean @@ -77,7 +85,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); - config.addAllowedOrigin("*"); + config.addAllowedOriginPattern("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); diff --git a/dbrepo.conf b/dbrepo.conf new file mode 100644 index 0000000000000000000000000000000000000000..e972bfcd581b9c95d82ac18eb99870a197df5a56 --- /dev/null +++ b/dbrepo.conf @@ -0,0 +1,280 @@ +client_max_body_size 2G; + +resolver 127.0.0.11 valid=30s; # docker dns + +upstream authentication { + server authentication-service:8080; +} + +upstream user { + server user-service:9098; +} + +upstream broker { + server broker-service:15672; +} + +upstream analyse { + server analyse-service:5000; +} + +upstream metadata { + server metadata-service:9099; +} + +upstream identifier { + server identifier-service:9096; +} + +upstream query { + server query-service:9093; +} + +upstream table { + server table-service:9094; +} + +upstream database { + server database-service:9092; +} + +upstream container { + server container-service:9091; +} + +upstream semantics { + server semantics-service:5010; +} + +upstream search { + server search-service:9200; +} + +upstream ui { + server ui:3000; +} + +server { + listen 80 default_server; + server_name _; + + location /api/auth { + rewrite /api/auth/(.*) /$1 break; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://authentication; + proxy_read_timeout 90; + } + + location /api/user { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://user; + proxy_read_timeout 90; + } + + location /api/broker { + rewrite /api/broker/(.*) /api/$1 break; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://broker; + proxy_read_timeout 90; + } + + location /api/analyse { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://analyse; + proxy_read_timeout 90; + } + + location /api/oai { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://metadata; + proxy_read_timeout 90; + } + + location /api/identifier { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://identifier; + proxy_read_timeout 90; + } + + location /api/pid { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://identifier; + proxy_read_timeout 90; + } + + location /pid { + rewrite /pid/(.*) /api/pid/$1 break; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://identifier; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database/[0-9]+/query { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://query; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database/[0-9]+/view { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://query; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database/[0-9]+/table/[0-9]+/history { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://query; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database/[0-9]+/table/[0-9]+/data { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://query; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database/[0-9]+/table/[0-9]+/query { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://query; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database/[0-9]+/table/[0-9]+/export { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://query; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database/[0-9]+/table/[0-9]+/consumer { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://query; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database/[0-9]+/version { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://query; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database/[0-9]+/table { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://table; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://database; + proxy_read_timeout 90; + } + + location ~ ^/api/container/[0-9]+/database/[0-9]+/access { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://database; + proxy_read_timeout 90; + } + + location /api/container { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://container; + proxy_read_timeout 90; + } + + location /api/image { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://container; + proxy_read_timeout 90; + } + + location /api/semantics { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://semantics; + proxy_read_timeout 90; + } + + location /retrieve { + rewrite /retrieve/(.*) /$1 break; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://search; + proxy_read_timeout 90; + } + + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://ui; + proxy_read_timeout 90; + } +} diff --git a/docker-compose.dbrepo1.yml b/docker-compose.dbrepo1.yml index b85af3cd4fdd74be65d4e20685fcba9d642ef986..626ed083c1a9e666dec5e229d2c1d6e2ff7c79c1 100644 --- a/docker-compose.dbrepo1.yml +++ b/docker-compose.dbrepo1.yml @@ -68,7 +68,7 @@ services: networks: core: ports: - - "9095:9095" + - "80:80" env_file: - .env depends_on: diff --git a/docker-compose.dbrepo2.yml b/docker-compose.dbrepo2.yml index b45bc9514c464e92ce05c38bfe5d21007951c78c..5efb845c60a549562375e11c53f69713b0c85981 100644 --- a/docker-compose.dbrepo2.yml +++ b/docker-compose.dbrepo2.yml @@ -49,34 +49,6 @@ services: logging: driver: json-file - dbrepo-discovery-service: - restart: "no" - container_name: dbrepo-discovery-service - hostname: discovery-service - image: dbrepo/discovery-service:latest - networks: - core: - env_file: - - .env - logging: - driver: json-file - - dbrepo-gateway-service: - restart: "no" - container_name: dbrepo-gateway-service - hostname: gateway-service - image: dbrepo/gateway-service:latest - networks: - core: - public: - env_file: - - .env - depends_on: - dbrepo-discovery-service: - condition: service_healthy - logging: - driver: json-file - dbrepo-database-service: restart: "no" container_name: dbrepo-database-service @@ -130,8 +102,6 @@ services: volumes: - authentication-service-data:/opt/keycloak/data/ depends_on: - dbrepo-discovery-service: - condition: service_healthy dbrepo-metadata-db: condition: service_healthy logging: @@ -151,7 +121,7 @@ services: - ${SHARED_FILESYSTEM}:/tmp depends_on: dbrepo-broker-service: - condition: service_started + condition: service_healthy dbrepo-table-service: condition: service_healthy dbrepo-authentication-service: @@ -160,7 +130,7 @@ services: driver: json-file dbrepo-table-service: - restart: "no" + restart: on-failure container_name: dbrepo-table-service hostname: table-service image: dbrepo/table-service:latest @@ -178,7 +148,7 @@ services: dbrepo-search-service: condition: service_started dbrepo-broker-service: - condition: service_started + condition: service_healthy logging: driver: json-file @@ -221,7 +191,7 @@ services: driver: json-file dbrepo-analyse-service: - restart: on-failure + restart: "no" container_name: dbrepo-analyse-service hostname: analyse-service image: dbrepo/analyse-service:latest @@ -233,9 +203,6 @@ services: volumes: - ${SHARED_FILESYSTEM}:/tmp - /var/run/docker.sock:/var/run/docker.sock - depends_on: - dbrepo-discovery-service: - condition: service_healthy logging: driver: json-file @@ -271,8 +238,6 @@ services: - ${SHARED_FILESYSTEM}:/tmp - /var/run/docker.sock:/var/run/docker.sock depends_on: - dbrepo-discovery-service: - condition: service_healthy dbrepo-metadata-db: condition: service_healthy dbrepo-authentication-service: @@ -293,8 +258,6 @@ services: env_file: - .env depends_on: - dbrepo-discovery-service: - condition: service_healthy dbrepo-authentication-service: condition: service_healthy volumes: @@ -306,16 +269,17 @@ services: restart: always container_name: dbrepo-search-service hostname: search-service - image: dbrepo/search-service:latest + image: elasticsearch:8.7.1 networks: core: - depends_on: - dbrepo-discovery-service: - condition: service_healthy - ports: - - 9200:9200 env_file: - .env + environment: + discovery.type: "single-node" + ES_JAVA_OPTS: "-Xms2g -Xmx2g" + logger.level: "WARN" + bootstrap.memory_lock: "true" + xpack.security.enabled: "true" volumes: - search-service-data:/usr/share/elasticsearch/data logging: @@ -340,3 +304,46 @@ services: condition: service_healthy logging: driver: json-file + + dbrepo-gateway-service: + restart: "no" + container_name: dbrepo-gateway-service + hostname: gateway-service + image: nginx:alpine + networks: + core: + public: + ports: + - "80:80" + - "443:443" + volumes: + - ./dbrepo.conf:/etc/nginx/conf.d/default.conf + depends_on: + dbrepo-analyse-service: + condition: service_healthy + dbrepo-authentication-service: + condition: service_healthy + dbrepo-broker-service: + condition: service_healthy + dbrepo-container-service: + condition: service_healthy + dbrepo-database-service: + condition: service_healthy + dbrepo-identifier-service: + condition: service_healthy + dbrepo-metadata-service: + condition: service_healthy + dbrepo-query-service: + condition: service_healthy + dbrepo-search-service: + condition: service_started + dbrepo-semantics-service: + condition: service_healthy + dbrepo-table-service: + condition: service_healthy + dbrepo-ui: + condition: service_started + dbrepo-user-service: + condition: service_healthy + logging: + driver: json-file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 8984baecab55922994fb89672234edc276ec221e..821612b5c1de921db6e6130994ef7bb8b38da76c 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -8,6 +8,7 @@ volumes: metadata-db-data: search-service-data: broker-service-data: + authentication-service-data: networks: public: @@ -32,7 +33,7 @@ networks: services: dbrepo-metadata-db: - restart: on-failure + restart: "no" container_name: dbrepo-metadata-db hostname: metadata-db image: dbrepo/metadata-db:1.2 @@ -48,37 +49,8 @@ services: logging: driver: json-file - dbrepo-discovery-service: - restart: on-failure - container_name: dbrepo-discovery-service - hostname: discovery-service - image: dbrepo/discovery-service:1.2 - networks: - core: - env_file: - - .env - logging: - driver: json-file - - dbrepo-gateway-service: - restart: on-failure - container_name: dbrepo-gateway-service - hostname: gateway-service - image: dbrepo/gateway-service:1.2 - networks: - core: - ports: - - "9095:9095" - env_file: - - .env - depends_on: - dbrepo-discovery-service: - condition: service_healthy - logging: - driver: json-file - dbrepo-database-service: - restart: on-failure + restart: "no" container_name: dbrepo-database-service hostname: database-service image: dbrepo/database-service:1.2 @@ -100,7 +72,7 @@ services: driver: json-file dbrepo-container-service: - restart: on-failure + restart: "no" container_name: dbrepo-container-service hostname: container-service image: dbrepo/container-service:1.2 @@ -117,26 +89,27 @@ services: driver: json-file dbrepo-authentication-service: - restart: on-failure + restart: "no" container_name: dbrepo-authentication-service hostname: authentication-service image: dbrepo/authentication-service:1.2 networks: core: + ports: + - "8443:8443" + - "8080:8080" env_file: - .env + volumes: + - authentication-service-data:/opt/keycloak/data/ depends_on: - dbrepo-discovery-service: - condition: service_healthy - dbrepo-broker-service: - condition: service_started dbrepo-metadata-db: condition: service_healthy logging: driver: json-file dbrepo-query-service: - restart: on-failure + restart: "no" container_name: dbrepo-query-service hostname: query-service image: dbrepo/query-service:1.2 @@ -148,6 +121,8 @@ services: volumes: - ${SHARED_FILESYSTEM}:/tmp depends_on: + dbrepo-broker-service: + condition: service_healthy dbrepo-table-service: condition: service_healthy dbrepo-authentication-service: @@ -174,12 +149,12 @@ services: dbrepo-search-service: condition: service_started dbrepo-broker-service: - condition: service_started + condition: service_healthy logging: driver: json-file dbrepo-identifier-service: - restart: on-failure + restart: "no" container_name: dbrepo-identifier-service hostname: identifier-service image: dbrepo/identifier-service:1.2 @@ -198,7 +173,7 @@ services: driver: json-file dbrepo-metadata-service: - restart: on-failure + restart: "no" container_name: dbrepo-metadata-service hostname: metadata-service image: dbrepo/metadata-service:1.2 @@ -207,13 +182,15 @@ services: env_file: - .env depends_on: + dbrepo-authentication-service: + condition: service_healthy dbrepo-metadata-db: - condition: service_started + condition: service_healthy logging: driver: json-file dbrepo-analyse-service: - restart: on-failure + restart: "no" container_name: dbrepo-analyse-service hostname: analyse-service image: dbrepo/analyse-service:1.2 @@ -225,14 +202,30 @@ services: volumes: - ${SHARED_FILESYSTEM}:/tmp - /var/run/docker.sock:/var/run/docker.sock + logging: + driver: json-file + + dbrepo-user-service: + restart: "no" + container_name: dbrepo-user-service + hostname: user-service + image: dbrepo/user-service:1.2 + networks: + core: + ports: + - "9098:9098" + env_file: + - .env depends_on: - dbrepo-discovery-service: + dbrepo-metadata-db: + condition: service_healthy + dbrepo-authentication-service: condition: service_healthy logging: driver: json-file dbrepo-semantics-service: - restart: on-failure + restart: "no" container_name: dbrepo-semantics-service hostname: semantics-service image: dbrepo/semantics-service:1.2 @@ -244,15 +237,15 @@ services: - ${SHARED_FILESYSTEM}:/tmp - /var/run/docker.sock:/var/run/docker.sock depends_on: - dbrepo-discovery-service: - condition: service_healthy dbrepo-metadata-db: condition: service_healthy + dbrepo-authentication-service: + condition: service_healthy logging: driver: json-file dbrepo-broker-service: - restart: on-failure + restart: "no" container_name: dbrepo-broker-service hostname: broker-service image: dbrepo/broker-service:1.2 @@ -263,7 +256,7 @@ services: env_file: - .env depends_on: - dbrepo-discovery-service: + dbrepo-authentication-service: condition: service_healthy volumes: - broker-service-data:/var/lib/rabbitmq/ @@ -274,21 +267,24 @@ services: restart: always container_name: dbrepo-search-service hostname: search-service - image: dbrepo/search-service:1.2 + image: elasticsearch:8.7.1 networks: core: - depends_on: - dbrepo-discovery-service: - condition: service_healthy env_file: - .env + environment: + discovery.type: "single-node" + ES_JAVA_OPTS: "-Xms2g -Xmx2g" + logger.level: "WARN" + bootstrap.memory_lock: "true" + xpack.security.enabled: "true" volumes: - search-service-data:/usr/share/elasticsearch/data logging: driver: json-file dbrepo-ui: - restart: on-failure + restart: "no" container_name: dbrepo-ui hostname: ui image: dbrepo/ui:1.2 @@ -308,3 +304,46 @@ services: condition: service_healthy logging: driver: json-file + + dbrepo-gateway-service: + restart: "no" + container_name: dbrepo-gateway-service + hostname: gateway-service + image: nginx:alpine + networks: + core: + public: + ports: + - "80:80" + - "443:443" + volumes: + - ./dbrepo.conf:/etc/nginx/conf.d/default.conf + depends_on: + dbrepo-analyse-service: + condition: service_healthy + dbrepo-authentication-service: + condition: service_healthy + dbrepo-broker-service: + condition: service_healthy + dbrepo-container-service: + condition: service_healthy + dbrepo-database-service: + condition: service_healthy + dbrepo-identifier-service: + condition: service_healthy + dbrepo-metadata-service: + condition: service_healthy + dbrepo-query-service: + condition: service_healthy + dbrepo-search-service: + condition: service_started + dbrepo-semantics-service: + condition: service_healthy + dbrepo-table-service: + condition: service_healthy + dbrepo-ui: + condition: service_started + dbrepo-user-service: + condition: service_healthy + logging: + driver: json-file diff --git a/docker-compose.yml b/docker-compose.yml index 5a3cd4022d0dd2c4d0796d11e04c8009a4c5f3b7..839aeae2778de5b3bd062c328034283da91c067c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -49,40 +49,6 @@ services: logging: driver: json-file - dbrepo-discovery-service: - restart: "no" - container_name: dbrepo-discovery-service - hostname: discovery-service - build: ./dbrepo-discovery-service - image: dbrepo-discovery-service - networks: - core: - ports: - - "9090:9090" - env_file: - - .env - logging: - driver: json-file - - dbrepo-gateway-service: - restart: "no" - container_name: dbrepo-gateway-service - hostname: gateway-service - build: ./dbrepo-gateway-service - image: dbrepo-gateway-service - networks: - core: - public: - ports: - - "9095:9095" - env_file: - - .env - depends_on: - dbrepo-discovery-service: - condition: service_healthy - logging: - driver: json-file - dbrepo-database-service: restart: "no" container_name: dbrepo-database-service @@ -138,14 +104,12 @@ services: core: ports: - "8443:8443" - - "8081:8080" + - "8080:8080" env_file: - .env volumes: - authentication-service-data:/opt/keycloak/data/ depends_on: - dbrepo-discovery-service: - condition: service_healthy dbrepo-metadata-db: condition: service_healthy logging: @@ -260,9 +224,6 @@ services: volumes: - "/tmp:/tmp" - /var/run/docker.sock:/var/run/docker.sock - depends_on: - dbrepo-discovery-service: - condition: service_healthy logging: driver: json-file @@ -302,8 +263,6 @@ services: - "/tmp:/tmp" - /var/run/docker.sock:/var/run/docker.sock depends_on: - dbrepo-discovery-service: - condition: service_healthy dbrepo-metadata-db: condition: service_healthy dbrepo-authentication-service: @@ -325,8 +284,6 @@ services: env_file: - .env depends_on: - dbrepo-discovery-service: - condition: service_healthy dbrepo-authentication-service: condition: service_healthy volumes: @@ -338,18 +295,20 @@ services: restart: always container_name: dbrepo-search-service hostname: search-service - build: ./dbrepo-search-service - image: dbrepo-search-service + image: elasticsearch:8.7.1 networks: core: - depends_on: - dbrepo-discovery-service: - condition: service_healthy ports: - 9200:9200 - - 9600:9600 env_file: - .env + environment: + discovery.type: "single-node" + ES_JAVA_OPTS: "-Xms2g -Xmx2g" + logger.level: "WARN" + bootstrap.memory_lock: "true" + xpack.security.enabled: "true" + ELASTIC_PASSWORD: "elastic" volumes: - search-service-data:/usr/share/elasticsearch/data logging: @@ -376,28 +335,45 @@ services: logging: driver: json-file - dbrepo-proxy: + dbrepo-gateway-service: restart: "no" - container_name: dbrepo-proxy - hostname: proxy - build: ./dbrepo-proxy - image: dbrepo-proxy + container_name: dbrepo-gateway-service + hostname: gateway-service + image: nginx:alpine networks: core: public: ports: - "80:80" - - "8080:8080" - - "3000:3000" - "443:443" - env_file: - - .env + volumes: + - ./dbrepo.conf:/etc/nginx/conf.d/default.conf depends_on: + dbrepo-analyse-service: + condition: service_healthy + dbrepo-authentication-service: + condition: service_healthy + dbrepo-broker-service: + condition: service_healthy + dbrepo-container-service: + condition: service_healthy + dbrepo-database-service: + condition: service_healthy + dbrepo-identifier-service: + condition: service_healthy + dbrepo-metadata-service: + condition: service_healthy + dbrepo-query-service: + condition: service_healthy dbrepo-search-service: condition: service_started - dbrepo-gateway-service: + dbrepo-semantics-service: + condition: service_healthy + dbrepo-table-service: condition: service_healthy dbrepo-ui: condition: service_started + dbrepo-user-service: + condition: service_healthy logging: driver: json-file