diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 5cc7a44..dd2e164 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -33,6 +33,10 @@ jobs: - name: Lint run: pnpm lint + - name: Set git commit sha + id: revparse + run: | + echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - name: Build run: pnpm build @@ -93,6 +97,10 @@ jobs: if: github.event_name == 'push' && (startsWith(github.event.ref, 'refs/tags/') || startsWith(github.event.ref, 'refs/heads/v0.') || github.event.ref == 'refs/heads/master' || github.event.ref == 'refs/heads/test') steps: - uses: actions/checkout@v3 + - name: Set git commit sha + id: revparse + run: | + echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - name: Cache Docker layers uses: actions/cache@v3 @@ -147,6 +155,8 @@ jobs: labels: ${{ steps.docker_meta.outputs.labels }} cache-from: type=gha cache-to: type=gha + build-args: | + COMMIT_HASH=${{ env.COMMIT_HASH }} - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/Dockerfile b/Dockerfile index 6c6cb4f..2fdb698 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,5 @@ +ARG COMMIT_SHA="" + FROM --platform=$BUILDPLATFORM node:alpine AS builder WORKDIR /app diff --git a/package.json b/package.json index a7222e5..03715ef 100644 --- a/package.json +++ b/package.json @@ -28,22 +28,22 @@ "private": true, "license": "MIT", "dependencies": { - "@babel/runtime": "7.20.7", - "@fontsource/roboto-mono": "4.5.8", + "@babel/runtime": "7.20.13", + "@fontsource/roboto-mono": "4.5.10", "@reach/menu-button": "0.18.0", "@reach/tooltip": "0.18.0", "@reach/visually-hidden": "0.18.0", - "@tanstack/react-query": "4.22.0", - "chart.js": "4.1.2", + "@tanstack/react-query": "4.24.2", + "chart.js": "4.2.0", "clsx": "^1.2.1", - "core-js": "3.27.1", + "core-js": "3.27.2", "date-fns": "2.29.3", - "framer-motion": "8.4.6", + "framer-motion": "8.5.4", "history": "5.3.0", "i18next": "22.4.9", "i18next-browser-languagedetector": "7.0.1", "i18next-http-backend": "2.1.1", - "immer": "9.0.18", + "immer": "9.0.19", "invariant": "^2.2.4", "lodash-es": "^4.17.21", "memoize-one": "6.0.0", @@ -54,8 +54,8 @@ "react-i18next": "12.1.4", "react-icons": "4.7.1", "react-modal": "3.16.1", - "react-router": "6.6.2", - "react-router-dom": "6.6.2", + "react-router": "6.8.0", + "react-router-dom": "6.8.0", "react-switch": "^7.0.0", "react-table": "7.8.0", "react-tabs": "6.0.0", @@ -64,7 +64,7 @@ "recoil": "0.7.6", "regenerator-runtime": "0.13.11", "reselect": "4.1.7", - "tslib": "2.4.1", + "tslib": "2.5.0", "use-asset": "1.0.4", "workbox-core": "6.5.4", "workbox-expiration": "6.5.4", @@ -73,27 +73,27 @@ "workbox-strategies": "6.5.4" }, "devDependencies": { - "@fontsource/inter": "4.5.14", + "@fontsource/inter": "4.5.15", "@types/invariant": "2.2.35", "@types/lodash-es": "4.17.6", - "@types/react": "18.0.26", + "@types/react": "18.0.27", "@types/react-dom": "18.0.10", "@types/react-modal": "3.13.1", "@types/react-window": "1.8.5", - "@typescript-eslint/eslint-plugin": "5.48.2", - "@typescript-eslint/parser": "5.48.2", + "@typescript-eslint/eslint-plugin": "5.49.0", + "@typescript-eslint/parser": "5.49.0", "@vitejs/plugin-react": "3.0.1", "autoprefixer": "10.4.13", - "eslint": "8.32.0", + "eslint": "8.33.0", "eslint-config-airbnb-base": "15.0.0", "eslint-config-prettier": "8.6.0", "eslint-config-react-app": "7.0.1", "eslint-plugin-flowtype": "8.0.3", "eslint-plugin-import": "2.27.5", "eslint-plugin-jsx-a11y": "6.7.1", - "eslint-plugin-react": "7.32.1", + "eslint-plugin-react": "7.32.2", "eslint-plugin-react-hooks": "4.6.0", - "eslint-plugin-simple-import-sort": "^9.0.0", + "eslint-plugin-simple-import-sort": "^10.0.0", "postcss": "8.4.21", "postcss-import": "15.1.0", "postcss-simple-vars": "^7.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9525bea..66703b1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,43 +1,43 @@ lockfileVersion: 5.4 specifiers: - '@babel/runtime': 7.20.7 - '@fontsource/inter': 4.5.14 - '@fontsource/roboto-mono': 4.5.8 + '@babel/runtime': 7.20.13 + '@fontsource/inter': 4.5.15 + '@fontsource/roboto-mono': 4.5.10 '@reach/menu-button': 0.18.0 '@reach/tooltip': 0.18.0 '@reach/visually-hidden': 0.18.0 - '@tanstack/react-query': 4.22.0 + '@tanstack/react-query': 4.24.2 '@types/invariant': 2.2.35 '@types/lodash-es': 4.17.6 - '@types/react': 18.0.26 + '@types/react': 18.0.27 '@types/react-dom': 18.0.10 '@types/react-modal': 3.13.1 '@types/react-window': 1.8.5 - '@typescript-eslint/eslint-plugin': 5.48.2 - '@typescript-eslint/parser': 5.48.2 + '@typescript-eslint/eslint-plugin': 5.49.0 + '@typescript-eslint/parser': 5.49.0 '@vitejs/plugin-react': 3.0.1 autoprefixer: 10.4.13 - chart.js: 4.1.2 + chart.js: 4.2.0 clsx: ^1.2.1 - core-js: 3.27.1 + core-js: 3.27.2 date-fns: 2.29.3 - eslint: 8.32.0 + eslint: 8.33.0 eslint-config-airbnb-base: 15.0.0 eslint-config-prettier: 8.6.0 eslint-config-react-app: 7.0.1 eslint-plugin-flowtype: 8.0.3 eslint-plugin-import: 2.27.5 eslint-plugin-jsx-a11y: 6.7.1 - eslint-plugin-react: 7.32.1 + eslint-plugin-react: 7.32.2 eslint-plugin-react-hooks: 4.6.0 - eslint-plugin-simple-import-sort: ^9.0.0 - framer-motion: 8.4.6 + eslint-plugin-simple-import-sort: ^10.0.0 + framer-motion: 8.5.4 history: 5.3.0 i18next: 22.4.9 i18next-browser-languagedetector: 7.0.1 i18next-http-backend: 2.1.1 - immer: 9.0.18 + immer: 9.0.19 invariant: ^2.2.4 lodash-es: ^4.17.21 memoize-one: 6.0.0 @@ -52,8 +52,8 @@ specifiers: react-i18next: 12.1.4 react-icons: 4.7.1 react-modal: 3.16.1 - react-router: 6.6.2 - react-router-dom: 6.6.2 + react-router: 6.8.0 + react-router-dom: 6.8.0 react-switch: ^7.0.0 react-table: 7.8.0 react-tabs: 6.0.0 @@ -64,7 +64,7 @@ specifiers: reselect: 4.1.7 resize-observer-polyfill: ^1.5.1 sass: 1.57.1 - tslib: 2.4.1 + tslib: 2.5.0 typescript: 4.9.4 use-asset: 1.0.4 vite: 4.0.4 @@ -76,22 +76,22 @@ specifiers: workbox-strategies: 6.5.4 dependencies: - '@babel/runtime': 7.20.7 - '@fontsource/roboto-mono': 4.5.8 + '@babel/runtime': 7.20.13 + '@fontsource/roboto-mono': 4.5.10 '@reach/menu-button': 0.18.0_biqbaboplfbrettd7655fr4n2y '@reach/tooltip': 0.18.0_biqbaboplfbrettd7655fr4n2y '@reach/visually-hidden': 0.18.0_biqbaboplfbrettd7655fr4n2y - '@tanstack/react-query': 4.22.0_biqbaboplfbrettd7655fr4n2y - chart.js: 4.1.2 + '@tanstack/react-query': 4.24.2_biqbaboplfbrettd7655fr4n2y + chart.js: 4.2.0 clsx: 1.2.1 - core-js: 3.27.1 + core-js: 3.27.2 date-fns: 2.29.3 - framer-motion: 8.4.6_biqbaboplfbrettd7655fr4n2y + framer-motion: 8.5.4_biqbaboplfbrettd7655fr4n2y history: 5.3.0 i18next: 22.4.9 i18next-browser-languagedetector: 7.0.1 i18next-http-backend: 2.1.1 - immer: 9.0.18 + immer: 9.0.19 invariant: 2.2.4 lodash-es: 4.17.21 memoize-one: 6.0.0 @@ -102,8 +102,8 @@ dependencies: react-i18next: 12.1.4_iakk3dtjhjpukdoa4oua5khgci react-icons: 4.7.1_react@18.2.0 react-modal: 3.16.1_biqbaboplfbrettd7655fr4n2y - react-router: 6.6.2_react@18.2.0 - react-router-dom: 6.6.2_biqbaboplfbrettd7655fr4n2y + react-router: 6.8.0_react@18.2.0 + react-router-dom: 6.8.0_biqbaboplfbrettd7655fr4n2y react-switch: 7.0.0_biqbaboplfbrettd7655fr4n2y react-table: 7.8.0_react@18.2.0 react-tabs: 6.0.0_react@18.2.0 @@ -112,7 +112,7 @@ dependencies: recoil: 0.7.6_biqbaboplfbrettd7655fr4n2y regenerator-runtime: 0.13.11 reselect: 4.1.7 - tslib: 2.4.1 + tslib: 2.5.0 use-asset: 1.0.4_react@18.2.0 workbox-core: 6.5.4 workbox-expiration: 6.5.4 @@ -121,27 +121,27 @@ dependencies: workbox-strategies: 6.5.4 devDependencies: - '@fontsource/inter': 4.5.14 + '@fontsource/inter': 4.5.15 '@types/invariant': 2.2.35 '@types/lodash-es': 4.17.6 - '@types/react': 18.0.26 + '@types/react': 18.0.27 '@types/react-dom': 18.0.10 '@types/react-modal': 3.13.1 '@types/react-window': 1.8.5 - '@typescript-eslint/eslint-plugin': 5.48.2_caon6io6stgpr7lz2rtbhekxqy - '@typescript-eslint/parser': 5.48.2_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/eslint-plugin': 5.49.0_rsaczafy73x3xqauzesvzbsgzy + '@typescript-eslint/parser': 5.49.0_zkdaqh7it7uc4cvz2haft7rc6u '@vitejs/plugin-react': 3.0.1_vite@4.0.4 autoprefixer: 10.4.13_postcss@8.4.21 - eslint: 8.32.0 - eslint-config-airbnb-base: 15.0.0_ps7hf4l2dvbuxvtusmrfhmzsba - eslint-config-prettier: 8.6.0_eslint@8.32.0 - eslint-config-react-app: 7.0.1_7uibuqfxkfaozanbtbziikiqje - eslint-plugin-flowtype: 8.0.3_eslint@8.32.0 - eslint-plugin-import: 2.27.5_2l6piu6guil2f63lj3qmhzbnn4 - eslint-plugin-jsx-a11y: 6.7.1_eslint@8.32.0 - eslint-plugin-react: 7.32.1_eslint@8.32.0 - eslint-plugin-react-hooks: 4.6.0_eslint@8.32.0 - eslint-plugin-simple-import-sort: 9.0.0_eslint@8.32.0 + eslint: 8.33.0 + eslint-config-airbnb-base: 15.0.0_ohdts44xlqyeyrlje4qnefqeay + eslint-config-prettier: 8.6.0_eslint@8.33.0 + eslint-config-react-app: 7.0.1_zkdaqh7it7uc4cvz2haft7rc6u + eslint-plugin-flowtype: 8.0.3_eslint@8.33.0 + eslint-plugin-import: 2.27.5_kf2q37rsxgsj6p2nz45hjttose + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.33.0 + eslint-plugin-react: 7.32.2_eslint@8.33.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.33.0 + eslint-plugin-simple-import-sort: 10.0.0_eslint@8.33.0 postcss: 8.4.21 postcss-import: 15.1.0_postcss@8.4.21 postcss-simple-vars: 7.0.1_postcss@8.4.21 @@ -244,7 +244,7 @@ packages: - supports-color dev: true - /@babel/eslint-parser/7.17.0_qfjls2ypleqfo7nkwor5o7xquq: + /@babel/eslint-parser/7.17.0_km2zq3tgawg7sbqix3kq3n3t7q: resolution: {integrity: sha512-PUEJ7ZBXbRkbq3qqM/jZ2nIuakUBqCYc7Qf52Lj7dlZ6zERnqisdHioL0l4wwQZnmskMeasqUNzLBFKs3nylXA==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: @@ -252,7 +252,7 @@ packages: eslint: ^7.5.0 || ^8.0.0 dependencies: '@babel/core': 7.17.10 - eslint: 8.32.0 + eslint: 8.33.0 eslint-scope: 5.1.1 eslint-visitor-keys: 2.1.0 semver: 6.3.0 @@ -2595,8 +2595,8 @@ packages: - supports-color dev: true - /@babel/runtime/7.20.7: - resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==} + /@babel/runtime/7.20.13: + resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 @@ -2890,7 +2890,7 @@ packages: ajv: 6.12.6 debug: 4.3.4 espree: 9.4.1 - globals: 13.19.0 + globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -2900,12 +2900,12 @@ packages: - supports-color dev: true - /@fontsource/inter/4.5.14: - resolution: {integrity: sha512-JDC9AocdPLuGsASkvWw9hS5gtHE7K9dOwL98XLrk5yjYqxy4uVnScG58NUvFMJDVJRl/7c8Wnap6PEs+7Zvj1Q==} + /@fontsource/inter/4.5.15: + resolution: {integrity: sha512-FzleM9AxZQK2nqsTDtBiY0PMEVWvnKnuu2i09+p6DHvrHsuucoV2j0tmw+kAT3L4hvsLdAIDv6MdGehsPIdT+Q==} dev: true - /@fontsource/roboto-mono/4.5.8: - resolution: {integrity: sha512-AW44UkbQD0w1CT5mzDbsvhGZ6/bb0YmZzoELj6Sx8vcVEzcbYGUdt2Dtl5zqlOuYMWQFY1mniwWyVv+Bm/lVxw==} + /@fontsource/roboto-mono/4.5.10: + resolution: {integrity: sha512-KrJdmkqz6DszT2wV/bbhXef4r0hV3B0vw2mAqei8A2kRnvq+gcJLmmIeQ94vu9VEXrUQzos5M9lH1TAAXpRphw==} dev: false /@humanwhocodes/config-array/0.11.8: @@ -2990,7 +2990,7 @@ packages: '@motionone/easing': 10.15.1 '@motionone/types': 10.15.1 '@motionone/utils': 10.15.1 - tslib: 2.4.1 + tslib: 2.5.0 dev: false /@motionone/dom/10.15.5: @@ -3001,14 +3001,14 @@ packages: '@motionone/types': 10.15.1 '@motionone/utils': 10.15.1 hey-listen: 1.0.8 - tslib: 2.4.1 + tslib: 2.5.0 dev: false /@motionone/easing/10.15.1: resolution: {integrity: sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==} dependencies: '@motionone/utils': 10.15.1 - tslib: 2.4.1 + tslib: 2.5.0 dev: false /@motionone/generators/10.15.1: @@ -3016,7 +3016,7 @@ packages: dependencies: '@motionone/types': 10.15.1 '@motionone/utils': 10.15.1 - tslib: 2.4.1 + tslib: 2.5.0 dev: false /@motionone/types/10.15.1: @@ -3028,7 +3028,7 @@ packages: dependencies: '@motionone/types': 10.15.1 hey-listen: 1.0.8 - tslib: 2.4.1 + tslib: 2.5.0 dev: false /@nodelib/fs.scandir/2.1.5: @@ -3191,8 +3191,8 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@remix-run/router/1.2.1: - resolution: {integrity: sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==} + /@remix-run/router/1.3.1: + resolution: {integrity: sha512-+eun1Wtf72RNRSqgU7qM2AMX/oHp+dnx7BHk1qhK5ZHzdHTUU4LA1mGG1vT+jMc8sbhG3orvsfOmryjzx2PzQw==} engines: {node: '>=14'} dev: false @@ -3292,12 +3292,12 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /@tanstack/query-core/4.22.0: - resolution: {integrity: sha512-OeLyBKBQoT265f5G9biReijeP8mBxNFwY7ZUu1dKL+YzqpG5q5z7J/N1eT8aWyKuhyDTiUHuKm5l+oIVzbtrjw==} + /@tanstack/query-core/4.24.2: + resolution: {integrity: sha512-nVX9Pfvash6o3gTquPsUXEcadEO7Rh7i0Aa5iM8gNA2x1HqF5mKXDZBCFQAbnwiJ/0kCxWMaMaqhtzjGWssmNA==} dev: false - /@tanstack/react-query/4.22.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-P9o+HjG42uB/xHR6dMsJaPhtZydSe4v0xdG5G/cEj1oHZAXelMlm67/rYJNQGKgBamKElKogj+HYGF+NY2yHYg==} + /@tanstack/react-query/4.24.2_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-lqpxLhPNJmxshhrevOW7UAlVxMEgh1Fdk6qw1MGd5ZayOKIIQaiYT3jjFVsm+xQA326XNTPF5pfJcrsU4y8aiQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -3308,7 +3308,7 @@ packages: react-native: optional: true dependencies: - '@tanstack/query-core': 4.22.0 + '@tanstack/query-core': 4.24.2 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 use-sync-external-store: 1.2.0_react@18.2.0 @@ -3359,23 +3359,23 @@ packages: /@types/react-dom/18.0.10: resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==} dependencies: - '@types/react': 18.0.26 + '@types/react': 18.0.27 dev: true /@types/react-modal/3.13.1: resolution: {integrity: sha512-iY/gPvTDIy6Z+37l+ibmrY+GTV4KQTHcCyR5FIytm182RQS69G5ps4PH2FxtC7bAQ2QRHXMevsBgck7IQruHNg==} dependencies: - '@types/react': 18.0.26 + '@types/react': 18.0.27 dev: true /@types/react-window/1.8.5: resolution: {integrity: sha512-V9q3CvhC9Jk9bWBOysPGaWy/Z0lxYcTXLtLipkt2cnRj1JOSFNF7wqGpkScSXMgBwC+fnVRg/7shwgddBG5ICw==} dependencies: - '@types/react': 18.0.26 + '@types/react': 18.0.27 dev: true - /@types/react/18.0.26: - resolution: {integrity: sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==} + /@types/react/18.0.27: + resolution: {integrity: sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 @@ -3400,8 +3400,8 @@ packages: resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} dev: true - /@typescript-eslint/eslint-plugin/5.48.2_caon6io6stgpr7lz2rtbhekxqy: - resolution: {integrity: sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg==} + /@typescript-eslint/eslint-plugin/5.49.0_rsaczafy73x3xqauzesvzbsgzy: + resolution: {integrity: sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -3411,12 +3411,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.48.2_7uibuqfxkfaozanbtbziikiqje - '@typescript-eslint/scope-manager': 5.48.2 - '@typescript-eslint/type-utils': 5.48.2_7uibuqfxkfaozanbtbziikiqje - '@typescript-eslint/utils': 5.48.2_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/parser': 5.49.0_zkdaqh7it7uc4cvz2haft7rc6u + '@typescript-eslint/scope-manager': 5.49.0 + '@typescript-eslint/type-utils': 5.49.0_zkdaqh7it7uc4cvz2haft7rc6u + '@typescript-eslint/utils': 5.49.0_zkdaqh7it7uc4cvz2haft7rc6u debug: 4.3.4 - eslint: 8.32.0 + eslint: 8.33.0 ignore: 5.2.4 natural-compare-lite: 1.4.0 regexpp: 3.2.0 @@ -3427,21 +3427,21 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils/5.22.0_7uibuqfxkfaozanbtbziikiqje: + /@typescript-eslint/experimental-utils/5.22.0_zkdaqh7it7uc4cvz2haft7rc6u: resolution: {integrity: sha512-rKxoCUtAHwEH6IcAoVpqipY6Th+YKW7WFspAKu0IFdbdKZpveFBeqxxE9Xn+GWikhq1o03V3VXbxIe+GdhggiQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.22.0_7uibuqfxkfaozanbtbziikiqje - eslint: 8.32.0 + '@typescript-eslint/utils': 5.22.0_zkdaqh7it7uc4cvz2haft7rc6u + eslint: 8.33.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser/5.48.2_7uibuqfxkfaozanbtbziikiqje: - resolution: {integrity: sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw==} + /@typescript-eslint/parser/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u: + resolution: {integrity: sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3450,11 +3450,11 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.48.2 - '@typescript-eslint/types': 5.48.2 - '@typescript-eslint/typescript-estree': 5.48.2_typescript@4.9.4 + '@typescript-eslint/scope-manager': 5.49.0 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.9.4 debug: 4.3.4 - eslint: 8.32.0 + eslint: 8.33.0 typescript: 4.9.4 transitivePeerDependencies: - supports-color @@ -3468,16 +3468,16 @@ packages: '@typescript-eslint/visitor-keys': 5.22.0 dev: true - /@typescript-eslint/scope-manager/5.48.2: - resolution: {integrity: sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw==} + /@typescript-eslint/scope-manager/5.49.0: + resolution: {integrity: sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.48.2 - '@typescript-eslint/visitor-keys': 5.48.2 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/visitor-keys': 5.49.0 dev: true - /@typescript-eslint/type-utils/5.48.2_7uibuqfxkfaozanbtbziikiqje: - resolution: {integrity: sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew==} + /@typescript-eslint/type-utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u: + resolution: {integrity: sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -3486,10 +3486,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.48.2_typescript@4.9.4 - '@typescript-eslint/utils': 5.48.2_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.9.4 + '@typescript-eslint/utils': 5.49.0_zkdaqh7it7uc4cvz2haft7rc6u debug: 4.3.4 - eslint: 8.32.0 + eslint: 8.33.0 tsutils: 3.21.0_typescript@4.9.4 typescript: 4.9.4 transitivePeerDependencies: @@ -3501,8 +3501,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types/5.48.2: - resolution: {integrity: sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA==} + /@typescript-eslint/types/5.49.0: + resolution: {integrity: sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -3527,8 +3527,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree/5.48.2_typescript@4.9.4: - resolution: {integrity: sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg==} + /@typescript-eslint/typescript-estree/5.49.0_typescript@4.9.4: + resolution: {integrity: sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -3536,8 +3536,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.48.2 - '@typescript-eslint/visitor-keys': 5.48.2 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/visitor-keys': 5.49.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -3548,7 +3548,7 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.22.0_7uibuqfxkfaozanbtbziikiqje: + /@typescript-eslint/utils/5.22.0_zkdaqh7it7uc4cvz2haft7rc6u: resolution: {integrity: sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3558,28 +3558,28 @@ packages: '@typescript-eslint/scope-manager': 5.22.0 '@typescript-eslint/types': 5.22.0 '@typescript-eslint/typescript-estree': 5.22.0_typescript@4.9.4 - eslint: 8.32.0 + eslint: 8.33.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.32.0 + eslint-utils: 3.0.0_eslint@8.33.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils/5.48.2_7uibuqfxkfaozanbtbziikiqje: - resolution: {integrity: sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow==} + /@typescript-eslint/utils/5.49.0_zkdaqh7it7uc4cvz2haft7rc6u: + resolution: {integrity: sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.48.2 - '@typescript-eslint/types': 5.48.2 - '@typescript-eslint/typescript-estree': 5.48.2_typescript@4.9.4 - eslint: 8.32.0 + '@typescript-eslint/scope-manager': 5.49.0 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.9.4 + eslint: 8.33.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.32.0 + eslint-utils: 3.0.0_eslint@8.33.0 semver: 7.3.8 transitivePeerDependencies: - supports-color @@ -3594,11 +3594,11 @@ packages: eslint-visitor-keys: 3.3.0 dev: true - /@typescript-eslint/visitor-keys/5.48.2: - resolution: {integrity: sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ==} + /@typescript-eslint/visitor-keys/5.49.0: + resolution: {integrity: sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.48.2 + '@typescript-eslint/types': 5.49.0 eslint-visitor-keys: 3.3.0 dev: true @@ -3618,12 +3618,12 @@ packages: - supports-color dev: true - /acorn-jsx/5.3.2_acorn@8.8.1: + /acorn-jsx/5.3.2_acorn@8.8.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.1 + acorn: 8.8.2 dev: true /acorn/8.8.1: @@ -3632,6 +3632,12 @@ packages: hasBin: true dev: true + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -3730,7 +3736,7 @@ packages: define-properties: 1.1.4 es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true /ast-types-flow/0.0.7: @@ -3788,7 +3794,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 cosmiconfig: 7.0.1 resolve: 1.22.1 dev: true @@ -3886,7 +3892,7 @@ packages: '@babel/preset-env': 7.17.10_@babel+core@7.17.10 '@babel/preset-react': 7.16.7_@babel+core@7.17.10 '@babel/preset-typescript': 7.16.7_@babel+core@7.17.10 - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: @@ -3980,8 +3986,8 @@ packages: engines: {node: '>=6'} dev: true - /chart.js/4.1.2: - resolution: {integrity: sha512-9L1w6WLPq6ztiWVVOYtDtpo0CUsBKDWPrUEdwChAyzczaikqeSwNKEv3QpJ7EO4ICcLSi6UDVhgvcnUhRJidRA==} + /chart.js/4.2.0: + resolution: {integrity: sha512-wbtcV+QKeH0F7gQZaCJEIpsNriFheacouJQTVIjITi3eQA8bTlIBoknz0+dgV79aeKLNMAX+nDslIVE/nJ3rzA==} engines: {pnpm: ^7.0.0} dependencies: '@kurkle/color': 0.3.2 @@ -4068,8 +4074,8 @@ packages: browserslist: 4.21.4 dev: true - /core-js/3.27.1: - resolution: {integrity: sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==} + /core-js/3.27.2: + resolution: {integrity: sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==} requiresBuild: true dev: false @@ -4404,7 +4410,7 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-airbnb-base/15.0.0_ps7hf4l2dvbuxvtusmrfhmzsba: + /eslint-config-airbnb-base/15.0.0_ohdts44xlqyeyrlje4qnefqeay: resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -4412,23 +4418,23 @@ packages: eslint-plugin-import: ^2.25.2 dependencies: confusing-browser-globals: 1.0.11 - eslint: 8.32.0 - eslint-plugin-import: 2.27.5_2l6piu6guil2f63lj3qmhzbnn4 + eslint: 8.33.0 + eslint-plugin-import: 2.27.5_kf2q37rsxgsj6p2nz45hjttose object.assign: 4.1.2 object.entries: 1.1.5 semver: 6.3.0 dev: true - /eslint-config-prettier/8.6.0_eslint@8.32.0: + /eslint-config-prettier/8.6.0_eslint@8.33.0: resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.32.0 + eslint: 8.33.0 dev: true - /eslint-config-react-app/7.0.1_7uibuqfxkfaozanbtbziikiqje: + /eslint-config-react-app/7.0.1_zkdaqh7it7uc4cvz2haft7rc6u: resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -4439,20 +4445,20 @@ packages: optional: true dependencies: '@babel/core': 7.17.10 - '@babel/eslint-parser': 7.17.0_qfjls2ypleqfo7nkwor5o7xquq + '@babel/eslint-parser': 7.17.0_km2zq3tgawg7sbqix3kq3n3t7q '@rushstack/eslint-patch': 1.1.3 - '@typescript-eslint/eslint-plugin': 5.48.2_caon6io6stgpr7lz2rtbhekxqy - '@typescript-eslint/parser': 5.48.2_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/eslint-plugin': 5.49.0_rsaczafy73x3xqauzesvzbsgzy + '@typescript-eslint/parser': 5.49.0_zkdaqh7it7uc4cvz2haft7rc6u babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 - eslint: 8.32.0 - eslint-plugin-flowtype: 8.0.3_eslint@8.32.0 - eslint-plugin-import: 2.27.5_2l6piu6guil2f63lj3qmhzbnn4 - eslint-plugin-jest: 25.7.0_rjpbdoflvuixsozdbd4eqx6o5m - eslint-plugin-jsx-a11y: 6.7.1_eslint@8.32.0 - eslint-plugin-react: 7.32.1_eslint@8.32.0 - eslint-plugin-react-hooks: 4.6.0_eslint@8.32.0 - eslint-plugin-testing-library: 5.4.0_7uibuqfxkfaozanbtbziikiqje + eslint: 8.33.0 + eslint-plugin-flowtype: 8.0.3_eslint@8.33.0 + eslint-plugin-import: 2.27.5_kf2q37rsxgsj6p2nz45hjttose + eslint-plugin-jest: 25.7.0_l2opirhikxcqtp2zjemjltgoti + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.33.0 + eslint-plugin-react: 7.32.2_eslint@8.33.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.33.0 + eslint-plugin-testing-library: 5.4.0_zkdaqh7it7uc4cvz2haft7rc6u typescript: 4.9.4 transitivePeerDependencies: - '@babel/plugin-syntax-flow' @@ -4473,7 +4479,7 @@ packages: - supports-color dev: true - /eslint-module-utils/2.7.4_kvyj4idustix6trhy5lyssy2sq: + /eslint-module-utils/2.7.4_a5jfphyyegozc5blomb7uu4w7e: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -4494,15 +4500,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.48.2_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/parser': 5.49.0_zkdaqh7it7uc4cvz2haft7rc6u debug: 3.2.7 - eslint: 8.32.0 + eslint: 8.33.0 eslint-import-resolver-node: 0.3.7 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-flowtype/8.0.3_eslint@8.32.0: + /eslint-plugin-flowtype/8.0.3_eslint@8.33.0: resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -4510,12 +4516,12 @@ packages: '@babel/plugin-transform-react-jsx': ^7.14.9 eslint: ^8.1.0 dependencies: - eslint: 8.32.0 + eslint: 8.33.0 lodash: 4.17.21 string-natural-compare: 3.0.1 dev: true - /eslint-plugin-import/2.27.5_2l6piu6guil2f63lj3qmhzbnn4: + /eslint-plugin-import/2.27.5_kf2q37rsxgsj6p2nz45hjttose: resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -4525,15 +4531,15 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.48.2_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/parser': 5.49.0_zkdaqh7it7uc4cvz2haft7rc6u array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.32.0 + eslint: 8.33.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4_kvyj4idustix6trhy5lyssy2sq + eslint-module-utils: 2.7.4_a5jfphyyegozc5blomb7uu4w7e has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -4548,7 +4554,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest/25.7.0_rjpbdoflvuixsozdbd4eqx6o5m: + /eslint-plugin-jest/25.7.0_l2opirhikxcqtp2zjemjltgoti: resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -4561,21 +4567,21 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.48.2_caon6io6stgpr7lz2rtbhekxqy - '@typescript-eslint/experimental-utils': 5.22.0_7uibuqfxkfaozanbtbziikiqje - eslint: 8.32.0 + '@typescript-eslint/eslint-plugin': 5.49.0_rsaczafy73x3xqauzesvzbsgzy + '@typescript-eslint/experimental-utils': 5.22.0_zkdaqh7it7uc4cvz2haft7rc6u + eslint: 8.33.0 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y/6.7.1_eslint@8.32.0: + /eslint-plugin-jsx-a11y/6.7.1_eslint@8.33.0: resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 aria-query: 5.1.3 array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 @@ -4584,7 +4590,7 @@ packages: axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.32.0 + eslint: 8.33.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.5 @@ -4594,17 +4600,17 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-react-hooks/4.6.0_eslint@8.32.0: + /eslint-plugin-react-hooks/4.6.0_eslint@8.33.0: resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.32.0 + eslint: 8.33.0 dev: true - /eslint-plugin-react/7.32.1_eslint@8.32.0: - resolution: {integrity: sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==} + /eslint-plugin-react/7.32.2_eslint@8.33.0: + resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -4613,7 +4619,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.32.0 + eslint: 8.33.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -4627,22 +4633,22 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-simple-import-sort/9.0.0_eslint@8.32.0: - resolution: {integrity: sha512-PtrLjyXP8kjRneWT1n0b99y/2Fyup37we7FVoWsI61/O7x4ztLohzhep/pxI/cYlECr/cQ2j6utckdvWpVwXNA==} + /eslint-plugin-simple-import-sort/10.0.0_eslint@8.33.0: + resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.32.0 + eslint: 8.33.0 dev: true - /eslint-plugin-testing-library/5.4.0_7uibuqfxkfaozanbtbziikiqje: + /eslint-plugin-testing-library/5.4.0_zkdaqh7it7uc4cvz2haft7rc6u: resolution: {integrity: sha512-XjxIf4g33KaZXxRNbR33+0WcRQ/zt8N0R58IY6/kkHnrY6zPsC1gs3u5cTZr5eUmCZN/sjoPak3uF5vHGKg2wg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.48.2_7uibuqfxkfaozanbtbziikiqje - eslint: 8.32.0 + '@typescript-eslint/utils': 5.49.0_zkdaqh7it7uc4cvz2haft7rc6u + eslint: 8.33.0 transitivePeerDependencies: - supports-color - typescript @@ -4664,13 +4670,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.32.0: + /eslint-utils/3.0.0_eslint@8.33.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.32.0 + eslint: 8.33.0 eslint-visitor-keys: 2.1.0 dev: true @@ -4684,8 +4690,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.32.0: - resolution: {integrity: sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==} + /eslint/8.33.0: + resolution: {integrity: sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: @@ -4700,7 +4706,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.32.0 + eslint-utils: 3.0.0_eslint@8.33.0 eslint-visitor-keys: 3.3.0 espree: 9.4.1 esquery: 1.4.0 @@ -4709,14 +4715,14 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.19.0 + globals: 13.20.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.2.0 + js-sdsl: 4.3.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -4736,8 +4742,8 @@ packages: resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.1 - acorn-jsx: 5.3.2_acorn@8.8.1 + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 eslint-visitor-keys: 3.3.0 dev: true @@ -4860,8 +4866,8 @@ packages: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true - /framer-motion/8.4.6_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-0GkpTQnhDysG5SiD2VbANtAs8yCXVQLasynVABDTZYI+Qcx1krWg+rfyveM8W78q7AX+8RTsiMz/LJ7YIRZvFw==} + /framer-motion/8.5.4_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-xBVovXUIdpKvRvIPsrSTiyXZUYyct9zarzdVeyzv+V6DFsDpHIuppyOjDO8VM1fBspDn+rUU4ZFZ5yJxLmzebQ==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 @@ -4870,7 +4876,7 @@ packages: hey-listen: 1.0.8 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - tslib: 2.4.1 + tslib: 2.5.0 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 dev: false @@ -4936,6 +4942,14 @@ packages: has-symbols: 1.0.3 dev: true + /get-intrinsic/1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.3 + dev: true + /get-own-enumerable-property-symbols/3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} dev: true @@ -4978,8 +4992,8 @@ packages: engines: {node: '>=4'} dev: true - /globals/13.19.0: - resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} + /globals/13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -5073,7 +5087,7 @@ packages: /history/5.3.0: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 dev: false /html-parse-stringify/3.0.1: @@ -5085,7 +5099,7 @@ packages: /i18next-browser-languagedetector/7.0.1: resolution: {integrity: sha512-Pa5kFwaczXJAeHE56CHG2aWzFBMJNUNghf0Pm4SwSrEMps/PTKqW90EYWlIvhuYStf3Sn1K0vw+gH3+TLdkH1g==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 dev: false /i18next-http-backend/2.1.1: @@ -5099,7 +5113,7 @@ packages: /i18next/22.4.9: resolution: {integrity: sha512-8gWMmUz460KJDQp/ob3MNUX84cVuDRY9PLFPnV8d+Qezz/6dkjxwOaH70xjrCNDO+JrUL25iXfAIN9wUkInNZw==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 dev: false /idb/7.0.2: @@ -5114,8 +5128,8 @@ packages: engines: {node: '>= 4'} dev: true - /immer/9.0.18: - resolution: {integrity: sha512-eAPNpsj7Ax1q6Y/3lm2PmlwRcFzpON7HSNQ3ru5WQH1/PSpnyed/HpNOELl2CxLKoj4r+bAHgdyKqW5gc2Se1A==} + /immer/9.0.19: + resolution: {integrity: sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==} dev: false /immutable/4.2.2: @@ -5379,8 +5393,8 @@ packages: supports-color: 7.2.0 dev: true - /js-sdsl/4.2.0: - resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} + /js-sdsl/4.3.0: + resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} dev: true /js-tokens/4.0.0: @@ -5929,7 +5943,7 @@ packages: react-native: optional: true dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 html-parse-stringify: 3.0.1 i18next: 22.4.9 react: 18.2.0 @@ -5971,26 +5985,26 @@ packages: engines: {node: '>=0.10.0'} dev: true - /react-router-dom/6.6.2_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA==} + /react-router-dom/6.8.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-hQouduSTywGJndE86CXJ2h7YEy4HYC6C/uh19etM+79FfQ6cFFFHnHyDlzO4Pq0eBUI96E4qVE5yUjA00yJZGQ==} engines: {node: '>=14'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: - '@remix-run/router': 1.2.1 + '@remix-run/router': 1.3.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-router: 6.6.2_react@18.2.0 + react-router: 6.8.0_react@18.2.0 dev: false - /react-router/6.6.2_react@18.2.0: - resolution: {integrity: sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ==} + /react-router/6.8.0_react@18.2.0: + resolution: {integrity: sha512-760bk7y3QwabduExtudhWbd88IBbuD1YfwzpuDUAlJUJ7laIIcqhMvdhSVh1Fur1PE8cGl84L0dxhR3/gvHF7A==} engines: {node: '>=14'} peerDependencies: react: '>=16.8' dependencies: - '@remix-run/router': 1.2.1 + '@remix-run/router': 1.3.1 react: 18.2.0 dev: false @@ -6039,7 +6053,7 @@ packages: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 memoize-one: 5.2.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -6106,13 +6120,13 @@ packages: /regenerator-transform/0.15.0: resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 dev: true /regenerator-transform/0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 dev: true /regexp.prototype.flags/1.4.3: @@ -6385,7 +6399,7 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.21.1 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 has-symbols: 1.0.3 internal-slot: 1.0.4 regexp.prototype.flags: 1.4.3 @@ -6543,8 +6557,8 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + /tslib/2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} dev: false /tsutils/3.21.0_typescript@4.9.4: @@ -6826,7 +6840,7 @@ packages: '@apideck/better-ajv-errors': 0.3.6_ajv@8.12.0 '@babel/core': 7.20.12 '@babel/preset-env': 7.20.2_@babel+core@7.20.12 - '@babel/runtime': 7.20.7 + '@babel/runtime': 7.20.13 '@rollup/plugin-babel': 5.3.1_3dsfpkpoyvuuxyfgdbpn4j4uzm '@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.1 '@rollup/plugin-replace': 2.4.2_rollup@2.79.1 diff --git a/src/app.tsx b/src/app.tsx index 0a10b86..d5ff94d 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -50,3 +50,7 @@ swRegistration.register(); console.log('Checkout the repo: https://github.com/haishanh/yacd'); // eslint-disable-next-line console.log('Version:', __VERSION__); +if (__COMMIT_HASH__) { + // eslint-disable-next-line + console.log('Commit hash:', __COMMIT_HASH__); +} diff --git a/src/custom.d.ts b/src/custom.d.ts index b03fba2..16179f9 100644 --- a/src/custom.d.ts +++ b/src/custom.d.ts @@ -16,12 +16,13 @@ interface Window { i18n: any; } -// webpack definePlugin replacing variables declare const __VERSION__: string; +declare const __COMMIT_HASH__: string; declare const process = { env: { NODE_ENV: string, PUBLIC_URL: string, + COMMIT_HASH: string, }, }; diff --git a/tsconfig.json b/tsconfig.json index 9ecdbea..4efd3c1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,5 +20,5 @@ "noEmit": true, "jsx": "react" }, - "include": ["./src"] + "include": ["./src", "vite.config.ts"] } diff --git a/vite.config.ts b/vite.config.ts index e0f16f8..439021f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,39 +1,82 @@ -import { defineConfig } from 'vite'; -import { VitePWA } from 'vite-plugin-pwa'; import react from '@vitejs/plugin-react' import * as path from 'path'; +import { defineConfig } from 'vite'; +import { VitePWA } from 'vite-plugin-pwa'; + import * as pkg from './package.json'; // https://vitejs.dev/config/ -export default defineConfig(({ mode }) => ({ - define: { - __VERSION__: JSON.stringify(pkg.version), - 'process.env.NODE_ENV': JSON.stringify(mode), - 'process.env.PUBLIC_URL': JSON.stringify('./'), - }, - base: './', - resolve: { - alias: { - $src: path.resolve(__dirname, './src'), - src: path.resolve(__dirname, './src'), +export default defineConfig(async ({ mode }) => { + let hash = process.env.COMMIT_HASH; + if (!hash) { + try { + hash = await gitHash(); + } catch (e) { } + } + if (!hash) hash = ''; + + return { + define: { + __VERSION__: JSON.stringify(pkg.version), + __COMMIT_HASH__: JSON.stringify(hash), + 'process.env.NODE_ENV': JSON.stringify(mode), + 'process.env.PUBLIC_URL': JSON.stringify('./'), }, - }, - publicDir: 'assets', - build: { - // sourcemap: true, - // the default value is 'dist' - // which make more sense - // but change this may break other people's tools - outDir: 'public', - }, - plugins: [ - react(), - VitePWA({ - srcDir: 'src', + base: './', + resolve: { + alias: { + $src: path.resolve(__dirname, './src'), + src: path.resolve(__dirname, './src'), + }, + }, + publicDir: 'assets', + build: { + // sourcemap: true, + // the default value is 'dist' + // which make more sense + // but change this may break other people's tools outDir: 'public', - filename: 'sw.ts', - strategies: 'injectManifest', - base: './', - }), - ], -})); + }, + plugins: [ + react(), + VitePWA({ + srcDir: 'src', + outDir: 'public', + filename: 'sw.ts', + strategies: 'injectManifest', + base: './', + }), + ], + } +}); + +// non vite stuff + +async function gitHash() { + try { + const mod = await import('node:child_process'); + return await run(mod.spawn, 'git', ['rev-parse', '--short', 'HEAD']); + } catch (e) { + return; + } +} + +function run(spawn: typeof import('node:child_process').spawn, cmd0: string, args0: string[]): Promise { + const cmd = cmd0; + const args = args0; + + return new Promise((resolve, reject) => { + const proc = spawn(cmd, args); + let out = Buffer.from(''); + proc.stdout.on('data', (data) => { + out += data; + }); + proc.on('error', (err) => { + reject(err); + }); + proc.on('exit', (code) => { + if (code !== 0) reject(code); + resolve(out.toString()); + }); + }); +}