From 546dccddb204b3d36a257af15dcd62226b31ed5c Mon Sep 17 00:00:00 2001 From: Stacey Beard <31229509+staceybeard@users.noreply.github.com> Date: Mon, 5 May 2025 13:54:37 -0400 Subject: [PATCH 01/36] ci: add workflow to build for iOS and Android (#1369) Wrote a workflow to build the app for iOS and Android via GitHub Actions. This is done automatically for dev, and can be run manually for other environments. --- .github/actions/build-setup/action.yml | 51 ++++++++ .github/workflows/build-app.yml | 140 ++++++++++++++++++++++ .gitlab-ci.yml | 8 +- docs/deployment/ci-cd.md | 27 ++++- package-lock.json | 160 ++++++++++++------------- package.json | 16 ++- renovate.json5 | 1 + 7 files changed, 305 insertions(+), 98 deletions(-) create mode 100644 .github/actions/build-setup/action.yml create mode 100644 .github/workflows/build-app.yml diff --git a/.github/actions/build-setup/action.yml b/.github/actions/build-setup/action.yml new file mode 100644 index 000000000..8e49ce4d1 --- /dev/null +++ b/.github/actions/build-setup/action.yml @@ -0,0 +1,51 @@ +# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Build App Setup +description: Setup before building the app + +inputs: + NPMRC_FILE: + description: 'Secret with the contents of .npmrc' + required: true + ENV_CONFIG_JS: + description: 'Contents of the file `opal.config.js` for the given environment' + required: true + ENV_GOOGLE_SERVICES: + description: 'Contents of the file `google-services.json` for the given environment' + required: true + +runs: + using: "composite" + steps: + # Install dependencies + - name: Load .npmrc + run: echo "${NPMRC_FILE}" > .npmrc + shell: bash + env: + NPMRC_FILE: ${{ inputs.NPMRC_FILE }} + # Use setup-node's built-in functionality for caching and restoring npm dependencies + # See: https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows + - uses: actions/setup-node@v4.4.0 + with: + # renovate: datasource=node-version dependency=node + node-version: 22.15.0 + cache: 'npm' + - name: Check npm installation + run: npm -v + shell: bash + - name: Install dependencies + run: npm ci + shell: bash + + # Initialize the environment files needed to build the app from repository-level Actions variables + - name: Load environment files + run: | + mkdir env/$ENVIRONMENT + echo "${ENV_CONFIG_JS}" > env/$ENVIRONMENT/opal.config.js + echo "${ENV_GOOGLE_SERVICES}" > env/$ENVIRONMENT/google-services.json + shell: bash + env: + ENV_CONFIG_JS: ${{ inputs.ENV_CONFIG_JS }} + ENV_GOOGLE_SERVICES: ${{ inputs.ENV_GOOGLE_SERVICES }} diff --git a/.github/workflows/build-app.yml b/.github/workflows/build-app.yml new file mode 100644 index 000000000..e32e9733e --- /dev/null +++ b/.github/workflows/build-app.yml @@ -0,0 +1,140 @@ +# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +# This workflow is explained in `docs/deployment/ci-cd.md`; please keep that documentation file up to date when making changes here. + +name: Build App +# Default to dev when running automatically (see also "env" below) +run-name: Building the app for ${{ inputs.ENVIRONMENT || 'dev' }} 📦 +on: + # When pushing to main, automatically build for dev + push: + branches: + - main + + # Offer a manual interface to build for all other environments as needed + workflow_dispatch: + inputs: + ENVIRONMENT: + description: 'Environment in which to build' + type: choice + required: true + default: 'dev' + options: + - dev + - prod + +# Read the target environment from workflow_dispatch inputs, or default to dev +env: + ENVIRONMENT: ${{ inputs.ENVIRONMENT || 'dev' }} + +permissions: + contents: read + +jobs: + build-android: + runs-on: macos-latest + steps: + # Setup + - name: Convert environment to all caps + run: echo ENVIRONMENT_CAPS="$(echo "$ENVIRONMENT" | tr '[:lower:]' '[:upper:]')" >> "$GITHUB_ENV" + - name: Print environment + run: | + echo "Environment: $ENVIRONMENT ($ENVIRONMENT_CAPS)" + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + + - name: Set up build + uses: ./.github/actions/build-setup + with: + NPMRC_FILE: ${{ secrets.NPMRC_FILE }} + ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT_CAPS)] }} + ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT_CAPS)] }} + + # Build the app + - name: Build the app + run: npm run build:app:android --env="$ENVIRONMENT" + - name: Rename build output + id: rename-output + run: | + mv "./platforms/android/app/build/outputs/apk/debug/app-debug.apk" "opal-${ENVIRONMENT}.apk" + echo "ARTIFACT_NAME=opal-${ENVIRONMENT}.apk" >> "$GITHUB_OUTPUT" + - name: Archive build output + uses: actions/upload-artifact@v4.6.2 + with: + name: Android app + path: ${{ steps.rename-output.outputs.ARTIFACT_NAME }} + + build-ios: + runs-on: macos-latest + steps: + # Setup + - name: Convert environment to all caps + run: echo ENVIRONMENT_CAPS="$(echo "$ENVIRONMENT" | tr '[:lower:]' '[:upper:]')" >> "$GITHUB_ENV" + - name: Print environment + run: | + echo "Environment: $ENVIRONMENT ($ENVIRONMENT_CAPS)" + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + + - uses: ./.github/actions/build-setup + with: + NPMRC_FILE: ${{ secrets.NPMRC_FILE }} + ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT_CAPS)] }} + ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT_CAPS)] }} + + # Install an Apple certificate and provisioning profile used to build the app for iOS + # See: https://docs.github.com/en/actions/use-cases-and-examples/deploying/installing-an-apple-certificate-on-macos-runners-for-xcode-development + - name: Install the Apple certificate and provisioning profile + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64_FILE }} + P12_PASSWORD: ${{ secrets.BUILD_CERTIFICATE_PASSWORD }} + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets[format('{0}_PROVISIONING_PROFILE_BASE64_FILE', env.ENVIRONMENT_CAPS)] }} # zizmor: ignore[overprovisioned-secrets] + KEYCHAIN_PASSWORD: ${{ secrets.TEMPORARY_KEYCHAIN_PASSWORD }} + run: | + # Create variables + CERTIFICATE_PATH="$RUNNER_TEMP"/build_certificate.p12 + PP_PATH="$RUNNER_TEMP"/build_pp.mobileprovision + KEYCHAIN_PATH="$RUNNER_TEMP"/app-signing.keychain-db + + # Import certificate and provisioning profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o "$CERTIFICATE_PATH" + echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o "$PP_PATH" + + # Create temporary keychain + security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + # Options: -lut: lock keychain when the system sleeps, lock keychain after timeout interval, specify timeout interval in seconds + security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH" + security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + + # Import certificate to keychain + # Options: -P: specify wrapping passphrase immediately; -A: allow any application to access the imported key without warning; -t: type; -f: format; -k: target keychain to import into + security import "$CERTIFICATE_PATH" -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH" + # Options: -S: comma-separated list of of allowed partition IDs; -k: password for keychain (required) + security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + # Options: -d: use the specified preference domain; -s: set the search list to the specified keychains + security list-keychain -d user -s "$KEYCHAIN_PATH" + + # Apply provisioning profile + mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles + cp "$PP_PATH" ~/Library/MobileDevice/Provisioning\ Profiles + + # Build the app + - name: Build the app + run: npm run build:app:ios:ci --env="$ENVIRONMENT" --devteam="$IOS_DEVELOPMENT_TEAM" --provisioningprofile="$PROVISIONING_PROFILE_UUID" + env: + IOS_DEVELOPMENT_TEAM: ${{ secrets.IOS_DEVELOPMENT_TEAM }} + PROVISIONING_PROFILE_UUID: ${{ secrets[format('{0}_PROVISIONING_PROFILE_UUID', env.ENVIRONMENT_CAPS)] }} # zizmor: ignore[overprovisioned-secrets] + - name: Rename build output + id: rename-output + run: | + mv ./platforms/ios/build/Debug-iphoneos/*.ipa "opal-${ENVIRONMENT}.ipa" + echo "ARTIFACT_NAME=opal-${ENVIRONMENT}.ipa" >> "$GITHUB_OUTPUT" + - name: Archive build output + uses: actions/upload-artifact@v4.6.2 + with: + name: iOS app + path: ${{ steps.rename-output.outputs.ARTIFACT_NAME }} diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e1207f70c..ebd724ada 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -170,7 +170,7 @@ build android: script: - java -version - gradle -v - - npm run build:app:android:device --env=$ENV + - npm run build:app:android --env=$ENV - mv "./platforms/android/app/build/outputs/apk/debug/app-debug.apk" "opal-$ENV.apk" artifacts: expire_in: 1 day @@ -188,7 +188,7 @@ build android release (apk): - gradle -v - apksigner --version # Build the apk in release mode - - npm run build:app:android:device:release:apk --env=$ENV + - npm run build:app:android:release:apk --env=$ENV - mv ./platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk app-release-unsigned.apk # Sign the apk - zipalign -v -f -p 4 app-release-unsigned.apk app-unsigned-aligned.apk @@ -210,7 +210,7 @@ build android release (aab): - java -version - gradle -v # Build the aab in release mode - - npm run build:app:android:device:release --env=$ENV + - npm run build:app:android:release --env=$ENV - mv ./platforms/android/app/build/outputs/bundle/release/app-release.aab app-release-unsigned.aab # Sign the aab - jarsigner -verbose -sigalg SHA512withRSA -digestalg SHA512 -keystore $ANDROID_UPLOAD_KEY_PATH -storepass $ANDROID_UPLOAD_KEY_PASSWORD -signedjar app-release-signed.aab app-release-unsigned.aab $ANDROID_UPLOAD_KEY_ALIAS @@ -231,7 +231,7 @@ build ios: # Fixes Bus Error when cordova invokes pod install # See: https://stackoverflow.com/a/70581304 - gem install --user-install ffi -- --enable-libffi-alloc - - npm run build:app:ios:device:ci --env=$ENV --devteam=$IOS_DEVELOPMENT_TEAM + - npm run build:app:ios:ci --env=$ENV --devteam=$IOS_DEVELOPMENT_TEAM - mv ./platforms/ios/build/Debug-iphoneos/*.ipa "opal-$ENV.ipa" artifacts: expire_in: 1 day diff --git a/docs/deployment/ci-cd.md b/docs/deployment/ci-cd.md index 5fb7fc632..a10d2abc3 100644 --- a/docs/deployment/ci-cd.md +++ b/docs/deployment/ci-cd.md @@ -4,15 +4,32 @@ SPDX-FileCopyrightText: Copyright (C) 2023 Opal Health Informatics Group at the SPDX-License-Identifier: Apache-2.0 --> -# GitLab CI/CD +_This document refers to some features and uses of GitLab CI/CD which have not yet been converted to GitHub Actions._ +_Content will be updated as this work progresses._ -This project is configured with [GitLab CI/CD pipelines](https://docs.gitlab.com/ee/ci/pipelines/) +# GitHub Actions + +This project is configured with [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions) to build and deploy the application automatically. Currently, deployment is only supported for internal distribution, not to end users via the app stores. -Two different workflows are handled by the pipeline, as follows. +Two different workflows are handled as follows. + +## Workflows - GitHub + +The `Build App` workflow runs automatically on all commits to the main branch, to build the app for iOS and Android. +Commits on this branch are produced as the result of approved "squashed-and-merged" merge requests. +These commits represent completed work that is ready for deployment to our development environment. +As such, the jobs in this workflow run by default in the Dev environment. + +The workflow also provides a UI interface which can be used to build the app for another environment. + +To build the app on demand, go to the [GitHub Actions Tab](https://github.com/opalmedapps/opal-app/actions), +select `Build App` in the left sidebar, and next to `This workflow has a workflow_dispatch event trigger`, +select `Run workflow`. +This will open a panel in which to provide inputs, such as which environment to use. -## Workflows +## Workflows - GitLab ### 1. Commits on feature branches (regular development) @@ -82,7 +99,7 @@ Any commits to the default branch are handled as follows: but using the variables for that environment. For more information on downstream pipelines, refer to GitLab's documentation. -## Protected Environments +## Protected Environments - GitLab GitLab [Protected Environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) are used to limit which users are authorized to deploy versions of the app to each environment. diff --git a/package-lock.json b/package-lock.json index 32dd3bc63..3d7dd568e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2783,31 +2783,31 @@ "license": "MIT" }, "node_modules/@napi-rs/canvas": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.68.tgz", - "integrity": "sha512-LQESrePLEBLvhuFkXx9jjBXRC2ClYsO5mqQ1m/puth5z9SOuM3N/B3vDuqnC3RJFktDktyK9khGvo7dTkqO9uQ==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.69.tgz", + "integrity": "sha512-ydvNeJMRm+l3T14yCoUKqjYQiEdXDq1isznI93LEBGYssXKfSaLNLHOkeM4z9Fnw9Pkt2EKOCAtW9cS4b00Zcg==", "license": "MIT", "optional": true, "engines": { "node": ">= 10" }, "optionalDependencies": { - "@napi-rs/canvas-android-arm64": "0.1.68", - "@napi-rs/canvas-darwin-arm64": "0.1.68", - "@napi-rs/canvas-darwin-x64": "0.1.68", - "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.68", - "@napi-rs/canvas-linux-arm64-gnu": "0.1.68", - "@napi-rs/canvas-linux-arm64-musl": "0.1.68", - "@napi-rs/canvas-linux-riscv64-gnu": "0.1.68", - "@napi-rs/canvas-linux-x64-gnu": "0.1.68", - "@napi-rs/canvas-linux-x64-musl": "0.1.68", - "@napi-rs/canvas-win32-x64-msvc": "0.1.68" + "@napi-rs/canvas-android-arm64": "0.1.69", + "@napi-rs/canvas-darwin-arm64": "0.1.69", + "@napi-rs/canvas-darwin-x64": "0.1.69", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.69", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.69", + "@napi-rs/canvas-linux-arm64-musl": "0.1.69", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.69", + "@napi-rs/canvas-linux-x64-gnu": "0.1.69", + "@napi-rs/canvas-linux-x64-musl": "0.1.69", + "@napi-rs/canvas-win32-x64-msvc": "0.1.69" } }, "node_modules/@napi-rs/canvas-android-arm64": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.68.tgz", - "integrity": "sha512-h1KcSR4LKLfRfzeBH65xMxbWOGa1OtMFQbCMVlxPCkN1Zr+2gK+70pXO5ktojIYcUrP6KDcOwoc8clho5ccM/w==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.69.tgz", + "integrity": "sha512-4icWTByY8zPvM9SelfQKf3I6kwXw0aI5drBOVrwfER5kjwXJd78FPSDSZkxDHjvIo9Q86ljl18Yr963ehA4sHQ==", "cpu": [ "arm64" ], @@ -2821,9 +2821,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-arm64": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.68.tgz", - "integrity": "sha512-/VURlrAD4gDoxW1GT/b0nP3fRz/fhxmHI/xznTq2FTwkQLPOlLkDLCvTmQ7v6LtGKdc2Ed6rvYpRan+JXThInQ==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.69.tgz", + "integrity": "sha512-HOanhhYlHdukA+unjelT4Dg3ta7e820x87/AG2dKUMsUzH19jaeZs9bcYjzEy2vYi/dFWKz7cSv2yaIOudB8Yg==", "cpu": [ "arm64" ], @@ -2837,9 +2837,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-x64": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.68.tgz", - "integrity": "sha512-tEpvGR6vCLTo1Tx9wmDnoOKROpw57wiCWwCpDOuVlj/7rqEJOUYr9ixW4aRJgmeGBrZHgevI0EURys2ER6whmg==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.69.tgz", + "integrity": "sha512-SIp7WfhxAPnSVK9bkFfJp+84rbATCIq9jMUzDwpCLhQ+v+OqtXe4pggX1oeV+62/HK6BT1t18qRmJfyqwJ9f3g==", "cpu": [ "x64" ], @@ -2853,9 +2853,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.68.tgz", - "integrity": "sha512-U9xbJsumPOiAYeAFZMlHf62b9dGs2HJ6Q5xt7xTB0uEyPeurwhgYBWGgabdsEidyj38YuzI/c3LGBbSQB3vagw==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.69.tgz", + "integrity": "sha512-Ls+KujCp6TGpkuMVFvrlx+CxtL+casdkrprFjqIuOAnB30Mct6bCEr+I83Tu29s3nNq4EzIGjdmA3fFAZG/Dtw==", "cpu": [ "arm" ], @@ -2869,9 +2869,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-gnu": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.68.tgz", - "integrity": "sha512-KFkn8wEm3mPnWD4l8+OUUkxylSJuN5q9PnJRZJgv15RtCA1bgxIwTkBhI/+xuyVMcHqON9sXq7cDkEJtHm35dg==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.69.tgz", + "integrity": "sha512-m8VcGmeSBNRbHZBd1srvdM1aq/ScS2y8KqGqmCCEgJlytYK4jdULzAo2K/BPKE1v3xvn8oUPZDLI/NBJbJkEoA==", "cpu": [ "arm64" ], @@ -2885,9 +2885,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-musl": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.68.tgz", - "integrity": "sha512-IQzts91rCdOALXBWQxLZRCEDrfFTGDtNRJMNu+2SKZ1uT8cmPQkPwVk5rycvFpvgAcmiFiOSCp1aRrlfU8KPpQ==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.69.tgz", + "integrity": "sha512-a3xjNRIeK2m2ZORGv2moBvv3vbkaFZG1QKMeiEv/BKij+rkztuEhTJGMar+buICFgS0fLgphXXsKNkUSJb7eRQ==", "cpu": [ "arm64" ], @@ -2901,9 +2901,9 @@ } }, "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.68.tgz", - "integrity": "sha512-e9AS5UttoIKqXSmBzKZdd3NErSVyOEYzJfNOCGtafGk1//gibTwQXGlSXmAKuErqMp09pyk9aqQRSYzm1AQfBw==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.69.tgz", + "integrity": "sha512-pClUoJF5wdC9AvD0mc15G9JffL1Q85nuH1rLSQPRkGmGmQOtRjw5E9xNbanz7oFUiPbjH7xcAXUjVAcf7tdgPQ==", "cpu": [ "riscv64" ], @@ -2917,9 +2917,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-gnu": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.68.tgz", - "integrity": "sha512-Pa/I36VE3j57I3Obhrr+J48KGFfkZk2cJN/2NmW/vCgmoF7kCP6aTVq5n+cGdGWLd/cN9CJ9JvNwEoMRDghu0g==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.69.tgz", + "integrity": "sha512-96X3bFAmzemfw84Ts6Jg/omL86uuynvK06MWGR/mp3JYNumY9RXofA14eF/kJIYelbYFWXcwpbcBR71lJ6G/YQ==", "cpu": [ "x64" ], @@ -2933,9 +2933,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-musl": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.68.tgz", - "integrity": "sha512-9c6rkc5195wNxuUHJdf4/mmnq433OQey9TNvQ9LspJazvHbfSkTij8wtKjASVQsJyPDva4fkWOeV/OQ7cLw0GQ==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.69.tgz", + "integrity": "sha512-2QTsEFO72Kwkj53W9hc5y1FAUvdGx0V+pjJB+9oQF6Ys9+y989GyPIl5wZDzeh8nIJW6koZZ1eFa8pD+pA5BFQ==", "cpu": [ "x64" ], @@ -2949,9 +2949,9 @@ } }, "node_modules/@napi-rs/canvas-win32-x64-msvc": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.68.tgz", - "integrity": "sha512-Fc5Dez23u0FoSATurT6/w1oMytiRnKWEinHivdMvXpge6nG4YvhrASrtqMk8dGJMVQpHr8QJYF45rOrx2YU2Aw==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.69.tgz", + "integrity": "sha512-Q4YA8kVnKarApBVLu7F8icGlIfSll5Glswo5hY6gPS4Is2dCI8+ig9OeDM8RlwYevUIxKq8lZBypN8Q1iLAQ7w==", "cpu": [ "x64" ], @@ -3512,9 +3512,9 @@ } }, "node_modules/@octokit/plugin-throttling": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.6.0.tgz", - "integrity": "sha512-zn7m1N3vpJDaVzLqjCRdJ0cRzNiekHEWPi8Ww9xyPNrDt5PStHvVE0eR8wy4RSU8Eg7YO8MHyvn6sv25EGVhhg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.6.1.tgz", + "integrity": "sha512-bt3EBUkeKUzDQXRCcFrR9SWVqlLFRRqcCrr6uAorWt6NXTyjMKqcGrFmXqJy9NCbnKgiIZ2OXWq04theFc76Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -4056,9 +4056,9 @@ } }, "node_modules/@semantic-release/github/node_modules/mime": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.6.tgz", - "integrity": "sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.7.tgz", + "integrity": "sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa" @@ -4613,12 +4613,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz", - "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", + "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/node-forge": { @@ -4747,9 +4747,9 @@ "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, "license": "MIT", "dependencies": { @@ -5849,9 +5849,9 @@ } }, "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.2.0.tgz", + "integrity": "sha512-JocpCSOixzy5XFJi2ub6IMmV/G9i8Lrm2lZvwBv9xPdglmZM0ufDVBbjbrfU/zuLvBfD7Bv2eYxz9i+OHTgkew==", "dev": true, "license": "MIT", "engines": { @@ -6505,9 +6505,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001707", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", - "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "version": "1.0.30001712", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", + "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==", "dev": true, "funding": [ { @@ -9576,9 +9576,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.128", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.128.tgz", - "integrity": "sha512-bo1A4HH/NS522Ws0QNFIzyPcyUUNV/yyy70Ho1xqfGYzPUme2F/xr4tlEOuM6/A538U1vDA7a4XfCd1CKRegKQ==", + "version": "1.5.133", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.133.tgz", + "integrity": "sha512-mrR+g6Y1at0GKDlPlMMwLAkI6c47q3d7U/vKS3rGTa3V4xStu18oT4UCPg5ErcAhUqk7swSjXSPUGstOYd2qBw==", "dev": true, "license": "ISC" }, @@ -15813,9 +15813,9 @@ } }, "node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", - "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.39.1.tgz", + "integrity": "sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -19589,9 +19589,9 @@ } }, "node_modules/parse-json/node_modules/type-fest": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", - "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.39.1.tgz", + "integrity": "sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -21098,9 +21098,9 @@ } }, "node_modules/read-package-up/node_modules/type-fest": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", - "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.39.1.tgz", + "integrity": "sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -21166,9 +21166,9 @@ } }, "node_modules/read-pkg/node_modules/type-fest": { - "version": "4.38.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz", - "integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==", + "version": "4.39.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.39.1.tgz", + "integrity": "sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -24745,9 +24745,9 @@ } }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { diff --git a/package.json b/package.json index fa39b55bd..6f4f463a7 100644 --- a/package.json +++ b/package.json @@ -15,15 +15,13 @@ "build:web": "run-script-os", "build:web:windows": "npm run prepare:web && webpack --env opal_environment=%npm_config_env%", "build:web:nix": "npm run prepare:web && webpack --env opal_environment=$npm_config_env", - "build:app:ios": "npm run prepare:app && npm run build:web && cordova build ios --verbose", - "build:app:android": "npm run prepare:app && npm run build:web && cordova build android --verbose", - "build:app:ios:device": "npm run prepare:app && npm run build:web && cordova build ios --device --verbose", - "build:app:ios:device:ci": "npm run prepare:app && npm run build:web && cordova build ios --device --verbose --developmentTeam=$npm_config_devteam --automaticProvisioning=true", - "build:app:android:device": "npm run prepare:app && npm run build:web && cordova build android --device --verbose", - "build:app:ios:device:release": "npm run prepare:app && npm run build:web && cordova build ios --device --release --verbose", - "build:app:ios:device:release:ci": "npm run prepare:app && npm run build:web && cordova build ios --device --release --verbose --developmentTeam=$npm_config_devteam --automaticProvisioning=true", - "build:app:android:device:release": "npm run prepare:app && npm run build:web && cordova build android --device --release --verbose", - "build:app:android:device:release:apk": "npm run prepare:app && npm run build:web && cordova build android --device --release --verbose -- --packageType=apk", + "build:app:ios": "npm run prepare:app && npm run build:web && cordova build ios --device --verbose", + "build:app:ios:ci": "npm run prepare:app && npm run build:web && cordova build ios --device --verbose --codeSignIdentity=\"iPhone Developer\" --developmentTeam=$npm_config_devteam --provisioningProfile=$npm_config_provisioningprofile", + "build:app:ios:release": "npm run prepare:app && npm run build:web && cordova build ios --device --release --verbose", + "build:app:ios:release:ci": "npm run prepare:app && npm run build:web && cordova build ios --device --release --verbose --codeSignIdentity=\"iPhone Developer\" --developmentTeam=$npm_config_devteam --provisioningProfile=$npm_config_provisioningprofile --packageType=app-store", + "build:app:android": "npm run prepare:app && npm run build:web && cordova build android --device --verbose", + "build:app:android:release": "npm run prepare:app && npm run build:web && cordova build android --device --release --verbose", + "build:app:android:release:apk": "npm run prepare:app && npm run build:web && cordova build android --device --release --verbose -- --packageType=apk", "start": "npm run start:web", "start:web": "run-script-os", "start:web:windows": "npm run prepare:web && webpack-dev-server --open --env opal_environment=%npm_config_env% --env minimize=false", diff --git a/renovate.json5 b/renovate.json5 index df1112313..9b50cdb39 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -20,6 +20,7 @@ // get weekly updates to lighten load // https://docs.renovatebot.com/presets-schedule/#scheduleweekly "schedule:weekly", + "github>mschoettle/renovate-presets//presets/actions-dependency-version.json5", ], // Extra rules for node images. See: https://github.com/renovatebot/renovate/discussions/29501 // Ensure that node docker versioning doesn't interfere with the custom managers. From 0983d652dcd5fc95cb3594ee7c23492dc4b19265 Mon Sep 17 00:00:00 2001 From: Stacey Beard <31229509+staceybeard@users.noreply.github.com> Date: Tue, 6 May 2025 15:24:37 -0400 Subject: [PATCH 02/36] chore(deps): npm audit fix (#1375) Ran `npm audit fix`. Also fixed a reference to `actions/checkout@v4.2.2` that was breaking the CI checks workflow. --- .github/workflows/ci.yml | 2 +- package-lock.json | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8ebf292a6..509a7440f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@4.2.2 + - uses: actions/checkout@v4.2.2 with: persist-credentials: false - uses: mschoettle/pre-commit-action@v4.2.3 diff --git a/package-lock.json b/package-lock.json index 3d7dd568e..75d7ef319 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11966,9 +11966,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, "license": "MIT", "dependencies": { From 767b57c063c4448a29f99e9290a717107b689ce2 Mon Sep 17 00:00:00 2001 From: Stacey Beard <31229509+staceybeard@users.noreply.github.com> Date: Wed, 7 May 2025 16:18:24 -0400 Subject: [PATCH 03/36] fix: remove false untranslated string warnings from the init page (#1376) Fixed a long-standing issue where the console would fill up with warnings of `Translation for _ doesn't exist` upon launching the app. - Moved the init page's translations to the `top-view` files to load them first. - Added a custom MissingTranslationHandler that only logs missing translations once the service is done loading, and blocks repeat-logging spam. --- README.md | 2 +- THIRDPARTY.md | 30 ------------------- package-lock.json | 11 ------- package.json | 1 - .../all-views/en.json | 5 +--- .../all-views/fr.json | 5 +--- .../appTranslationTablesViews/login/en.json | 20 ------------- .../appTranslationTablesViews/login/fr.json | 20 ------------- .../top-view/en.json | 26 +++++++++++++--- .../top-view/fr.json | 26 +++++++++++++--- src/index.html | 8 ++--- src/js/app.js | 1 - src/js/configs/translation.config.js | 27 ++++++++++++++--- src/js/directives/offlineBannerDirective.js | 4 +-- src/views/settings/caregivers.html | 2 +- .../settings/update-security-question.html | 2 +- 16 files changed, 78 insertions(+), 112 deletions(-) diff --git a/README.md b/README.md index 8b095e009..6e2199d3f 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ This section covers installation steps to build the app's web code on your local - To debug the code, open the developer console, switch to mobile view and [disable caching](http://nicholasbering.ca/tools/2016/10/09/devtools-disable-caching/). Caching can sometimes interfere with Webpack's live reloading to see updates in real time. - If you followed all the steps in the [Web](#web) section correctly, the only errors you should see in the debug console are - a 404 error for `cordova.js`, a 404 error for `favicon.ico`, and many warnings for translations that don't exist. + errors for `cordova.js` (which only runs in the mobile app, and isn't needed in the web version). If you see any additional errors that seem to be interfering with the app's functionality, skip ahead to [Troubleshooting](#troubleshooting). ### Mobile App diff --git a/THIRDPARTY.md b/THIRDPARTY.md index e4dfa9e4b..914112afc 100644 --- a/THIRDPARTY.md +++ b/THIRDPARTY.md @@ -565,36 +565,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` -## angular-translate-handler-log - -* Homepage: https://angular-translate.github.io -* Repository: https://github.com/angular-translate/bower-angular-translate-handler-log -* License: `MIT` - -```text -The MIT License (MIT) - -Copyright (c) 2013-2017 The angular-translate team and Pascal Precht - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -``` - ## angular-translate-interpolation-messageformat * Homepage: https://angular-translate.github.io diff --git a/package-lock.json b/package-lock.json index 75d7ef319..0199e4ae7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,6 @@ "angular-sanitize": "npm:@neverendingsupport/angularjs@1.9.9-sanitize", "angular-touch": "npm:@neverendingsupport/angularjs@1.9.9-touch", "angular-translate": "2.19.1", - "angular-translate-handler-log": "2.19.1", "angular-translate-interpolation-messageformat": "2.19.1", "angular-translate-loader-partial": "2.19.1", "angular-ui-router": "1.0.30", @@ -5239,16 +5238,6 @@ "node": "*" } }, - "node_modules/angular-translate-handler-log": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/angular-translate-handler-log/-/angular-translate-handler-log-2.19.1.tgz", - "integrity": "sha512-ZEi/J/Tr2/h8qh4c6gPJqp6+cNv0n0SnIl5ycdDBo6U4huuyaoZ4m0MKfZvjiRPZU5LQea0DJA0Q50mY23xELg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "license": "MIT", - "dependencies": { - "angular-translate": "~2.19.1" - } - }, "node_modules/angular-translate-interpolation-messageformat": { "version": "2.19.1", "resolved": "https://registry.npmjs.org/angular-translate-interpolation-messageformat/-/angular-translate-interpolation-messageformat-2.19.1.tgz", diff --git a/package.json b/package.json index 6f4f463a7..246c9614b 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,6 @@ "angular-sanitize": "npm:@neverendingsupport/angularjs@1.9.9-sanitize", "angular-touch": "npm:@neverendingsupport/angularjs@1.9.9-touch", "angular-translate": "2.19.1", - "angular-translate-handler-log": "2.19.1", "angular-translate-interpolation-messageformat": "2.19.1", "angular-translate-loader-partial": "2.19.1", "angular-ui-router": "1.0.30", diff --git a/src/Languages/appTranslationTablesViews/all-views/en.json b/src/Languages/appTranslationTablesViews/all-views/en.json index 5e97c3ba6..171aa0d59 100644 --- a/src/Languages/appTranslationTablesViews/all-views/en.json +++ b/src/Languages/appTranslationTablesViews/all-views/en.json @@ -104,7 +104,6 @@ "GOTO_ROOM": "Appointment Room:", "HEADER_MESSAGE_HOME": "Home", "HIDE": "Hide", - "HOME": "Home", "HOME_DESCRIPTION": "On the Home tab, you will be provided with news about your medical status, documents, hospital announcements and appointments.", "HOSPITALPARKING": "Parking", "INDIVIDUAL_ANNOUNCEMENT_HEADER": "Announcement", @@ -150,7 +149,7 @@ "LOADING": "Loading", "LOADING_ERROR": "An error occurred while loading your data. Please try again later.", "LOADINGAPPOINTMENTS": "Loading your appointments...", - "LOADINGDATA": "Retrieving your account", + "LOADING_DATA": "Loading data", "LOADINGDOCUMENT": "Loading your document...", "LOADINGLABRESULTS": "Loading your lab results...", "LOADINGMATERIAL": "Loading your reference material...", @@ -264,7 +263,6 @@ "RELATIONSHIP_TYPES_ERROR": "An error occurred while retrieving relationship types.", "RELATIONSHIPS_ERROR": "An error occurred while retrieving your data.", "SAVING_QUESTIONNAIRE_ANSWER": "Saving answers...", - "SCREENSHOTTAKEN": "Screenshot taken. If it was not you, then exit the app.", "SEARCH": "Search", "SEARCH_EDU": "Search by title", "SECTION": "Section", @@ -342,7 +340,6 @@ "TREATMENTSESSION": "Treatment Sessions", "Tumor markers": "Tumor Markers", "UNABLE_TO_SHARE_DOCUMENT": "Unable to share document", - "UNATTENDED": "Do not leave your phone unattended.", "UPCOMING_APPOINTMENTS": "Upcoming Appointments", "UPDATE": "Update", "UPDATED_EMAIL": "Email successfully updated", diff --git a/src/Languages/appTranslationTablesViews/all-views/fr.json b/src/Languages/appTranslationTablesViews/all-views/fr.json index ab53427a0..cd664a143 100644 --- a/src/Languages/appTranslationTablesViews/all-views/fr.json +++ b/src/Languages/appTranslationTablesViews/all-views/fr.json @@ -105,7 +105,6 @@ "GOTO_ROOM": "Salle de rendez-vous :", "HEADER_MESSAGE_HOME": "Accueil", "HIDE": "Cacher", - "HOME": "Accueil", "HOME_DESCRIPTION": "Dans l'onglet Accueil, vous pourrez accéder aux nouvelles concernant votre statut médical, vos documents, les annonces de l'hôpital et vos rendez-vous.", "HOSPITALPARKING": "Stationnement", "INDIVIDUAL_ANNOUNCEMENT_HEADER": "Annonce", @@ -151,7 +150,7 @@ "LOADING": "Chargement", "LOADING_ERROR": "Une erreur est survenue lors du chargement de vos données. Veuillez réessayer plus tard.", "LOADINGAPPOINTMENTS": "Chargement de vos rendez-vous...", - "LOADINGDATA": "Chargement des données", + "LOADING_DATA": "Chargement de vos données", "LOADINGDOCUMENT": "Chargement de votre document...", "LOADINGLABRESULTS": "Chargement de vos résultats sanguins...", "LOADINGMATERIAL": "Chargement de votre document de référence...", @@ -265,7 +264,6 @@ "RELATIONSHIP_TYPES_ERROR": "Une erreur s'est produite lors du chargement des informations.", "RELATIONSHIPS_ERROR": "Une erreur s'est produite lors du chargement des données.", "SAVING_QUESTIONNAIRE_ANSWER": "Enregistrement de vos réponses...", - "SCREENSHOTTAKEN": "Capture d'écran en cours. Si vous n'avez pas effectué la capture d'écran, veuillez quitter l'application.", "SEARCH": "Recherche", "SEARCH_EDU": "Recherche de titre", "SECTION": "Section", @@ -343,7 +341,6 @@ "TREATMENTSESSION": "Sessions de Traitement", "Tumor markers": "Marqueurs tumoraux", "UNABLE_TO_SHARE_DOCUMENT": "Impossible de partager le document", - "UNATTENDED": "Ne laissez pas votre appareil sans surveillance.", "UPCOMING_APPOINTMENTS": "Les rendez-vous à venir", "UPDATE": "Mettre à jour", "UPDATED_EMAIL": "Courriel mis à jour avec succès", diff --git a/src/Languages/appTranslationTablesViews/login/en.json b/src/Languages/appTranslationTablesViews/login/en.json index 3761c623f..6fc16e1a0 100644 --- a/src/Languages/appTranslationTablesViews/login/en.json +++ b/src/Languages/appTranslationTablesViews/login/en.json @@ -3,11 +3,9 @@ "ALERT": "Alert", "APP_LICENSE": "Unless otherwise stated, this software's source code is subject to the terms of the Apache License Version 2.0, a copy of which is linked below.", "APP_VERSION": "App Version", - "ATTENTION": "Attention!", "BACK": "Back", "BROWSER_OPEN_FAILED": "Error opening this link. Please try again later.", "CANCEL": "Cancel", - "CLOSE": "Close", "CONFIRM": "Confirm", "CONTACTHOSPITAL": "Contact the hospital for assistance", "CONTINUE": "Continue", @@ -37,7 +35,6 @@ "GENERAL": "General", "GETTINGTOHOSPITAL": "Directions", "GO_TO_LOGIN": "Go To Login", - "HEADER_MESSAGE_LOGIN": "Sign In", "HOME": "Home", "HOSPITAL": "Hospital", "INACTIVE": "For security purposes, you have been disconnected after 5 minutes of inactivity. Please log in again.", @@ -45,14 +42,11 @@ "INVALID_EMAIL": "Invalid email", "INVALID_EMAIL_OR_PWD": "Incorrect email or password", "INVALID_USER": "Invalid user", - "JAILBREAK_TITLE": "Jailbreak/Rooted Device Detected", - "JAILBREAK_MESSAGE": "Running this app on a jailbroken or rooted device is not supported.", "KICKEDOUT": "You have logged in on another device.", "LANGUAGE": "Language", "LEAVEMESSAGE": "Leave us a message", "LICENSE": "License", "LOADING": "Loading", - "LOADINGDATA": "Retrieving your account", "LOGGINGIN": "Logging In...", "LOGIN": "Login", "MUHC": "MUHC", @@ -62,12 +56,9 @@ "NEURO_FULL": "Montreal Neurological Institute-Hospital", "NEWPASSWORD": "Set Password", "NO_PAGE_CONTENT": "There is currently no content available for this page. Please contact the hospital for more information.", - "NOINTERNETCONNECTION": "You are currently offline", - "OK": "Ok", "OK_BUTTON": "OK", "OMI": "OMI", "OMI_FULL": "Opal Medical Institution", - "OPAL_ABOUT": "About Opal", "OPAL_CONTRIBUTE": "Contribute to Opal Development", "OPAL_COPYRIGHT": "Opal Health Informatics Group at the RI-MUHC", "OPAL_DEMO_1": "OD1", @@ -82,7 +73,6 @@ "OUTOFTRIES": "Too many failed attempts - Please try again later.", "PAGE_ACCESS_ERROR": "Error accessing this page. Please try again later.", "PARKING": "Parking & Transport", - "PARTNERS": "Partners", "PASSWORD": "Password", "PASSWORD_CRITERIA": "This new password does not comply with the required criteria", "PASSWORD_INVALID_CAPITAL": "Password requires at least one capital letter", @@ -101,7 +91,6 @@ "RATETHISAPP": "Rate This App", "RECONNECTING": "Reconnecting...", "REENTERPASSWORDPLACEHOLDER": "Re-enter new password", - "REGISTER_OPAL": "Register for Opal", "RESETERROR": "Password Reset Error", "RESET_PASSWORD_SENT": "If your email address is in our system, an email will be sent to you to reset your password. Do not close the app while completing the password reset process.", "RESETINSTRUCTIONS": "It should be at least 10 characters long, including a number, a lowercase letter, a capital letter and a special character.", @@ -110,8 +99,6 @@ "RESET_PASSWORD_CODE_EXPIRED": "You took too long to reset your password. Please try again.", "RETRY": "Retry", "RETRYRESETMESSAGE": "Your password reset link is invalid or has expired. Please try resetting your password again.", - "SCREENSHOTTAKEN": "Screenshot taken. If it was not you, exit the app.", - "SECURE_PHONE": "Remember to secure your information by protecting your phone with a passphrase", "SECURITY_AND_PRIVACY": "Security and Privacy", "SERVICE_AGREEMENT": "Service Agreement", "SECURITYQUESTION": "Security Question", @@ -123,9 +110,7 @@ "SETPASSWORDLABEL": "Set new password", "SHOW_LICENSE_TEXT": "Show license text", "SIGNOUT": "Sign out", - "SUBMITTING": "Submitting... Please do not leave this page.", "SUCCESS": "Success", - "TECHNICAL_LEGAL": "Technical / Legal", "TERMS_OF_USE": "Terms of Use", "THIRD_PARTY": "Third-Party Dependencies", "TOO_MANY_REQUESTS": "Too many unsuccessful login attempts. Please try again later.", @@ -136,17 +121,12 @@ "TOUR_GENERAL": "On the General tab, you will find announcements, parking information, and other useful links. You can also provide us with feedback on the app.", "TOUR_HOME": "On the Home tab, you will be provided with your most important information at a glance, including your notifications, and a button to check-in to your appointments for the day.", "TOUR_INFO": "The Information button will appear on some pages to give you additional details if you need them.", - "TOUR_MODAL_INTRODUCTION": "To help you get started, a quick tour is available to guide you through the main sections of the app. If you choose to skip it or would like to visit it again later, the tour is always available under \"About Opal\" on the Home tab.", - "TOUR_MODAL_LATER_BUTTON": "Later", - "TOUR_MODAL_TAKE_TOUR_BUTTON": "Take the tour", "TOUR_MYCHART": "On the Chart tab, you will have access to your medical data, including test results, appointments, documents, clinical questionnaires for you to fill out, and more.", "TOUR_NAME": "Opal Tour", - "TOUR_WELCOME": "Welcome to Opal!", "TOUR_WELCOME_DESC": "Opal is a patient portal designed to provide you with some of your medical information right at your fingertips. To get started, tap the arrow or swipe the screen to change slides.", "TOUR_SECURITY_TITLE": "Security", "TOUR_SECURITY_DESCRIPTION": "Remember to secure your information by protecting your phone with a passphrase, and do not leave your phone unattended.", "TRUST_DEVICE": "Set this device as a trusted device?", - "UNATTENDED": "Do not leave your phone unattended.", "UNTRANSLATED_PAGE_DISCLAIMER": "This page has not yet been translated, but its original content is provided below for reference purposes. Thank you for your understanding.", "USER_DISABLED": "User account has been disabled", "WARNING": "Warning", diff --git a/src/Languages/appTranslationTablesViews/login/fr.json b/src/Languages/appTranslationTablesViews/login/fr.json index 31f76145a..b73a662f2 100644 --- a/src/Languages/appTranslationTablesViews/login/fr.json +++ b/src/Languages/appTranslationTablesViews/login/fr.json @@ -3,11 +3,9 @@ "ALERT": "Alerte", "APP_LICENSE": "À moins d'indication contraire, le code source de ce logiciel est soumis aux termes de la licence Apache version 2.0, dont le lien est fourni ci-dessous.", "APP_VERSION": "Version de l'application", - "ATTENTION": "Attention!", "BACK": "Retour", "BROWSER_OPEN_FAILED": "Erreur lors de l'ouverture de ce lien. Veuillez réessayer plus tard.", "CANCEL": "Annuler", - "CLOSE": "Fermer", "CONFIRM": "Confirmer", "CONTACTHOSPITAL": "Contacter l'hôpital pour obtenir de l'aide", "CONTINUE": "Continuer", @@ -37,7 +35,6 @@ "GENERAL": "Général", "GETTINGTOHOSPITAL": "Directions", "GO_TO_LOGIN": "Aller à la page de connexion", - "HEADER_MESSAGE_LOGIN": "Se connecter", "HOME": "Accueil", "HOSPITAL": "Hôpital", "INACTIVE": "Par mesure de sécurité, votre session a pris fin automatiquement après 5 minutes d'inactivité. Veuillez vous connecter de nouveau.", @@ -45,14 +42,11 @@ "INVALID_EMAIL": "Adresse courriel invalide", "INVALID_EMAIL_OR_PWD": "Adresse courriel ou mot de passe invalide", "INVALID_USER": "Utilisateur invalide", - "JAILBREAK_TITLE": "Appareil débridé détecté", - "JAILBREAK_MESSAGE": "L'exécution de cette application sur un appareil débridé n'est pas permise.", "KICKEDOUT": "Votre compte a été ouvert sur un autre appareil.", "LANGUAGE": "Langue", "LEAVEMESSAGE": "Laissez-nous un message", "LICENSE": "Licence", "LOADING": "Chargement", - "LOADINGDATA": "Chargement des données", "LOGGINGIN": "Se Connecter...", "LOGIN": "Connexion", "MUHC": "CUSM", @@ -62,12 +56,9 @@ "NEURO_FULL": "Institut-hôpital neurologique de Montréal", "NEWPASSWORD": "Créez un mot de passe", "NO_PAGE_CONTENT": "Il n'y a présentement aucun contenu sur cette page. Veuillez contacter l'hôpital pour plus d'information.", - "NOINTERNETCONNECTION": "Pas de connexion Internet", - "OK": "D'accord", "OK_BUTTON": "OK", "OMI": "ÉMO", "OMI_FULL": "Établissement médical Opal", - "OPAL_ABOUT": "À propos d'Opal", "OPAL_CONTRIBUTE": "Contribuer au développement d'Opal", "OPAL_COPYRIGHT": "Groupe Informatique Opal Santé à l'IR-CUSM", "OPAL_DEMO_1": "DO1", @@ -82,7 +73,6 @@ "OUTOFTRIES": "Trop de tentatives échouées - Veuillez réessayer plus tard.", "PAGE_ACCESS_ERROR": "Erreur d'accès à cette page. Veuillez réessayer plus tard.", "PARKING": "Stationnement et transport", - "PARTNERS": "Partenaires", "PASSWORD": "Mot de passe", "PASSWORD_CRITERIA": "Ce nouveau mot de passe ne respecte pas les conditions requises", "PASSWORD_INVALID_CAPITAL": "Mot de passe nécessite au moins une lettre majuscule", @@ -101,7 +91,6 @@ "RATETHISAPP": "Évaluer l'application", "RECONNECTING": "En cours de reconnexion...", "REENTERPASSWORDPLACEHOLDER": "Confirmer le nouveau mot de passe", - "REGISTER_OPAL": "S'inscrire à Opal", "RESETERROR": "Erreur de réinitialisation du mot de passe", "RESET_PASSWORD_SENT": "Si votre adresse courriel est dans notre système, un courriel vous sera envoyé pour réinitialiser votre mot de passe. Ne fermez pas l'application pendant le processus de réinitialisation.", "RESETINSTRUCTIONS": "Il doit comporter au moins 10 caractères, dont un chiffre, une lettre minuscule, une lettre majuscule et un caractère spécial.", @@ -110,8 +99,6 @@ "RESET_PASSWORD_CODE_EXPIRED": "Vous avez pris trop de temps pour réinitialiser votre mot de passe. Veuillez réessayer.", "RETRY": "Réessayer", "RETRYRESETMESSAGE": "Votre lien de réinitialisation est invalide ou expiré. Veuillez recommencer le processus de réinitialisation de votre mot de passe.", - "SCREENSHOTTAKEN": "Capture d'écran en cours. Si vous n'avez pas effectué la capture d'écran, veuillez quitter l'application.", - "SECURE_PHONE": "N'oubliez pas de protéger votre appareil avec un mot de passe.", "SECURITY_AND_PRIVACY": "Sécurité et confidentialité", "SERVICE_AGREEMENT": "Accord de service", "SECURITYQUESTION": "Question de sécurité", @@ -123,9 +110,7 @@ "SETPASSWORDLABEL": "Nouveau mot de passe", "SHOW_LICENSE_TEXT": "Afficher la licence", "SIGNOUT": "Se déconnecter", - "SUBMITTING": "Chargement... Veuillez ne pas quitter cette page.", "SUCCESS": "Succès", - "TECHNICAL_LEGAL": "Technique / Légal", "TERMS_OF_USE": "Conditions d'utilisation", "THIRD_PARTY": "Dépendances tierces", "TOO_MANY_REQUESTS": "Trop de tentatives de connexion erronées. Veuillez réessayer plus tard.", @@ -136,17 +121,12 @@ "TOUR_GENERAL": "Dans l'onglet «\u00A0Général\u00A0», vous trouverez des annonces, des informations sur le stationnement et autres liens utiles. Vous pourrez également nous faire part de vos commentaires sur l'application.", "TOUR_HOME": "Dans l'onglet «\u00A0Accueil\u00A0», vous verrez vos informations les plus importantes d'un coup d'œil, y compris vos notifications et un bouton pour vous enregistrer à vos rendez-vous de la journée.", "TOUR_INFO": "Le bouton «\u00A0Information\u00A0» apparaîtra sur certaines pages pour vous donner des détails supplémentaires si vous en avez besoin.", - "TOUR_MODAL_INTRODUCTION": "Pour vous aider à bien débuter, une visite rapide est disponible afin de vous guider parmi les sections principales de l'application. Si vous souhaitez l'ignorer ou reprendre la visite plus tard, celle-ci restera toujours disponible dans «\u00A0À propos d'Opal\u00A0» sur l'onglet Accueil.", - "TOUR_MODAL_LATER_BUTTON": "Plus tard", - "TOUR_MODAL_TAKE_TOUR_BUTTON": "Allons-y!", "TOUR_MYCHART": "Dans l'onglet «\u00A0Dossier\u00A0», vous aurez accès à vos données médicales, y compris vos résultats de laboratoire, vos rendez-vous, des documents, des questionnaires cliniques à remplir, et plus encore.", "TOUR_NAME": "Guide d'Opal", - "TOUR_WELCOME": "Bienvenue à Opal!", "TOUR_WELCOME_DESC": "Opal est un portail patient conçu pour vous fournir quelques unes de vos informations médicales à portée de main. Pour commencer, appuyez sur la flèche ou faites glisser l'écran pour changer de page.", "TOUR_SECURITY_TITLE": "Sécurité", "TOUR_SECURITY_DESCRIPTION": "N'oubliez pas de protéger votre appareil avec un mot de passe, et ne laissez pas votre appareil sans surveillance.", "TRUST_DEVICE": "Faire confiance à cet appareil?", - "UNATTENDED": "Ne laissez pas votre appareil sans surveillance.", "UNTRANSLATED_PAGE_DISCLAIMER": "La traduction de cette page n'est pas encore disponible, mais son contenu original est tout de même affiché ci-dessous à titre de référence. Merci de votre compréhension.", "USER_DISABLED": "Le compte d'utilisateur a été désactivé", "WARNING": "Attention", diff --git a/src/Languages/appTranslationTablesViews/top-view/en.json b/src/Languages/appTranslationTablesViews/top-view/en.json index 8a830dad6..484a5708c 100644 --- a/src/Languages/appTranslationTablesViews/top-view/en.json +++ b/src/Languages/appTranslationTablesViews/top-view/en.json @@ -1,6 +1,24 @@ { - "LOADINGDATA":"Loading data", - "HOME":"Home", - "UPDATEMESSAGE":"This version of Opal is no longer supported. Please update Opal to log in.", - "UPDATEREQUIRED":"Update Required" + "ATTENTION": "Attention!", + "CLOSE": "Close", + "HEADER_MESSAGE_LOGIN": "Sign In", + "JAILBREAK_MESSAGE": "Running this app on a jailbroken or rooted device is not supported.", + "JAILBREAK_TITLE": "Jailbreak / Rooted Device Detected", + "LOADING_ACCOUNT": "Retrieving your account", + "NO_INTERNET_CONNECTION": "You are currently offline", + "OK": "Ok", + "OPAL_ABOUT": "About Opal", + "PARTNERS": "Partners", + "REGISTER_OPAL": "Register for Opal", + "SCREENSHOT_TAKEN": "Screenshot taken. If it was not you, exit the app.", + "SECURE_PHONE": "Remember to secure your information by protecting your phone with a passphrase", + "SUBMITTING": "Submitting... Please do not leave this page.", + "TECHNICAL_LEGAL": "Technical / Legal", + "TOUR_MODAL_INTRODUCTION": "To help you get started, a quick tour is available to guide you through the main sections of the app. If you choose to skip it or would like to visit it again later, the tour is always available under \"About Opal\" on the Home tab.", + "TOUR_MODAL_LATER_BUTTON": "Later", + "TOUR_MODAL_TAKE_TOUR_BUTTON": "Take the tour", + "TOUR_WELCOME": "Welcome to Opal!", + "UNATTENDED": "Do not leave your phone unattended.", + "UPDATE_MESSAGE": "This version of Opal is no longer supported. Please update Opal to log in.", + "UPDATE_REQUIRED": "Update Required" } diff --git a/src/Languages/appTranslationTablesViews/top-view/fr.json b/src/Languages/appTranslationTablesViews/top-view/fr.json index 2bd54057a..198855b60 100644 --- a/src/Languages/appTranslationTablesViews/top-view/fr.json +++ b/src/Languages/appTranslationTablesViews/top-view/fr.json @@ -1,6 +1,24 @@ { - "LOADINGDATA":"Chargement", - "HOME":"Accueil", - "UPDATEMESSAGE":"Cette version d'Opal n'est plus disponible. Veuillez installer la nouvelle version pour accéder à votre compte.", - "UPDATEREQUIRED":"Mise à jour requise" + "ATTENTION": "Attention!", + "CLOSE": "Fermer", + "HEADER_MESSAGE_LOGIN": "Se connecter", + "JAILBREAK_MESSAGE": "L'exécution de cette application sur un appareil débridé n'est pas permise.", + "JAILBREAK_TITLE": "Appareil débridé détecté", + "LOADING_ACCOUNT": "Chargement de votre compte", + "NO_INTERNET_CONNECTION": "Pas de connexion Internet", + "OK": "D'accord", + "OPAL_ABOUT": "À propos d'Opal", + "PARTNERS": "Partenaires", + "REGISTER_OPAL": "S'inscrire à Opal", + "SCREENSHOT_TAKEN": "Capture d'écran en cours. Si vous n'avez pas effectué une capture d'écran, veuillez quitter l'application.", + "SECURE_PHONE": "N'oubliez pas de protéger votre appareil avec un mot de passe.", + "SUBMITTING": "Chargement... Ne quittez pas cette page.", + "TECHNICAL_LEGAL": "Technique / Légal", + "TOUR_MODAL_INTRODUCTION": "Pour vous aider à bien débuter, une visite rapide est disponible afin de vous guider parmi les sections principales de l'application. Si vous souhaitez l'ignorer ou reprendre la visite plus tard, celle-ci restera toujours disponible dans «\u00A0À propos d'Opal\u00A0» sur l'onglet Accueil.", + "TOUR_MODAL_LATER_BUTTON": "Plus tard", + "TOUR_MODAL_TAKE_TOUR_BUTTON": "Allons-y!", + "TOUR_WELCOME": "Bienvenue à Opal!", + "UNATTENDED": "Ne laissez pas votre appareil sans surveillance.", + "UPDATE_MESSAGE": "Cette version d'Opal n'est plus disponible. Veuillez mettre à jour l'application pour accéder à votre compte.", + "UPDATE_REQUIRED": "Mise à jour requise" } diff --git a/src/index.html b/src/index.html index 4beda2e65..156e47583 100644 --- a/src/index.html +++ b/src/index.html @@ -54,16 +54,16 @@


-

{{"LOADINGDATA"|translate}}...

+

{{"LOADING_ACCOUNT"|translate}}...

-

{{"UPDATEREQUIRED"|translate}}

+

{{"UPDATE_REQUIRED"|translate}}

-

{{"UPDATEMESSAGE"|translate}}

+

{{"UPDATE_MESSAGE"|translate}}

- +
diff --git a/src/views/settings/update-security-question.html b/src/views/settings/update-security-question.html index f6d621762..0b8413e64 100644 --- a/src/views/settings/update-security-question.html +++ b/src/views/settings/update-security-question.html @@ -8,7 +8,7 @@ - +
From be64e3c07151be4f0767f9a715ff32beb145cec1 Mon Sep 17 00:00:00 2001 From: Stacey Beard <31229509+staceybeard@users.noreply.github.com> Date: Fri, 9 May 2025 10:56:15 -0400 Subject: [PATCH 04/36] ci: add workflow to build for web (#1377) Wrote a workflow to build and deploy the app for web via GitHub Actions. This is done automatically for dev, and can be run manually for other environments. --- .github/workflows/build-app.yml | 3 +- .github/workflows/build-web.yml | 91 ++++++++++++++++++++++++++++++++ .github/workflows/deploy-web.yml | 67 +++++++++++++++++++++++ 3 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/build-web.yml create mode 100644 .github/workflows/deploy-web.yml diff --git a/.github/workflows/build-app.yml b/.github/workflows/build-app.yml index e32e9733e..cb8eedc5c 100644 --- a/.github/workflows/build-app.yml +++ b/.github/workflows/build-app.yml @@ -80,7 +80,8 @@ jobs: with: persist-credentials: false - - uses: ./.github/actions/build-setup + - name: Set up build + uses: ./.github/actions/build-setup with: NPMRC_FILE: ${{ secrets.NPMRC_FILE }} ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT_CAPS)] }} diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml new file mode 100644 index 000000000..17acd7c13 --- /dev/null +++ b/.github/workflows/build-web.yml @@ -0,0 +1,91 @@ +# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Build Web +# Default to dev when running automatically (see also "env" below) +run-name: Building and (optionally) deploying the web app for ${{ inputs.ENVIRONMENT || 'dev' }} 📦🚀 +on: + # When pushing to main, automatically build for dev + push: + branches: + - main + + # When updating a pull request or adding a pull request to a merge queue, automatically build for dev + pull_request: + merge_group: + + # Offer a manual interface to build for all other environments as needed + workflow_dispatch: + inputs: + ENVIRONMENT: + description: 'Environment in which to build' + type: choice + required: true + default: 'dev' + options: + - dev + - prod + DEPLOY: + description: 'Deploy the resulting web app' + required: true + default: true + type: boolean + +env: + # Read the target environment from workflow_dispatch inputs, or default to dev + ENVIRONMENT: ${{ inputs.ENVIRONMENT || 'dev' }} + +permissions: + contents: read + +jobs: + build-web: + runs-on: ubuntu-latest + steps: + # Setup + - name: Convert environment to all caps + run: echo ENVIRONMENT_CAPS="$(echo "$ENVIRONMENT" | tr '[:lower:]' '[:upper:]')" >> "$GITHUB_ENV" + - name: Print environment + run: | + echo "Environment: $ENVIRONMENT ($ENVIRONMENT_CAPS)" + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + + - name: Set up build + uses: ./.github/actions/build-setup + with: + NPMRC_FILE: ${{ secrets.NPMRC_FILE }} + ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT_CAPS)] }} + ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT_CAPS)] }} + + # Build for web + - name: Build the web app + run: npm run build:web --env="$ENVIRONMENT" + - name: Organize the folder structure for the output + run: | + mkdir web-app + cp -r www web-app + - name: Archive build output + uses: actions/upload-artifact@v4.6.2 + with: + name: Web app + path: web-app + + # Pass $ENVIRONMENT to the next job (workaround for reusable workflows) + # See: https://github.com/actions/runner/issues/2372 + # See: https://stackoverflow.com/questions/73797254/environment-variables-in-github-actions/74217028#74217028) + outputs: + ENVIRONMENT: ${{ env.ENVIRONMENT }} + + # Call another workflow if applicable to deploy the app + deploy-web: + needs: build-web + # Deploy manually via inputs, or automatically (to dev) when building on main + if: ${{ inputs.DEPLOY || github.ref == 'refs/heads/main' }} + uses: ./.github/workflows/deploy-web.yml + with: + ENVIRONMENT: ${{ needs.build-web.outputs.ENVIRONMENT }} + secrets: + FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }} diff --git a/.github/workflows/deploy-web.yml b/.github/workflows/deploy-web.yml new file mode 100644 index 000000000..478f7ed1a --- /dev/null +++ b/.github/workflows/deploy-web.yml @@ -0,0 +1,67 @@ +# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Deploy Web +run-name: Deploying the web app for ${{ inputs.ENVIRONMENT }} 🚀 +on: + workflow_call: + inputs: + ENVIRONMENT: + required: true + type: string + secrets: + FTP_PASSWORD: + required: true + +permissions: + contents: read + +jobs: + deploy-web: + runs-on: ubuntu-latest + steps: + # Setup + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + - name: Download web build artifact (`www`) + uses: actions/download-artifact@v4.3.0 + with: + name: Web app + run-id: ${{ github.run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Install lftp + run: | + sudo apt-get install lftp + lftp --version + - name: List contents of `www` + run: ls -la www + + - name: Ensure $ENVIRONMENT is defined to avoid destructive mirroring on the server + run: | + echo "Environment: $ENVIRONMENT" + if [ -z "$ENVIRONMENT" ]; then exit 1; fi + shell: bash + env: + ENVIRONMENT: ${{ inputs.ENVIRONMENT }} + + # Upload web files + # See: https://www.cyberciti.biz/faq/lftp-mirror-example/ + # See: https://linuxconfig.org/lftp-tutorial-on-linux-with-examples + - name: Upload files using lftp + run: > + lftp -c " + set cmd:fail-exit yes; + open $FTP_HOST + user $FTP_USER $FTP_PASSWORD; + mirror --exclude='app' --exclude='content' --reverse --delete --verbose ./static/landingpage/ ./app/${ENVIRONMENT}/; + mirror --reverse --delete --use-pget-n=10 --verbose ./www/ ./app/${ENVIRONMENT}/app/; + ls -la app/${ENVIRONMENT}; + bye + " + env: + ENVIRONMENT: ${{ inputs.ENVIRONMENT }} + FTP_HOST: ${{ vars.FTP_HOST }} + FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }} + FTP_USER: ${{ vars.FTP_USER }} From 8c73ba661fcf249203d150922fb8dc8c38cd3c16 Mon Sep 17 00:00:00 2001 From: Matthias Schoettle Date: Wed, 14 May 2025 16:11:49 -0400 Subject: [PATCH 05/36] fix: ensure that security answer input field can be selected on iOS (#1378) The focus() call causes the input field to not be directly selectable on iOS. It requires the field to be tapped three times. Also fixes an issue with the header and back button not being aligned properly. --- src/css/views/security-question.view.css | 1 - .../auth/securityQuestionController.js | 10 ++- src/views/login/security-question.html | 78 +++++++++---------- 3 files changed, 44 insertions(+), 45 deletions(-) diff --git a/src/css/views/security-question.view.css b/src/css/views/security-question.view.css index 3999e55e7..82b83d3ef 100644 --- a/src/css/views/security-question.view.css +++ b/src/css/views/security-question.view.css @@ -10,7 +10,6 @@ text-align: center; top: 0; width: 100%; - touch-action: manipulation; } .security-question--col { diff --git a/src/js/controllers/auth/securityQuestionController.js b/src/js/controllers/auth/securityQuestionController.js index 2650e9888..579950b2d 100644 --- a/src/js/controllers/auth/securityQuestionController.js +++ b/src/js/controllers/auth/securityQuestionController.js @@ -25,13 +25,13 @@ .controller('SecurityQuestionController', SecurityQuestionController); SecurityQuestionController.$inject = ['$window', '$timeout', 'ResetPassword', 'RequestToServer', 'EncryptionService', - 'UUID', 'UserAuthorizationInfo', '$state', 'DeviceIdentifiers', 'Navigator', '$scope', 'Params', + 'UUID', 'UserAuthorizationInfo', '$state', 'DeviceIdentifiers', 'Navigator', '$scope', 'Params', 'Constants', 'UserHospitalPreferences']; /* @ngInject */ function SecurityQuestionController($window, $timeout, ResetPassword, RequestToServer, EncryptionService, UUID, UserAuthorizationInfo, $state, DeviceIdentifiers, Navigator, $scope, - Params, UserHospitalPreferences) { + Params, Constants, UserHospitalPreferences) { var vm = this; var deviceID; @@ -129,6 +129,7 @@ vm.goToReset = goToReset; vm.isThereSelectedHospital = isThereSelectedHospital; vm.lockout = lockout; + vm.iosStyleFix = ons.platform.isIOS() ? {'padding-top': '0px'} : {}; activate(); @@ -216,8 +217,9 @@ $scope.initNavigator.on('postpush', () => { $timeout(() => { - const securityAnswer = document.getElementById('security_answer_input'); - if (securityAnswer) { + const securityAnswer = document.getElementById('security-answer-input'); + // iOS blocks focus events and causes issues focussing the input field afterwards + if (securityAnswer && !(Constants.app && ons.platform.isIOS())) { securityAnswer.focus(); } }); diff --git a/src/views/login/security-question.html b/src/views/login/security-question.html index a44d07faa..164f94bd3 100644 --- a/src/views/login/security-question.html +++ b/src/views/login/security-question.html @@ -6,11 +6,13 @@ -
- {{"BACK"|translate}} - {{"HOME"|translate}} +
+ {{"BACK"|translate}} + {{"HOME"|translate}}
-
+
{{"SECURITYQUESTION"|translate}}
{{"FORGOTPASSWORD_NOQUESTION"|translate}}
@@ -29,43 +31,37 @@
- + -
- -
- -
- - - -
- - - - {{security.alert.content|translate}} - +
+ + +
+ + +
+ + + + {{security.alert.content|translate}} +
@@ -74,7 +70,9 @@

{{"RESETERROR"|translate}}

{{"RETRYRESETMESSAGE"|translate}}

- {{"RETRY"|translate}} - {{"HOME"|translate}} + {{"RETRY"|translate}} + {{"HOME"|translate}} From ca8e51c66bd15ae6611c0a782996920a7dd4f1b2 Mon Sep 17 00:00:00 2001 From: Stacey Beard <31229509+staceybeard@users.noreply.github.com> Date: Tue, 20 May 2025 14:24:18 -0400 Subject: [PATCH 06/36] ci: add jobs to deploy iOS and Android apps to Firebase (#1380) Wrote jobs to deploy the iOS and Android apps to Firebase. This is done automatically for dev, and can be run manually for other environments. - Also removed unnecessary capitalization of the ENVIRONMENT variable, since GitHub Actions variables are case-insensitive. --- .github/actions/build-setup/action.yml | 2 +- .github/actions/deploy-app-setup/action.yml | 37 ++++++ ...build-app.yml => build-and-deploy-app.yml} | 124 ++++++++++++++---- .github/workflows/build-web.yml | 4 +- .github/workflows/ci.yml | 2 +- .github/workflows/deploy-web.yml | 2 +- .pre-commit-config.yaml | 2 +- .typos.toml | 2 +- 8 files changed, 142 insertions(+), 33 deletions(-) create mode 100644 .github/actions/deploy-app-setup/action.yml rename .github/workflows/{build-app.yml => build-and-deploy-app.yml} (53%) diff --git a/.github/actions/build-setup/action.yml b/.github/actions/build-setup/action.yml index 8e49ce4d1..7503b363a 100644 --- a/.github/actions/build-setup/action.yml +++ b/.github/actions/build-setup/action.yml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre # # SPDX-License-Identifier: Apache-2.0 diff --git a/.github/actions/deploy-app-setup/action.yml b/.github/actions/deploy-app-setup/action.yml new file mode 100644 index 000000000..5eae0d14c --- /dev/null +++ b/.github/actions/deploy-app-setup/action.yml @@ -0,0 +1,37 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Deploy App Setup +description: Setup before deploying the mobile app to Firebase + +inputs: + ENVIRONMENT: + description: 'Environment in which to deploy the app' + required: true + GOOGLE_APPLICATION_CREDENTIALS: + description: 'Contents of the service account file used to access the Firebase project for the given environment' + required: true + +runs: + using: "composite" + steps: + - name: Prepare Firebase release notes + # Save release notes as a multiline string: https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#multiline-strings + run: | + { + echo 'RELEASE_NOTES<> "$GITHUB_ENV" + shell: bash + env: + ENVIRONMENT: ${{ inputs.ENVIRONMENT }} + + - name: Load service account used to access Firebase + run: | + echo "$GOOGLE_APPLICATION_CREDENTIALS" > service-account.txt + echo GOOGLE_APPLICATION_CREDENTIALS=service-account.txt >> "$GITHUB_ENV" + shell: bash + env: + GOOGLE_APPLICATION_CREDENTIALS: ${{ inputs.GOOGLE_APPLICATION_CREDENTIALS }} diff --git a/.github/workflows/build-app.yml b/.github/workflows/build-and-deploy-app.yml similarity index 53% rename from .github/workflows/build-app.yml rename to .github/workflows/build-and-deploy-app.yml index cb8eedc5c..b6101eb62 100644 --- a/.github/workflows/build-app.yml +++ b/.github/workflows/build-and-deploy-app.yml @@ -1,12 +1,12 @@ -# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre # # SPDX-License-Identifier: Apache-2.0 # This workflow is explained in `docs/deployment/ci-cd.md`; please keep that documentation file up to date when making changes here. -name: Build App +name: Build and Deploy App # Default to dev when running automatically (see also "env" below) -run-name: Building the app for ${{ inputs.ENVIRONMENT || 'dev' }} 📦 +run-name: Building and (optionally) deploying the mobile app for ${{ inputs.ENVIRONMENT || 'dev' }} 📦🚀 on: # When pushing to main, automatically build for dev push: @@ -24,10 +24,17 @@ on: options: - dev - prod + DEPLOY: + description: 'Deploy the resulting mobile app' + required: true + default: true + type: boolean -# Read the target environment from workflow_dispatch inputs, or default to dev env: + # Read the target environment from workflow_dispatch inputs, or default to dev ENVIRONMENT: ${{ inputs.ENVIRONMENT || 'dev' }} + # The name of the group to which the app is deployed (via Firebase App Distribution) + FIREBASE_GROUP: "general" permissions: contents: read @@ -37,55 +44,51 @@ jobs: runs-on: macos-latest steps: # Setup - - name: Convert environment to all caps - run: echo ENVIRONMENT_CAPS="$(echo "$ENVIRONMENT" | tr '[:lower:]' '[:upper:]')" >> "$GITHUB_ENV" - name: Print environment - run: | - echo "Environment: $ENVIRONMENT ($ENVIRONMENT_CAPS)" + run: echo "Environment = $ENVIRONMENT" - uses: actions/checkout@v4.2.2 with: persist-credentials: false - - name: Set up build uses: ./.github/actions/build-setup with: NPMRC_FILE: ${{ secrets.NPMRC_FILE }} - ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT_CAPS)] }} - ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT_CAPS)] }} + ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT)] }} + ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT)] }} # Build the app - name: Build the app run: npm run build:app:android --env="$ENVIRONMENT" - name: Rename build output - id: rename-output + id: rename-android run: | mv "./platforms/android/app/build/outputs/apk/debug/app-debug.apk" "opal-${ENVIRONMENT}.apk" echo "ARTIFACT_NAME=opal-${ENVIRONMENT}.apk" >> "$GITHUB_OUTPUT" - name: Archive build output uses: actions/upload-artifact@v4.6.2 with: - name: Android app - path: ${{ steps.rename-output.outputs.ARTIFACT_NAME }} + name: android-app + path: ${{ steps.rename-android.outputs.ARTIFACT_NAME }} + + outputs: + ARTIFACT_NAME: ${{ steps.rename-android.outputs.ARTIFACT_NAME }} + build-ios: runs-on: macos-latest steps: # Setup - - name: Convert environment to all caps - run: echo ENVIRONMENT_CAPS="$(echo "$ENVIRONMENT" | tr '[:lower:]' '[:upper:]')" >> "$GITHUB_ENV" - name: Print environment - run: | - echo "Environment: $ENVIRONMENT ($ENVIRONMENT_CAPS)" + run: echo "Environment = $ENVIRONMENT" - uses: actions/checkout@v4.2.2 with: persist-credentials: false - - name: Set up build uses: ./.github/actions/build-setup with: NPMRC_FILE: ${{ secrets.NPMRC_FILE }} - ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT_CAPS)] }} - ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT_CAPS)] }} + ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT)] }} + ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT)] }} # Install an Apple certificate and provisioning profile used to build the app for iOS # See: https://docs.github.com/en/actions/use-cases-and-examples/deploying/installing-an-apple-certificate-on-macos-runners-for-xcode-development @@ -93,7 +96,7 @@ jobs: env: BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64_FILE }} P12_PASSWORD: ${{ secrets.BUILD_CERTIFICATE_PASSWORD }} - BUILD_PROVISION_PROFILE_BASE64: ${{ secrets[format('{0}_PROVISIONING_PROFILE_BASE64_FILE', env.ENVIRONMENT_CAPS)] }} # zizmor: ignore[overprovisioned-secrets] + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets[format('{0}_PROVISIONING_PROFILE_BASE64_FILE', env.ENVIRONMENT)] }} # zizmor: ignore[overprovisioned-secrets] KEYCHAIN_PASSWORD: ${{ secrets.TEMPORARY_KEYCHAIN_PASSWORD }} run: | # Create variables @@ -128,14 +131,83 @@ jobs: run: npm run build:app:ios:ci --env="$ENVIRONMENT" --devteam="$IOS_DEVELOPMENT_TEAM" --provisioningprofile="$PROVISIONING_PROFILE_UUID" env: IOS_DEVELOPMENT_TEAM: ${{ secrets.IOS_DEVELOPMENT_TEAM }} - PROVISIONING_PROFILE_UUID: ${{ secrets[format('{0}_PROVISIONING_PROFILE_UUID', env.ENVIRONMENT_CAPS)] }} # zizmor: ignore[overprovisioned-secrets] + PROVISIONING_PROFILE_UUID: ${{ secrets[format('{0}_PROVISIONING_PROFILE_UUID', env.ENVIRONMENT)] }} # zizmor: ignore[overprovisioned-secrets] - name: Rename build output - id: rename-output + id: rename-ios run: | mv ./platforms/ios/build/Debug-iphoneos/*.ipa "opal-${ENVIRONMENT}.ipa" echo "ARTIFACT_NAME=opal-${ENVIRONMENT}.ipa" >> "$GITHUB_OUTPUT" - name: Archive build output uses: actions/upload-artifact@v4.6.2 with: - name: iOS app - path: ${{ steps.rename-output.outputs.ARTIFACT_NAME }} + name: ios-app + path: ${{ steps.rename-ios.outputs.ARTIFACT_NAME }} + + outputs: + ARTIFACT_NAME: ${{ steps.rename-ios.outputs.ARTIFACT_NAME }} + + + deploy-android: + needs: build-android + runs-on: ubuntu-latest + # Deploy manually via inputs, or automatically (to dev) when building on main + if: ${{ inputs.DEPLOY || github.ref == 'refs/heads/main' }} + steps: + # Setup + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + - name: Download Android build artifact + uses: actions/download-artifact@v4.3.0 + with: + name: android-app + run-id: ${{ github.run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Set up deployment + uses: ./.github/actions/deploy-app-setup + with: + ENVIRONMENT: ${{ env.ENVIRONMENT }} + GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets[format('{0}_FIREBASE_SERVICE_ACCOUNT', env.ENVIRONMENT)] }} # zizmor: ignore[overprovisioned-secrets] + + # Deploy the app + # Deployment via firebase-tools implicitly uses a service account assigned to $GOOGLE_APPLICATION_CREDENTIALS (from values defined in the GitHub project settings) + # This service account provides permissions for Firebase app distribution + # See: https://firebase.google.com/docs/admin/setup#initialize_the_sdk_in_non-google_environments + - name: Deploy the app + run: npx firebase-tools appdistribution:distribute "$ARTIFACT_NAME" --app "$FIREBASE_APP_ANDROID" --release-notes "$RELEASE_NOTES" --groups "$FIREBASE_GROUP" + env: + ARTIFACT_NAME: ${{ needs.build-android.outputs.ARTIFACT_NAME }} + FIREBASE_APP_ANDROID: ${{ vars[format('{0}_FIREBASE_APP_ANDROID', env.ENVIRONMENT)] }} + FIREBASE_GROUP: ${{ env.FIREBASE_GROUP }} + + + deploy-ios: + needs: build-ios + runs-on: ubuntu-latest + # Deploy manually via inputs, or automatically (to dev) when building on main + if: ${{ inputs.DEPLOY || github.ref == 'refs/heads/main' }} + steps: + # Setup + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + - name: Download iOS build artifact + uses: actions/download-artifact@v4.3.0 + with: + name: ios-app + run-id: ${{ github.run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Set up deployment + uses: ./.github/actions/deploy-app-setup + with: + ENVIRONMENT: ${{ env.ENVIRONMENT }} + GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets[format('{0}_FIREBASE_SERVICE_ACCOUNT', env.ENVIRONMENT)] }} # zizmor: ignore[overprovisioned-secrets] + + # Deploy the app + # Deployment implicitly uses $GOOGLE_APPLICATION_CREDENTIALS; see deploy-android above for more details + - name: Deploy the app + run: npx firebase-tools appdistribution:distribute "$ARTIFACT_NAME" --app "$FIREBASE_APP_IOS" --release-notes "$RELEASE_NOTES" --groups "$FIREBASE_GROUP" + env: + ARTIFACT_NAME: ${{ needs.build-ios.outputs.ARTIFACT_NAME }} + FIREBASE_APP_IOS: ${{ vars[format('{0}_FIREBASE_APP_IOS', env.ENVIRONMENT)] }} + FIREBASE_GROUP: ${{ env.FIREBASE_GROUP }} diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index 17acd7c13..c5e12c046 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre # # SPDX-License-Identifier: Apache-2.0 @@ -79,7 +79,7 @@ jobs: outputs: ENVIRONMENT: ${{ env.ENVIRONMENT }} - # Call another workflow if applicable to deploy the app + # Call another workflow if applicable to deploy the web app deploy-web: needs: build-web # Deploy manually via inputs, or automatically (to dev) when building on main diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 509a7440f..4f3b9d4b2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre # # SPDX-License-Identifier: Apache-2.0 diff --git a/.github/workflows/deploy-web.yml b/.github/workflows/deploy-web.yml index 478f7ed1a..4b189fdcd 100644 --- a/.github/workflows/deploy-web.yml +++ b/.github/workflows/deploy-web.yml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre # # SPDX-License-Identifier: Apache-2.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 76ddf8a47..6a4b096d9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre # # SPDX-License-Identifier: Apache-2.0 diff --git a/.typos.toml b/.typos.toml index 0cc875e74..0e4cf4192 100644 --- a/.typos.toml +++ b/.typos.toml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre # # SPDX-License-Identifier: Apache-2.0 From 72a8c2c7c080c9c44746a30e2621c826ffd7c399 Mon Sep 17 00:00:00 2001 From: Stacey Beard <31229509+staceybeard@users.noreply.github.com> Date: Wed, 21 May 2025 17:28:50 -0400 Subject: [PATCH 07/36] fix: clean up translations (#1381) Cleaned up our translation files. - Removed duplicates between `login` and `all-views`. - Sorted translations in alphabetical order. - Finished applying our new naming convention to all keys (using underscores to separate words). This ensures legibility and integrates better with IDEs' spellcheckers. - Re-indented the FR file `all-views`, which didn't match the other files. Now all files are indented the same. - Removed all unused translations. --- .../all-views/en.json | 273 +++----- .../all-views/fr.json | 662 ++++++++---------- .../appTranslationTablesViews/login/en.json | 82 +-- .../appTranslationTablesViews/login/fr.json | 82 +-- .../auth/securityQuestionController.js | 8 +- .../auth/setNewPasswordController.js | 2 +- .../feedback/feedbackController.js | 2 +- .../controllers/info-tab/infoTabController.js | 4 +- .../controllers/loading/loadingController.js | 2 +- .../controllers/parking/parkingController.js | 2 +- .../answeredQuestionnaireController.js | 2 +- .../questionnaireMainController.js | 2 +- .../questionnaireNotifRedirectController.js | 2 +- .../settings/caregiversController.js | 1 + .../settings/changeSettingController.js | 10 +- .../controllers/settings/patientController.js | 1 + .../updateSecurityQuestionController.js | 2 +- .../devices/etekcityScaleController.js | 6 +- .../devices/vitalTracerWatchController.js | 6 +- .../devices/xiaomiScaleController.js | 6 +- ...ent-test-results-by-datetime.controller.js | 2 +- ...patient-test-results-by-type.controller.js | 2 +- src/js/controllers/tour/tourController.js | 4 +- src/js/directives/pdf-viewer.directive.js | 2 +- src/js/services/concurrent-login.service.js | 2 +- src/js/services/fileManagerService.js | 2 +- src/js/services/questionnairesService.js | 8 +- .../general/announcements/announcements.html | 4 +- src/views/general/feedback/feedback.html | 2 +- src/views/general/general.html | 2 +- src/views/general/parking/parking.html | 4 +- src/views/home/checkin/checkin-list.html | 2 +- src/views/init/technical-legal.html | 2 +- src/views/login/forgot-password.html | 6 +- src/views/login/login.html | 4 +- src/views/login/new-password.html | 12 +- src/views/login/security-question.html | 10 +- src/views/modals/info-modal.html | 2 +- .../personal/appointments/appointments.html | 2 +- .../appointments/individual-appointment.html | 4 +- src/views/personal/diagnosis/diagnosis.html | 4 +- src/views/personal/documents/documents.html | 2 +- .../documents/individual-document.html | 4 +- .../personal/documents/info-popover.html | 4 +- .../personal/education/education-booklet.html | 2 +- .../education/individual-material.html | 6 +- .../education/material-rating-template.html | 6 +- .../education/table-contents-popover.html | 2 +- .../personal/notifications/notifications.html | 2 +- src/views/personal/personal.html | 4 +- .../questionnaires/answeredQuestionnaire.html | 4 +- .../questionnaires/questionnaires.html | 4 +- .../research-studies/individual-study.html | 2 +- .../test-results-by-datetime.html | 2 +- .../test-results/test-results-by-type.html | 2 +- .../test-results-info-labdelay.html | 2 +- .../personal/test-results/test-results.html | 4 +- .../team-messages.html | 4 +- src/views/settings/settings.html | 2 +- src/views/settings/update-account-field.html | 10 +- .../settings/update-security-question.html | 4 +- .../smartdevices/devices/etekcity_scale.html | 22 +- .../devices/vitaltracer_watch.html | 18 +- .../smartdevices/devices/xiaomi_scale.html | 22 +- src/views/smartdevices/smartdevices-info.html | 4 +- src/views/smartdevices/smartdevices.html | 16 +- src/views/tabs/tabs.html | 2 +- 67 files changed, 642 insertions(+), 753 deletions(-) diff --git a/src/Languages/appTranslationTablesViews/all-views/en.json b/src/Languages/appTranslationTablesViews/all-views/en.json index 171aa0d59..cc508bb1f 100644 --- a/src/Languages/appTranslationTablesViews/all-views/en.json +++ b/src/Languages/appTranslationTablesViews/all-views/en.json @@ -1,57 +1,52 @@ { "ADDED": "Added at", - "ALIAS": "Nickname", "ANSWER": "Answer", - "ANSWER2": "Answer", "APPOINTMENT": "Appointment", "APPOINTMENTS": "Appointments", "APPOINTMENT_ABOUT": "About this appointment", "APPOINTMENT_CANCELLED": "This appointment has been cancelled.", "APPOINTMENT_OPEN_ERROR": "An error occurred while opening this appointment.", - "APPOINTMENT_ROOM": "Appointment Room", - "AVAILABLEDEVICES": "Available only on a device.", + "AVAILABLE_DEVICES": "Available only on a device.", "BEGIN": "Begin", "CARNET_SANTE": "Québec Health Booklet", "CHARACTERS_LEFT": "characters left", + "CHART_ALL_RANGE_SELECTOR": "All", + "CHART_DESCRIPTION": "The Chart tab contains all the information regarding your electronic health data.", + "CHART_NON_NUMERIC_VALUES": "These results can't be charted because at least one of them isn't a number", + "CHART_NO_PLOT_AVAILABLE": "No plot available", "CHART_ONE_MONTH_SELECTOR": "1m", - "CHART_THREE_MONTHS_SELECTOR": "3m", "CHART_SIX_MONTHS_SELECTOR": "6m", + "CHART_THREE_MONTHS_SELECTOR": "3m", "CHART_YEAR_SELECTOR": "1y", - "CHART_ALL_RANGE_SELECTOR": "All", - "CHART_NO_PLOT_AVAILABLE": "No plot available", - "CHART_NON_NUMERIC_VALUES": "These results can't be charted because at least one of them isn't a number", "CHECKIN": "Check-in", "CHECKIN_ALL_TODAY": "Check in", "CHECKIN_ERROR_GEOLOCATION": "Unable to detect location; check your app or device permission settings.", - "CHECKIN_ERROR_ONE": "Unable to check in for this appointment. Please try again, or go to the reception.", "CHECKIN_ERROR_MULTIPLE": "Unable to check in for one or more appointments. Please try again, or go to the reception.", + "CHECKIN_ERROR_ONE": "Unable to check in for this appointment. Please try again, or go to the reception.", "CHECKIN_MESSAGE_AFTER": "You are checked in for your appointment.", "CHECKIN_MESSAGE_AFTER_PLURAL": "You are checked in for your appointments.", "CHECKIN_MESSAGE_BEFORE": "Check in for your appointment.", "CHECKIN_MESSAGE_BEFORE_PLURAL": "Check in for your appointments.", "CHECKIN_NONE": "No appointments available for check-in today.", "CHECKIN_NOT_ALLOWED": "Check-in will be available on arrival at the hospital.", - "CHECKIN_PATIENT_HEADER_SELF": "Your appointments", "CHECKIN_PATIENT_HEADER_NON_SELF": "{name}'s appointments", - "CLINICAL_REPORTS": "Clinical Reports", + "CHECKIN_PATIENT_HEADER_SELF": "Your appointments", "CLINICAL_QUESTIONNAIRES": "Clinical Questionnaires", + "CLINICAL_REPORTS": "Clinical Reports", "COLLECTION_DATE": "Collected Date", "CONFIRM_DOWNLOAD": "The document must be temporarily downloaded to your device before proceeding.", "CONSENT": "Consent", "CONSENT_FORMS": "Consent Forms", + "CONSENT_FORMS_NONE_COMPLETED": "No completed consent forms", + "CONSENT_FORMS_NONE_NEW": "No new consent forms", + "CONSENT_FORMS_NONE_PROGRESS": "No consent forms in progress", "CONSENT_FORM_ACKNOWLEDGEMENT": "I agree to participate in this research study according to the conditions stated in this consent form.", "CONSENT_FORM_BEGIN_INSTRUCTION": "Tap \"Begin\" or swipe to the left to respond to the consent form.", "CONSENT_FORM_GO_BACK_TO_LIST": "Go back to the consent form list", - "CONSENT_FORMS_NONE_COMPLETED": "No completed consent forms", - "CONSENT_FORMS_NONE_PROGRESS": "No consent forms in progress", - "CONSENT_FORMS_NONE_NEW": "No new consent forms", "CONSENT_FORM_PASSWORD_INSTRUCTION": "Please enter your password to confirm your consent.", "CONSENT_FORM_RESUME_INSTRUCTION": "Tap \"Resume\" or swipe to the left to resume the consent form.", "CONSENT_FORM_SUBMIT_INSTRUCTION": "To submit the consent form, please answer the question below and tap the submit button.", "CONSENT_FORM_THANKS": "Thank you for completing this consent form", - "CONTACTHOSPITAL": "Contact the hospital for assistance", - "CONTINUE": "Continue", - "DATE": "Date", "DATE_END": "End Date", "DATE_START": "Start Date", "DAYS": "{ days } {days, plural, =0{days} one{day} other{days}}", @@ -64,135 +59,111 @@ "DOC_DATE_CREATED": "Date Created:", "DOC_DATE_UPDATED": "Date Updated:", "DOC_INFO": "Document Info", - "DOC_SIGNEDBY": "Signed By:", + "DOC_SIGNED_BY": "Signed By:", "DONE": "Done", "EDUCATION_DESCRIPTION": "This section contains information specific to your treatment and general diagnosis.", "EDU_OPEN_ERROR": "Error opening this reference material", - "EMAIL": "Email", - "EMAIL_TAKEN": "E-mail has already been taken", - "ENTERANANSWER": "Enter an answer", - "ENTERANSWERPLACEHOLDER": "Enter your answer...", - "ENTEREMAIL": "Enter your Email Address:", - "ENTEREMAILADDRESS": "Enter your new email address:", - "ENTERNEWPASSWORD": "Enter your new password:", - "ENTERNEWTELEPHONE": "Enter your new ten digit telephone number:", - "ENTEROLDPASSWORD": "Enter your old password:", - "ENTEROLDPASSWORDPLACEHOLDER": "Old password", - "ENTERPASSWORD": "Enter your Password", - "ENTERYOURALIAS": "Enter your new nickname", - "ERRORANSWERNOTMATCH": "Answer does not match our records", - "ERROROBTAININGDOCUMENT": "Error obtaining document from server", + "ENTER_NEW_PASSWORD": "Enter your new password:", + "ENTER_OLD_PASSWORD": "Enter your old password:", + "ENTER_OLD_PASSWORD_PLACEHOLDER": "Old password", + "ENTER_PASSWORD": "Enter your Password", "ERROR_GETTING_EDU_MATERIAL": "Error getting reference material contents from server.", "ERROR_IN_VIDEO_URL_OR_FORMAT": "Error in video url or format", + "ERROR_OBTAINING_DOCUMENT": "Error obtaining document from server", "EXIT_APP": "Are you sure you wish to exit Opal?", - "Electrolytes": "Electrolytes", - "FEEDBACK": "Feedback", "FEEDBACK_ERROR": "An error occurred while sending your feedback. Please try again later.", + "FEEDBACK_LEAVE_MESSAGE": "Leave us a message", "FEEDBACK_MESSAGE": "Your feedback is invaluable to us. Please take a moment to let us know what you think about Opal.", "FEEDBACK_RECEIVED": "Your feedback has been received.", "FEEDBACK_SUBMIT_AS": "Submitting feedback as:", - "FIELD_UPDATED": "Field has been updated", "FIND_DOCTOR": "Find a Family Doctor", "FONTSIZE": "Font size", "FOR": "For", "FUTURE": "Future", - "GENERAL": "General", - "GENERALANNOUNCEMENTS": "General Announcements", - "GENERALANNOUNCEMENTSHEADER": "Announcements", + "GENERAL_ANNOUNCEMENTS": "General Announcements", + "GENERAL_ANNOUNCEMENTS_HEADER": "Announcements", "GENERAL_DESCRIPTION": "On the General tab, you will find useful information to facilitate your hospital visit.", - "GOTOSUMMARY": "Go To Summary Page", - "GOTO_ROOM": "Appointment Room:", + "GO_TO_ROOM": "Appointment Room:", + "GO_TO_SUMMARY": "Go To Summary Page", "HEADER_MESSAGE_HOME": "Home", "HIDE": "Hide", "HOME_DESCRIPTION": "On the Home tab, you will be provided with news about your medical status, documents, hospital announcements and appointments.", - "HOSPITALPARKING": "Parking", + "HOSPITAL_PARKING": "Parking", "INDIVIDUAL_ANNOUNCEMENT_HEADER": "Announcement", "INVALID_OLD_PASSWORD": "Incorrect old password", "INVALID_PASSWORD": "Invalid password.", "INVESTIGATOR": "Investigator", "LABELS": "Labels", - "LAB_BYDATE": "By Date", - "LAB_BYTYPE": "By Type", + "LAB_BY_DATE": "By Date", + "LAB_BY_TYPE": "By Type", "LAB_DELAY": "Delay Settings", - "LAB_DELAY_INFO_HEADER": "Changing lab results delay settings", - "LAB_DELAY_INFO_TEXT": "The delay parameters for lab results can be changed upon request. You can find a printable “Access to lab results” form in the Opal General tab or by making a request at the hospital.", "LAB_DELAY_DEFAULTS_HEADER": "The default delay parameters set by the institution are:", "LAB_DELAY_DEFAULTS_INTERPRETABLE": "Interpretable result ({ yesno, select, yes{yes} no{no} other{?} }) :", + "LAB_DELAY_INFO_HEADER": "Changing lab results delay settings", + "LAB_DELAY_INFO_TEXT": "The delay parameters for lab results can be changed upon request. You can find a printable “Access to lab results” form in the Opal General tab or by making a request at the hospital.", "LAB_DELAY_INTERPRETABLE": "Interpretable: You will be able to interpret these results yourself after receiving instruction from your healthcare team.", - "LAB_DELAY_NONINTERPRETABLE": "Non-interpretable: These results are generally subject to interpretation by a healthcare professional and cannot be interpreted by yourself.", + "LAB_DELAY_NON_INTERPRETABLE": "Non-interpretable: These results are generally subject to interpretation by a healthcare professional and cannot be interpreted by yourself.", "LAB_DISCLAIMER": "Not for clinical use", - "LAB_INFO_FLAGS": "Results outside the normal range are accompanied by (L), (H) or (C), where (L) indicates a low value, (H) indicates a high value and (C) indicates a critical value.", - "LAB_INFO_NORMAL_HEADER": "Normal", - "LAB_INFO_NORMAL_TEXT": "Your blood test results are within the normal range.", "LAB_INFO_CRITICAL_HEADER": "Critical (C)", "LAB_INFO_CRITICAL_TEXT": "Your blood test results are significantly outside of the normal range. The laboratory will usually communicate these results to your treating team in an expedited manner. Your treating team will evaluate them and will notify you if any action needs to be taken with regards to these abnormal blood test results.", + "LAB_INFO_FLAGS": "Results outside the normal range are accompanied by (L), (H) or (C), where (L) indicates a low value, (H) indicates a high value and (C) indicates a critical value.", "LAB_INFO_HIGH_LOW_HEADER": "High (H) or low (L)", "LAB_INFO_HIGH_LOW_TEXT": "Your blood test results are outside the normal range. Your treating team will evaluate them and order further studies or treatments if necessary.", + "LAB_INFO_NORMAL_HEADER": "Normal", + "LAB_INFO_NORMAL_TEXT": "Your blood test results are within the normal range.", "LAB_LEARN_ABOUT": "Learn About", - "LAB_MAX_NORM": "Max Normal Value", - "LAB_MIN_NORM": "Min Normal Value", "LAB_NAME": "Lab Test Name", "LAB_NORM": "Normal Range", "LAB_RECENT_RESULT": "Recent Result", - "LAB_RESULT_INTERPRETABLE": "Result interpretable:", - "LAB_RESULT_DELAY": "Delay:", "LAB_RESULTS": "Lab Results", "LAB_RESULTS_NONE": "No lab results", + "LAB_RESULT_DELAY": "Delay:", + "LAB_RESULT_INTERPRETABLE": "Result interpretable:", "LAB_TEST_INFO": "Test Information", "LAB_YOUR_RESULT": "Your Result", "LANGUAGE": "Language", "LARGE": "Large", - "LEAVEMESSAGE": "Leave us a message", "LEAVING_APP": "Note that you're leaving the app and are no longer relying on Opal to protect your document data.", - "LEAVING_APP4": "Note that you are leaving the app to open an external web browser.", "LEAVING_APP_LABS": "Please note that you are leaving the app to open an external website. This site is offered for informational purposes only; don't provide any of your personal data.", - "LOADING": "Loading", - "LOADING_ERROR": "An error occurred while loading your data. Please try again later.", - "LOADINGAPPOINTMENTS": "Loading your appointments...", + "LOADING_APPOINTMENTS": "Loading your appointments...", "LOADING_DATA": "Loading data", - "LOADINGDOCUMENT": "Loading your document...", - "LOADINGLABRESULTS": "Loading your lab results...", - "LOADINGMATERIAL": "Loading your reference material...", - "LOADINGQUESTIONNAIRE": "Loading your questionnaire...", + "LOADING_DOCUMENT": "Loading your document...", + "LOADING_ERROR": "An error occurred while loading your data. Please try again later.", + "LOADING_LAB_RESULTS": "Loading your lab results...", + "LOADING_MATERIAL": "Loading your reference material...", + "LOADING_QUESTIONNAIRE": "Loading your questionnaire...", "MARK_ALL_READ": "Mark all as read", "MEDIUM": "Medium", "MESSAGE": "Message", - "MINUTES": "Minutes", "MORE_EDU_MATERIAL": "Additional Reference Material", - "MYCHART_DESCRIPTION": "The Chart tab contains all the information regarding your electronic health data.", "NAME": "Name", "NO": "No", - "NOAPPOINTMENTS": "No appointments", - "NOAPPOINTMENTINFO": "Information concerning this appointment is not available at this time.", - "NODIAGNOSIS": "No diagnoses available", - "NOGENERALANNOUNCEMENTS": "You have no general announcements", - "NONOTIFICATIONS": "You have no new notifications", - "NOPARKINGSITES": "No parking and transportation information available", - "NOPATIENTDOCUMENTSAVAILABLE": "You have no patient documents available", "NORMAL_RANGE": "Normal Range", - "NOTEAMMESSAGES": "You have no treatment team messages", - "NOTIFICATION_OPEN_ERROR": "An error occurred while loading this notification.", "NOTIFICATIONS": "Notifications", + "NOTIFICATION_OPEN_ERROR": "An error occurred while loading this notification.", + "NO_APPOINTMENTS": "No appointments", + "NO_APPOINTMENT_INFO": "Information concerning this appointment is not available at this time.", + "NO_DIAGNOSIS": "No diagnoses available", + "NO_GENERAL_ANNOUNCEMENTS": "You have no general announcements", + "NO_NOTIFICATIONS": "You have no new notifications", + "NO_PARKING_SITES": "No parking and transportation information available", + "NO_PATIENT_DOCUMENTS_AVAILABLE": "You have no patient documents available", + "NO_TEAM_MESSAGES": "You have no treatment team messages", "NO_UPCOMING_APPOINTMENTS": "You have no upcoming appointments.", - "OF": "of", - "ONCOLOGIST": "Oncologist", - "OPALPROBLEMSUBJECT": "Found a Bug/Problem using Opal", - "OPAL_WEBSITE": "Opal's Website", - "OPENEXTERNALVIEWER": "Open in an external viewer", + "OPEN_EXTERNAL_VIEWER": "Open in an external viewer", "OPEN_LINK": "Open link", "OPEN_PDF": "Open document", "OPEN_PDF_ERROR": "Error opening PDF", "OTHER": "Other", - "OUTOFTRIES": "Too many failed attempts - Please try again later.", "PAST": "Past", "PERSONAL": "Personal", - "PHONENUMBER": "Phone Number", + "PHONE_NUMBER": "Phone Number", "PLOT_VIEW": "Plot View", "PREFERENCES": "Preferences", - "PRIMARYDOCTOR": "Primary Oncologist", "QUEBEC_MEDICAL_SCHEDULER": "Québec Medical Appointment Scheduler", "QUESTION": "Question", "QUESTIONNAIRES": "Questionnaires", + "QUESTIONNAIRE_ANSWERED_BY": "Answered By:", "QUESTIONNAIRE_BEGIN_INSTRUCTION": "Tap \"Begin\" or swipe to the left to start the questionnaire.", "QUESTIONNAIRE_CHECKBOX_CHOSEN": "You have selected", "QUESTIONNAIRE_CHECKBOX_OPTION": "option(s)", @@ -201,38 +172,50 @@ "QUESTIONNAIRE_DATE_ADDED": "Date Added:", "QUESTIONNAIRE_DATE_ANSWERED": "Date Answered:", "QUESTIONNAIRE_DATE_LAST_UPDATED": "Last Updated:", - "QUESTIONNAIRE_ANSWERED_BY": "Answered By:", "QUESTIONNAIRE_DESCRIPTION": "Description: ", - "QUESTIONNAIRE_END": "End", "QUESTIONNAIRE_GO_BACK_TO_LIST": "Go back to questionnaire list", + "QUESTIONNAIRE_GO_TO_QUESTION": "Go to Question", "QUESTIONNAIRE_HOME": "Home", "QUESTIONNAIRE_INSTRUCTION": "Instruction: ", "QUESTIONNAIRE_INSTRUCTIONS": "Answer the questions in red. Questions in green can be edited. Once all questions are answered, you can submit.", - "QUESTIONNAIRE_INSTRUCTIONS4": "Go to Question", "QUESTIONNAIRE_IN_PROGRESS": "In Progress", "QUESTIONNAIRE_IN_PROGRESS_BY": "In Progress By:", "QUESTIONNAIRE_LOCKING_ERROR": "This questionnaire can't be answered because another user with access to this patient's file has already started it. Once this user has completed the questionnaire, you'll be able to view the answers on the Completed tab.", "QUESTIONNAIRE_NEW": "New", "QUESTIONNAIRE_NONE_COMPLETED": "No completed questionnaires.", "QUESTIONNAIRE_NONE_NEW": "No new questionnaires.", - "QUESTIONNAIRE_NONE_OF_THE_ABOVE": "None of the above", "QUESTIONNAIRE_NONE_PROGRESS": "No questionnaires in progress.", "QUESTIONNAIRE_NOT_ALLOWED_TO_ANSWER": "Your level of access to this patient's data does not allow answering questionnaires on their behalf. Once the questionnaire has been completed by another user, you'll be able to view the answers on the Completed tab.", "QUESTIONNAIRE_RESUME_INSTRUCTION": "Tap \"Resume\" or swipe to the left to resume the questionnaire.", "QUESTIONNAIRE_SECTION_INSTRUCTION": "Section instruction:", "QUESTIONNAIRE_SELECT": "Select", - "QUESTIONNAIRE_SUBMIT": "Are you sure you want to submit the questionnaire? You cannot change your answers after submitting.", - "QUESTIONNAIRE_SUBMIT_AS_SELF": "Submitting answers as: {userName}", "QUESTIONNAIRE_SUBMIT_AS_OTHER": "Submitting answers as: {userName} (on behalf of {patientName})", + "QUESTIONNAIRE_SUBMIT_AS_SELF": "Submitting answers as: {userName}", "QUESTIONNAIRE_SUBMIT_INSTRUCTION": "Please click the submit button to complete the questionnaire", "QUESTIONNAIRE_THANKS": "Thank you for completing this questionnaire", - "RATEIT": "Rate It", - "RATETHISAPP": "Rate This App", - "RATETHISMATERIAL": "Rate this reference material", + "RATE_IT": "Rate It", + "RATE_THIS_MATERIAL": "Rate this reference material", "REDIRECT_TO_QUESTIONNAIRE": "Redirecting to questionnaire...", - "REENTER_EMAIL": "Re-enter new email", "REFERENCE_MATERIAL_NONE": "You have no reference material", "REFRESH_ERROR": "An error occurred while attempting to refresh your data.", + "RELATIONSHIPS": "My relationships", + "RELATIONSHIPS_CAREGIVERS": "My caregivers", + "RELATIONSHIPS_CAREGIVERS_DESCRIPTION": "List of caregivers who have access to your data in Opal.", + "RELATIONSHIPS_CAREGIVERS_ERROR": "An error occurred while retrieving caregivers.", + "RELATIONSHIPS_CAREGIVERS_NONE": "No caregivers are linked to your account.", + "RELATIONSHIPS_ERROR": "An error occurred while retrieving your data.", + "RELATIONSHIPS_PATIENTS": "My patients", + "RELATIONSHIPS_PATIENTS_ACCESS": "Access", + "RELATIONSHIPS_PATIENTS_AVAILABLE": "Available patient charts", + "RELATIONSHIPS_PATIENTS_DESCRIPTION": "List of patients whose data you can access in Opal.", + "RELATIONSHIPS_PATIENTS_NONE": "No patients are linked to your account.", + "RELATIONSHIPS_PATIENTS_NOT_AVAILABLE": "No available profile", + "RELATIONSHIPS_PATIENTS_STATUS_CON": "Confirmed", + "RELATIONSHIPS_PATIENTS_STATUS_DEN": "Denied", + "RELATIONSHIPS_PATIENTS_STATUS_EXP": "Expired", + "RELATIONSHIPS_PATIENTS_STATUS_PEN": "Pending", + "RELATIONSHIPS_PATIENTS_STATUS_REV": "Revoked", + "RELATIONSHIP_TYPES_ERROR": "An error occurred while retrieving relationship types.", "RESEARCH": "Research", "RESEARCH_DESCRIPTION": "The Research section of Opal contains information about the research studies that you are participating in.", "RESEARCH_FEEDBACK": "Research Feedback", @@ -244,38 +227,19 @@ "RESULT": "Result", "RESULTS": "Results", "RESUME": "Resume", - "RELATIONSHIPS": "My relationships", - "RELATIONSHIPS_CAREGIVERS": "My caregivers", - "RELATIONSHIPS_CAREGIVERS_NONE": "No caregivers are linked to your account.", - "RELATIONSHIPS_CAREGIVERS_ERROR": "An error occurred while retrieving caregivers.", - "RELATIONSHIPS_CAREGIVERS_DESCRIPTION": "List of caregivers who have access to your data in Opal.", - "RELATIONSHIPS_PATIENTS_ACCESS": "Access", - "RELATIONSHIPS_PATIENTS_STATUS_PEN": "Pending", - "RELATIONSHIPS_PATIENTS_STATUS_CON": "Confirmed", - "RELATIONSHIPS_PATIENTS_STATUS_DEN": "Denied", - "RELATIONSHIPS_PATIENTS_STATUS_EXP": "Expired", - "RELATIONSHIPS_PATIENTS_STATUS_REV": "Revoked", - "RELATIONSHIPS_PATIENTS_AVAILABLE": "Available patient charts", - "RELATIONSHIPS_PATIENTS_NOT_AVAILABLE": "No available profile", - "RELATIONSHIPS_PATIENTS": "My patients", - "RELATIONSHIPS_PATIENTS_NONE": "No patients are linked to your account.", - "RELATIONSHIPS_PATIENTS_DESCRIPTION": "List of patients whose data you can access in Opal.", - "RELATIONSHIP_TYPES_ERROR": "An error occurred while retrieving relationship types.", - "RELATIONSHIPS_ERROR": "An error occurred while retrieving your data.", "SAVING_QUESTIONNAIRE_ANSWER": "Saving answers...", "SEARCH": "Search", "SEARCH_EDU": "Search by title", "SECTION": "Section", - "SECURITYQUESTION": "Security Question", "SECURITY_QUESTIONS": "Security Questions", "SECURITY_QUESTION_ANSWER_UPDATE_SUCCESS": "Security questions and answers updated. Signing out...", "SECURITY_QUESTION_LENGTH_REQUIREMENT_1": "Your security answer should be at least", "SECURITY_QUESTION_LENGTH_REQUIREMENT_2": "characters long", "SECURITY_QUESTION_LOGOUT_WARNING": "If you make any changes, you will be logged out of Opal and you will need to log in again.", - "SELECTFONTSIZE": "Select font size", - "SELECTLANGUAGE": "Select language", - "SELECT_3_SECURITY_QUESTIONS": "You may change one or more of your security questions or answers here.", + "SECURITY_QUESTIONS_INSTRUCTIONS": "You may change one or more of your security questions or answers here.", "SELECT_DROPDOWN_QUESTION": "Select a new security question", + "SELECT_FONT_SIZE": "Select font size", + "SELECT_LANGUAGE": "Select language", "SEND": "Send", "SEND_ANOTHER": "Send another", "SENT_TO": "Sent to", @@ -284,36 +248,34 @@ "SERVER_ERROR_SUBMIT_QUESTIONNAIRE": "Server problem: the questionnaire cannot be submitted. Please try again later.", "SHARE": "Share", "SHOW": "Show", - "SIGNOUT": "Sign out", + "SIGN_OUT": "Sign out", "SMALL": "Small", - "SMARTDEVICES": "Smart Devices", - "SMARTDEVICES_BACK": "Go back to Smart Devices", - "SMARTDEVICES_LIST_INFO": "This page shows the current supported devices. Select a device from the list to synchronize data from that device.", - "SMARTDEVICES_BLUETOOTH_DISABLED": "Bluetooth is disabled", - "SMARTDEVICES_BLUETOOTH_PROMPT": "Please enable it and then press the refresh button below.", - "SMARTDEVICES_BLUETOOTH_REFRESH": "Refresh", - "SMARTDEVICES_BLUETOOTH_UNAVAILABLE": "Bluetooth is only supported on a mobile device", - "SMARTDEVICES_CONNECTING": "Connecting to device...", - "SMARTDEVICES_ERROR_BACKEND": "Error sending data to hospital", - "SMARTDEVICES_ERROR_NO_DATA": "No data retrieved from device, please redo the measurement.", - "SMARTDEVICES_ETEKCITY": "Etekcity Smart Scale (ESF24)", - "SMARTDEVICES_INFO_SUBMITTED": "If you have any questions or concerns, please let your clinical team know.", - "SMARTDEVICES_MULTIPLE": "Multiple devices detected. Please specify the device to read from:", - "SMARTDEVICES_SCALE_INSTRUCTIONS": "Please step on the scale and weigh yourself. Once your weight has been measured, tap the Read Weight button below.", - "SMARTDEVICES_SCALE_ERROR_NO_DEVICE": "No device found. Please redo the measurement and try again.", - "SMARTDEVICES_SCALE_READ": "Read Weight", - "SMARTDEVICES_SCALE_SUBMIT": "Submit Weight to Hospital", - "SMARTDEVICES_SCALE_SUBMITTED": "Thank you for submitting your weight.", - "SMARTDEVICES_SELECT": "Select", - "SMARTDEVICES_VITAL_SIGNS": "Vital signs", - "SMARTDEVICES_VITALTRACER": "VitalTracer Watch", - "SMARTDEVICES_VITALTRACER_ERROR_NO_DEVICE": "No device found. Please activate the watch's screen and try again.", - "SMARTDEVICES_VITALTRACER_READ": "Read Vital Signs", - "SMARTDEVICES_VITALTRACER_SUBMITTED": "Thank you for submitting your vital signs.", - "SMARTDEVICES_WEIGHT": "Weight", - "SMARTDEVICES_XIAOMI_SCALE": "Xiaomi Mi Scale", - "STAGE": "Step", - "STAGEOF": "Step {{index}} of {{total}}", + "SMART_DEVICES": "Smart Devices", + "SMART_DEVICES_BACK": "Go back to Smart Devices", + "SMART_DEVICES_BLUETOOTH_DISABLED": "Bluetooth is disabled", + "SMART_DEVICES_BLUETOOTH_PROMPT": "Please enable it and then press the refresh button below.", + "SMART_DEVICES_BLUETOOTH_REFRESH": "Refresh", + "SMART_DEVICES_BLUETOOTH_UNAVAILABLE": "Bluetooth is only supported on a mobile device", + "SMART_DEVICES_CONNECTING": "Connecting to device...", + "SMART_DEVICES_ERROR_BACKEND": "Error sending data to hospital", + "SMART_DEVICES_ERROR_NO_DATA": "No data retrieved from device, please redo the measurement.", + "SMART_DEVICES_ETEKCITY": "Etekcity Smart Scale (ESF24)", + "SMART_DEVICES_INFO_SUBMITTED": "If you have any questions or concerns, please let your clinical team know.", + "SMART_DEVICES_LIST_INFO": "This page shows the current supported devices. Select a device from the list to synchronize data from that device.", + "SMART_DEVICES_MULTIPLE": "Multiple devices detected. Please specify the device to read from:", + "SMART_DEVICES_SCALE_ERROR_NO_DEVICE": "No device found. Please redo the measurement and try again.", + "SMART_DEVICES_SCALE_INSTRUCTIONS": "Please step on the scale and weigh yourself. Once your weight has been measured, tap the Read Weight button below.", + "SMART_DEVICES_SCALE_READ": "Read Weight", + "SMART_DEVICES_SCALE_SUBMIT": "Submit Weight to Hospital", + "SMART_DEVICES_SCALE_SUBMITTED": "Thank you for submitting your weight.", + "SMART_DEVICES_SELECT": "Select", + "SMART_DEVICES_VITALTRACER": "VitalTracer Watch", + "SMART_DEVICES_VITALTRACER_ERROR_NO_DEVICE": "No device found. Please activate the watch's screen and try again.", + "SMART_DEVICES_VITALTRACER_READ": "Read Vital Signs", + "SMART_DEVICES_VITALTRACER_SUBMITTED": "Thank you for submitting your vital signs.", + "SMART_DEVICES_VITAL_SIGNS": "Vital signs", + "SMART_DEVICES_WEIGHT": "Weight", + "SMART_DEVICES_XIAOMI_SCALE": "Xiaomi Mi Scale", "STUDIES": "Studies", "STUDIES_DESCRIPTION": "The Studies section contains information about research studies that you have been invited to participate in.", "STUDIES_NONE": "You have no studies", @@ -322,33 +284,28 @@ "STUDY_STATUS_DECLINED": "You declined this study.", "STUDY_STATUS_INVITED": "You are invited to this study.", "SUBMIT": "Submit", - "SUBMIT_AND_LOGOUT": "Submit and Logout", - "SUBMITANSWERS": "Submit Answers", - "SUBMITCONSENT": "Submit Consent Form", "SUBMITTING_QUESTIONNAIRE": "Submitting questionnaire...", + "SUBMIT_AND_LOGOUT": "Submit and Logout", + "SUBMIT_ANSWERS": "Submit Answers", + "SUBMIT_CONSENT": "Submit Consent Form", "SUMMARY": "Summary Page", - "TABLEOFCONTENTS": "Table of Contents", + "TABLE_OF_CONTENTS": "Table of Contents", "TABLE_VIEW": "Table View", - "TAPTOZOOM": "Tap screen to zoom", - "TEAMMESSAGES": "Messages", - "THANKYOUFORFEEDBACK": "Thank you for your feedback", + "TAP_TO_ZOOM": "Tap screen to zoom", + "TEAM_MESSAGES": "Messages", + "THANK_YOU_FOR_FEEDBACK": "Thank you for your feedback", "TITLE": "Info", "TO": "to", "TODAY": "Today", "TOO_MANY_REQUESTS_CONSENT": "Too many unsuccessful password attempts. Please try again later.", - "TREATINGTEAMNOTIFICATIONS": "Treating Team Messages", - "TREATMENTSESSION": "Treatment Sessions", - "Tumor markers": "Tumor Markers", + "TREATING_TEAM_NOTIFICATIONS": "Treating Team Messages", "UNABLE_TO_SHARE_DOCUMENT": "Unable to share document", "UPCOMING_APPOINTMENTS": "Upcoming Appointments", "UPDATE": "Update", - "UPDATED_EMAIL": "Email successfully updated", - "UPDATEPASSWORDBUTTON": "Update Password", - "UPDATEPASSWORDTITLE": "Update Password", - "USER_DISABLED": "Your account has been blocked, please contact the hospital for further assistance.", + "UPDATE_PASSWORD_BUTTON": "Update Password", + "UPDATE_PASSWORD_TITLE": "Update Password", "WAITING_ROOM": "Waiting Room:", "WARNING": "Warning", "YES": "Yes", - "YOU": "you", - "VIDEO": "Video" + "YOU": "you" } diff --git a/src/Languages/appTranslationTablesViews/all-views/fr.json b/src/Languages/appTranslationTablesViews/all-views/fr.json index cd664a143..c9e800600 100644 --- a/src/Languages/appTranslationTablesViews/all-views/fr.json +++ b/src/Languages/appTranslationTablesViews/all-views/fr.json @@ -1,355 +1,311 @@ { - "ADDED": "Reçu à", - "ALIAS": "Surnom", - "ANSWER": "Réponse", - "ANSWER2": "Réponse", - "APPOINTMENT": "Rendez-vous", - "APPOINTMENTS": "Rendez-vous", - "APPOINTMENT_ABOUT": "À propos de ce rendez-vous", - "APPOINTMENT_CANCELLED": "Ce rendez-vous a été annulé.", - "APPOINTMENT_OPEN_ERROR": "Une erreur s'est produite en ouvrant ce rendez-vous.", - "APPOINTMENT_ROOM": "Localisation du rendez-vous", - "AVAILABLEDEVICES": "Disponible seulement sur un appareil mobile.", - "BEGIN": "Débuter", - "CANCERCENTER": "Centre du cancer des Cèdres", - "CARNET_SANTE": "Carnet santé Québec", - "CHARACTERS_LEFT": "caractères restants", - "CHART_ONE_MONTH_SELECTOR": "1m", - "CHART_THREE_MONTHS_SELECTOR": "3m", - "CHART_SIX_MONTHS_SELECTOR": "6m", - "CHART_YEAR_SELECTOR": "1a", - "CHART_ALL_RANGE_SELECTOR": "Tout", - "CHART_NO_PLOT_AVAILABLE": "Aucun graphique disponible", - "CHART_NON_NUMERIC_VALUES": "Ces résultats ne peuvent pas être représentés car au moins l'un d'entre eux n'est pas un nombre", - "CHECKIN": "Enregistrement", - "CHECKIN_ALL_TODAY": "Enregistrer", - "CHECKIN_ERROR_GEOLOCATION": "Erreur de géolocalisation; vérifiez les paramètres d'autorisation de l'appli ou de l'appareil.", - "CHECKIN_ERROR_ONE": "Impossible de s'enregistrer pour ce rendez-vous. Veuillez réessayer ou vous présenter à la réception.", - "CHECKIN_ERROR_MULTIPLE": "Impossible de s'enregistrer pour votre/vos rendez-vous. Veuillez réessayer ou vous présenter à la réception.", - "CHECKIN_MESSAGE_AFTER": "Vous êtes enregistré(e) pour votre rendez-vous.", - "CHECKIN_MESSAGE_AFTER_PLURAL": "Vous êtes enregistré(e) pour vos rendez-vous.", - "CHECKIN_MESSAGE_BEFORE": "Enregistrez-vous pour votre rendez-vous.", - "CHECKIN_MESSAGE_BEFORE_PLURAL": "Enregistrez-vous pour vos rendez-vous.", - "CHECKIN_NONE": "Aucun rendez-vous disponible pour enregistrement aujourd'hui.", - "CHECKIN_NOT_ALLOWED": "L'enregistrement sera disponible dès l'arrivée à l'hôpital.", - "CHECKIN_PATIENT_HEADER_SELF": "Vos rendez-vous", - "CHECKIN_PATIENT_HEADER_NON_SELF": "Rendez-vous de {name}", - "CLINICAL_REPORTS": "Rapports cliniques", - "CLINICAL_QUESTIONNAIRES": "Questionnaires cliniques", - "COLLECTION_DATE": "Date de Collecte", - "CONFIRM_DOWNLOAD": "Le document doit temporairement être téléchargé sur votre appareil avant de continuer.", - "CONSENT": "Accepter", - "CONSENT_FORMS": "Formulaires de consentement", - "CONSENT_FORM_ACKNOWLEDGEMENT": "Je consens à participer à ce projet de recherche selon les conditions mentionnées dans le formulaire de consentement.", - "CONSENT_FORM_BEGIN_INSTRUCTION": "Cliquez sur \"Débuter\" ou glissez vers la gauche pour répondre au formulaire de consentement.", - "CONSENT_FORM_GO_BACK_TO_LIST": "Retourner à la liste", - "CONSENT_FORMS_NONE_COMPLETED": "Aucun formulaire rempli", - "CONSENT_FORMS_NONE_PROGRESS": "Aucun formulaire en cours", - "CONSENT_FORMS_NONE_NEW": "Aucun nouveau formulaire", - "CONSENT_FORM_PASSWORD_INSTRUCTION": "Veuillez entrer votre mot de passe pour confirmer votre consentement.", - "CONSENT_FORM_RESUME_INSTRUCTION": "Cliquez sur \"Reprendre\" ou glissez vers la gauche pour continuer le formulaire de consentement.", - "CONSENT_FORM_SUBMIT_INSTRUCTION": "Pour soummettre le formulaire de consentement, veuillez répondre à la question ci-dessous et appuyer sur le bouton \"Soumettre le formulaire\".", - "CONSENT_FORM_THANKS": "Merci d'avoir complété ce formulaire", - "CONTACTHOSPITAL": "Contactez l'hôpital pour assistance", - "CONTINUE": "Continuer", - "DATE": "Date", - "DATE_END": "Date de fin", - "DATE_START": "Date de début", - "DAYS": "{ days } {days, plural, =0{jours} one{jour} other{jours}}", - "DEAR": "Chère/Cher", - "DECLINE": "Refuser", - "DETECTING_LOCATION": "Détection de votre emplacement...", - "DIAGNOSIS": "Diagnostic", - "DOCUMENT": "Document", - "DOC_ABOUT": "À propos de ce document", - "DOC_DATE_CREATED": "Créé le:", - "DOC_DATE_UPDATED": "Mis à jour le:", - "DOC_INFO": "Informations sur ce document", - "DOC_SIGNEDBY": "Signé par:", - "DONE": "Finir", - "EDUCATION_DESCRIPTION": "Cette section contient des informations spécifiques à votre traitement et à votre diagnostic en général.", - "EDU_OPEN_ERROR": "Erreur lors de l'ouverture du document de référence", - "EMAIL": "Courriel", - "EMAIL_TAKEN": "Cet adresse courriel a déjà été pris", - "ENTERANANSWER": "Entrez une réponse", - "ENTERANSWERPLACEHOLDER": "Entrez votre réponse...", - "ENTEREMAIL": "Entrez votre adresse courriel:", - "ENTEREMAILADDRESS": "Entrez votre nouvelle adresse courriel:", - "ENTERNEWPASSWORD": "Entrez votre nouveau mot de passe :", - "ENTERNEWTELEPHONE": "Entrez votre numéro de téléphone:", - "ENTEROLDPASSWORD": "Entrez votre mot de passe actuel :", - "ENTEROLDPASSWORDPLACEHOLDER": "Mot de passe actuel", - "ENTERPASSWORD": "Entrez votre mot de passe:", - "ENTERYOURALIAS": "Entrez votre nouveau pseudonyme", - "ERRORANSWERNOTMATCH": "Votre réponse ne correspond pas à celle dans nos dossiers.", - "ERROROBTAININGDOCUMENT": "Erreur lors de l'obtention du document à partir du serveur", - "ERROR_GETTING_EDU_MATERIAL": "Erreur. Le contenu de ce document de référence n'a pas pu être téléchargé du serveur.", - "ERROR_IN_VIDEO_URL_OR_FORMAT": "Erreur dans l'URL ou le format de la vidéo", - "EXIT_APP": "Voulez-vous vraiment quitter Opal?", - "Electrolytes": "Électrolytes", - "FEEDBACK": "Commentaires", - "FEEDBACK_ERROR": "Une erreur s'est produite lors de l'envoi de vos commentaires. Veuillez réessayer plus tard.", - "FEEDBACK_MESSAGE": "Votre commentaire est important pour nous. S'il vous plaît, prenez le temps de nous faire savoir ce que vous pensez d'Opal. Chaque commentaire est apprécié.", - "FEEDBACK_RECEIVED": "Vos commentaires ont été reçus.", - "FEEDBACK_SUBMIT_AS": "Sera envoyé au nom de :", - "FIELD_UPDATED": "Le champ a été mis à jour", - "FIND_DOCTOR": "Accès à un médecin de famille", - "FONTSIZE": "Taille de la police", - "FOR": "Pour", - "FUTURE": "Rendez-vous à venir", - "GENERAL": "Général", - "GENERALANNOUNCEMENTS": "Annonces générales", - "GENERALANNOUNCEMENTSHEADER": "Annonces", - "GENERAL_DESCRIPTION": "Dans l'onglet Général, vous trouverez des renseignements utiles pour faciliter votre visite à l'hôpital.", - "GOTOSUMMARY": "Aller au Résumé", - "GOTO_ROOM": "Salle de rendez-vous :", - "HEADER_MESSAGE_HOME": "Accueil", - "HIDE": "Cacher", - "HOME_DESCRIPTION": "Dans l'onglet Accueil, vous pourrez accéder aux nouvelles concernant votre statut médical, vos documents, les annonces de l'hôpital et vos rendez-vous.", - "HOSPITALPARKING": "Stationnement", - "INDIVIDUAL_ANNOUNCEMENT_HEADER": "Annonce", - "INVALID_OLD_PASSWORD": "Mot de passe actuel invalide", - "INVALID_PASSWORD": "Mot de passe invalide.", - "INVESTIGATOR": "Chercheur(euse)", - "LABELS": "Étiquettes", - "LAB_BYDATE": "Date", - "LAB_BYTYPE": "Type", - "LAB_DELAY": "Paramètres de délai", - "LAB_DELAY_INFO_HEADER": "Modification des paramètres de délai des résultats de laboratoire", - "LAB_DELAY_INFO_TEXT": "Les paramètres de délai des résultats de laboratoire peuvent être modifiés sur demande. Vous pouvez trouver un formulaire imprimable « d'Accès aux résultats de laboratoire » dans le menu Bibliothèque d'Opal ou en faisant la demande à l'hôpital.", - "LAB_DELAY_DEFAULTS_HEADER": "Les délais par défaut fixés par l'établissement sont :", - "LAB_DELAY_DEFAULTS_INTERPRETABLE": "Résultat interprétable ({ yesno, select, yes{oui} no{non} other{?} }) :", - "LAB_DELAY_INTERPRETABLE": "Après avoir reçu l'enseignement de la part de votre équipe soignante vous serez en mesure d'interpréter ces résultats par vous-même.", - "LAB_DELAY_NONINTERPRETABLE": "Non-interprétable : Ces résultats portent une part d'interprétation d'un professionnel de la santé et ne peuvent donc pas être interprétés par vous-même.", - "LAB_DISCLAIMER": "Pas pour usage clinique", - "LAB_INFO_FLAGS": "Les résultats en dehors de la plage de valeurs normales sont accompagnés d'un (L), d'un (H) ou d'un (C), où (L) indique une valeur faible, (H) indique une valeur élevée et (C) indique une valeur critique.", - "LAB_INFO_NORMAL_HEADER": "Valeurs normales", - "LAB_INFO_NORMAL_TEXT": "Les résultats de vos analyses de sang se situent dans la plage normale.", - "LAB_INFO_CRITICAL_HEADER": "Valeurs critiques (C)", - "LAB_INFO_CRITICAL_TEXT": "Les résultats de vos tests sanguins sont considérablement en dehors de la plage normale. Le laboratoire communiquera généralement ces résultats à votre équipe soignante de manière accélérée. Votre équipe soignante les évaluera, et vous informera si des mesures doivent être prises en ce qui concerne vos résultats de tests sanguins anormaux.", - "LAB_INFO_HIGH_LOW_HEADER": "Valeurs faibles (L) ou élevées (H)", - "LAB_INFO_HIGH_LOW_TEXT": "Les résultats de vos analyses de sang sont en dehors de la plage normale. Votre équipe de traitement les évaluera et ordonnera d'autres études ou traitements si nécessaire.", - "LAB_LEARN_ABOUT": "En savoir plus sur:", - "LAB_MAX_NORM": "Valeur max. normale", - "LAB_MIN_NORM": "Valeur min. normale", - "LAB_NAME": "Nom de l'analyse", - "LAB_NORM": "Valeurs normales", - "LAB_RECENT_RESULT": "Résultat récent", - "LAB_RESULT_INTERPRETABLE": "Résultat interprétable :", - "LAB_RESULT_DELAY": "Délai :", - "LAB_RESULTS": "Résultats de laboratoire", - "LAB_RESULTS_NONE": "Pas de résultats de laboratoire disponibles", - "LAB_TEST_INFO": "Détails de l'analyse", - "LAB_YOUR_RESULT": "Votre résultat", - "LANGUAGE": "Langue", - "LARGE": "Grand", - "LEAVEMESSAGE": "Laissez-nous un message", - "LEAVING_APP": "Notez que vous quittez l'application et ne comptez plus sur Opal pour protéger votre document.", - "LEAVING_APP4": "Notez que vous quittez l'application pour ouvrir un navigateur externe.", - "LEAVING_APP_LABS": "Veuillez noter que vous quittez l'application pour ouvrir un site Web externe. Ce site est offert à titre informatif seulement; ne fournissez aucune de vos données personnelles.", - "LOADING": "Chargement", - "LOADING_ERROR": "Une erreur est survenue lors du chargement de vos données. Veuillez réessayer plus tard.", - "LOADINGAPPOINTMENTS": "Chargement de vos rendez-vous...", - "LOADING_DATA": "Chargement de vos données", - "LOADINGDOCUMENT": "Chargement de votre document...", - "LOADINGLABRESULTS": "Chargement de vos résultats sanguins...", - "LOADINGMATERIAL": "Chargement de votre document de référence...", - "LOADINGQUESTIONNAIRE": "Chargement de votre questionnaire...", - "MARK_ALL_READ": "Tout marquer comme lu", - "MEDIUM": "Moyen", - "MESSAGE": "Message", - "MINUTES": "Minutes", - "MORE_EDU_MATERIAL": "Document de référence supplémentaire", - "MYCHART_DESCRIPTION": "L'onglet Dossier contient toutes les données éléctroniques concernant votre santé.", - "NAME": "Nom", - "NO": "Non", - "NOAPPOINTMENTS": "Aucun rendez-vous", - "NOAPPOINTMENTINFO": "Aucune information concernant ce rendez-vous n'est disponible pour le moment.", - "NODIAGNOSIS": "Pas de diagnostic", - "NOGENERALANNOUNCEMENTS": "Pas d’annonces générales", - "NONOTIFICATIONS": "Vous n'avez pas de nouvelles notifications", - "NOPARKINGSITES": "Aucune information disponible sur le stationnement et le transport", - "NOPATIENTDOCUMENTSAVAILABLE": "Vous n'avez aucun document de patient disponible", - "NORMAL_RANGE": "Plage normale", - "NOTEAMMESSAGES": "Pas de messages de l'équipe de traitement", - "NOTIFICATION_OPEN_ERROR": "Une erreur s'est produite lors du chargement de cette notification.", - "NOTIFICATIONS": "Notifications", - "NO_UPCOMING_APPOINTMENTS": "Vous n'avez aucun rendez-vous à venir.", - "OF": "de", - "ONCOLOGIST": "Oncologues", - "OPALPROBLEMSUBJECT": "Trouvé un bogue / problème en utilisant Opal", - "OPAL_WEBSITE": "Site Web d'Opal", - "OPENEXTERNALVIEWER": "Ouvrir dans une appli externe", - "OPEN_LINK": "Ouvrir le lien", - "OPEN_PDF": "Ouvrir le document", - "OPEN_PDF_ERROR": "Erreur lors de l'ouverture du PDF", - "OTHER": "Autres", - "OUTOFTRIES": "Trop de tentatives échouées - Veuillez réessayer plus tard.", - "PAST": "Rendez-vous complétés", - "PERSONAL": "Personnel", - "PHONENUMBER": "Téléphone", - "PLOT_VIEW": "Vue Graphique", - "PREFERENCES": "Préférences", - "PRIMARYDOCTOR": "Oncologue principal", - "QUEBEC_MEDICAL_SCHEDULER": "Rendez-vous santé Québec", - "QUESTION": "Question", - "QUESTIONNAIRES": "Questionnaires", - "QUESTIONNAIRE_BEGIN_INSTRUCTION": "Cliquez sur \"Débuter\" ou glissez vers la gauche pour commencer le questionnaire.", - "QUESTIONNAIRE_CHECKBOX_CHOSEN": "Vous avez choisi", - "QUESTIONNAIRE_CHECKBOX_OPTION": "option(s)", - "QUESTIONNAIRE_COMPLETED": "Complétés", - "QUESTIONNAIRE_CONTACT": "Si vous avez des questions ou des préoccupations, veuillez en informer votre équipe soignante.", - "QUESTIONNAIRE_DATE_ADDED": "Ajouté le :", - "QUESTIONNAIRE_DATE_ANSWERED": "Complété le :", - "QUESTIONNAIRE_DATE_LAST_UPDATED": "Dernière mise à jour :", - "QUESTIONNAIRE_ANSWERED_BY": "Complété par :", - "QUESTIONNAIRE_DESCRIPTION": "Description: ", - "QUESTIONNAIRE_END": "Fin", - "QUESTIONNAIRE_GO_BACK_TO_LIST": "Retourner à la liste", - "QUESTIONNAIRE_HOME": "Accueil", - "QUESTIONNAIRE_INSTRUCTION": "Instruction: ", - "QUESTIONNAIRE_INSTRUCTIONS": "Répondez aux questions en rouge. Les questions en vert peuvent être modifiées. Une fois toutes les questions répondues, vous pouvez soumettre vos réponses.", - "QUESTIONNAIRE_INSTRUCTIONS4": "Aller à la question", - "QUESTIONNAIRE_IN_PROGRESS": "En cours", - "QUESTIONNAIRE_IN_PROGRESS_BY": "En cours par :", - "QUESTIONNAIRE_LOCKING_ERROR": "Ce questionnaire ne peut être complété car un autre utilisateur ayant access au dossier de ce patient l'a déjà commencé. Une fois le questionnaire complété, vous pourrez consulter les réponses sur l'onglet « Complétés ».", - "QUESTIONNAIRE_NEW": "Nouveaux", - "QUESTIONNAIRE_NONE_COMPLETED": "Pas de questionnaire rempli.", - "QUESTIONNAIRE_NONE_NEW": "Pas de nouveau questionnaire.", - "QUESTIONNAIRE_NONE_OF_THE_ABOVE": "Aucune de ces réponses", - "QUESTIONNAIRE_NONE_PROGRESS": "Pas de questionnaire en cours.", - "QUESTIONNAIRE_NOT_ALLOWED_TO_ANSWER": "Votre niveau d'accès aux données de ce patient ne permet pas de répondre aux questionnaires à sa place. Une fois le questionnaire complété par un autre utilisateur, vous pourrez en consulter les réponses sur l'onglet « Complétés ».", - "QUESTIONNAIRE_RESUME_INSTRUCTION": "Cliquez sur \"continuer\" ou glissez vers la gauche pour poursuivre le questionnaire.", - "QUESTIONNAIRE_SECTION_INSTRUCTION": "Instructions pour cette section", - "QUESTIONNAIRE_SELECT": "Choisissez", - "QUESTIONNAIRE_SUBMIT": "Voulez-vous vraiment soumettre le questionnaire? Vous ne pourrez pas modifier vos réponses après la soumission.", - "QUESTIONNAIRE_SUBMIT_AS_SELF": "Soumission des réponses par : {userName}", - "QUESTIONNAIRE_SUBMIT_AS_OTHER": "Soumission des réponses par : {userName} (au nom de {patientName})", - "QUESTIONNAIRE_SUBMIT_INSTRUCTION": "Veuillez appuyer sur le bouton \"Soumettre les réponses\" pour compléter le questionnaire.", - "QUESTIONNAIRE_THANKS": "Merci d'avoir complété ce questionnaire", - "RATEIT": "Évaluer", - "RATETHISAPP": "Évaluer l'application", - "RATETHISMATERIAL": "Évaluer ce document de référence", - "REDIRECT_TO_QUESTIONNAIRE": "Redirection vers le questionnaire...", - "REENTER_EMAIL": "Entrez encore le nouveau courriel", - "REFERENCE_MATERIAL_NONE": "Vous n’avez pas de documents de référence", - "REFRESH_ERROR": "Une erreur s'est produite en rafraichissant vos données.", - "RESEARCH": "Recherche", - "RESEARCH_FEEDBACK": "Commentaires sur la recherche", - "RESEARCH_FEEDBACK_MESSAGE": "Veuillez utiliser ce formulaire pour fournir des commentaires sur les études de recherche en cours dans Opal. Vous pouvez également utiliser ce formulaire pour révoquer votre consentement pour une étude de recherche à laquelle vous avez précédemment consenti en utilisant Opal.", - "RESEARCH_FEEDBACK_PLACEHOLDER": "Indiquez le nom complet de l'étude de recherche et la raison de vos commentaires (commentaires généraux ou révocation du consentement).", - "RESEARCH_DESCRIPTION": "La section Recherche contient des informations sur les études de recherche auxquelles vous participez.", - "RESEARCH_QUESTIONNAIRES": "Questionnaires de recherche", - "RESEARCH_REFERENCE_MATERIAL": "Documents de référence de recherche", - "RESEARCH_REFERENCE_SHORT": "Référence recherche", - "RESULT": "Résultat", - "RESULTS": "Résultats", - "RESUME": "Continuer", - "RELATIONSHIPS": "Mes relations", - "RELATIONSHIPS_CAREGIVERS": "Mes proches aidants", - "RELATIONSHIPS_CAREGIVERS_NONE": "Aucun proche aidant n'est relié à ce compte.", - "RELATIONSHIPS_CAREGIVERS_ERROR": "Une erreur s'est produite lors du chargement des données.", - "RELATIONSHIPS_CAREGIVERS_DESCRIPTION": "Liste des proches aidants qui ont accès à vos données dans l'application Opal.", - "RELATIONSHIPS_PATIENTS_ACCESS": "Accès", - "RELATIONSHIPS_PATIENTS_STATUS_PEN": "En attente", - "RELATIONSHIPS_PATIENTS_STATUS_CON": "Confirmé", - "RELATIONSHIPS_PATIENTS_STATUS_DEN": "Refusé", - "RELATIONSHIPS_PATIENTS_STATUS_EXP": "Expiré", - "RELATIONSHIPS_PATIENTS_STATUS_REV": "Revoqué", - "RELATIONSHIPS_PATIENTS_AVAILABLE": "Dossiers de patient(es) disponibles", - "RELATIONSHIPS_PATIENTS_NOT_AVAILABLE": "Aucun profil disponible", - "RELATIONSHIPS_PATIENTS": "Mes patients", - "RELATIONSHIPS_PATIENTS_NONE": "Aucun patient n'est relié à ce compte.", - "RELATIONSHIPS_PATIENTS_DESCRIPTION": "Liste des patients auxquels vous avez accès dans l'application Opal.", - "RELATIONSHIP_TYPES_ERROR": "Une erreur s'est produite lors du chargement des informations.", - "RELATIONSHIPS_ERROR": "Une erreur s'est produite lors du chargement des données.", - "SAVING_QUESTIONNAIRE_ANSWER": "Enregistrement de vos réponses...", - "SEARCH": "Recherche", - "SEARCH_EDU": "Recherche de titre", - "SECTION": "Section", - "SECURITYQUESTION": "Question de sécurité", - "SECURITY_QUESTIONS": "Questions de sécurité", - "SECURITY_QUESTION_ANSWER_UPDATE_SUCCESS": "Questions de sécurité mises à jour avec succès. Déconnection...", - "SECURITY_QUESTION_LENGTH_REQUIREMENT_1": "Votre réponse doit avoir une longueur minimale de", - "SECURITY_QUESTION_LENGTH_REQUIREMENT_2": "caractères", - "SECURITY_QUESTION_LOGOUT_WARNING": "Si vous faites des changements, vous serez déconnecté d'Opal et vous devez vous reconnecter.", - "SELECTFONTSIZE": "Choisissez une taille de police", - "SELECTLANGUAGE": "Sélectionner la langue", - "SELECT_3_SECURITY_QUESTIONS": "Vous pouvez modifier une ou plusieurs questions de sécurité ou réponses ici.", - "SELECT_DROPDOWN_QUESTION": "Sélectionnez une nouvelle question de sécurité", - "SEND": "Envoyer", - "SEND_ANOTHER": "Envoyer un autre", - "SENT_TO": "Envoyé à", - "SERVER_ERROR_MODIFY_SECURITY": "Problème de serveur: les questions de sécurité ou réponses ne peuvent pas être modifiées pour le moment. Veuillez réessayer plus tard.", - "SERVER_ERROR_SUBMIT_ANSWER": "Problème de serveur: cette réponse ne peut pas être soumise. Veuillez réessayer plus tard.", - "SERVER_ERROR_SUBMIT_QUESTIONNAIRE": "Problème de serveur: ce questionnaire ne peut pas être soumis. Veuillez réessayer plus tard.", - "SHARE": "Partager", - "SHOW": "Montrer", - "SIGNOUT": "Se déconnecter", - "SMALL": "Petit", - "SMARTDEVICES": "Appareils intelligents", - "SMARTDEVICES_BACK": "Retour à la liste des appareils", - "SMARTDEVICES_LIST_INFO": "Cette page affiche la liste des appareils compatibles avec Opal. Sélectionnez un appareil pour synchroniser ses données.", - "SMARTDEVICES_BLUETOOTH_DISABLED": "Bluetooth est désactivé", - "SMARTDEVICES_BLUETOOTH_PROMPT": "Veuillez l'activer et appuyer sur le bouton d'actualisation ci-dessous.", - "SMARTDEVICES_BLUETOOTH_REFRESH": "Actualiser", - "SMARTDEVICES_BLUETOOTH_UNAVAILABLE": "Les fonctions Bluetooth ne sont disponibles que sur appareil mobile", - "SMARTDEVICES_CONNECTING": "Connexion à l'appareil...", - "SMARTDEVICES_ERROR_BACKEND": "Erreur lors de l'envoi des données à l'hôpital", - "SMARTDEVICES_ERROR_NO_DATA": "Aucune donnée envoyée par l'appareil. Veuillez reprendre la mesure.", - "SMARTDEVICES_ETEKCITY": "Balance intelligente Etekcity (ESF24)", - "SMARTDEVICES_INFO_SUBMITTED": "Si vous avez des questions ou des préoccupations, veuillez en informer votre équipe clinique.", - "SMARTDEVICES_MULTIPLE": "Plusieurs appareils détectés. Veuillez choisir l'appareil à utiliser\u00A0:", - "SMARTDEVICES_SCALE_INSTRUCTIONS": "Veuillez monter sur la balance et vous peser. Une fois votre poids mesuré, appuyez sur le bouton «\u00A0Lire le poids\u00A0» ci-dessous.", - "SMARTDEVICES_SCALE_ERROR_NO_DEVICE": "Aucun appareil détecté. Veuillez reprendre la mesure et réessayer.", - "SMARTDEVICES_SCALE_READ": "Lire le poids", - "SMARTDEVICES_SCALE_SUBMIT": "Envoyer le poids à l'hôpital", - "SMARTDEVICES_SCALE_SUBMITTED": "Merci d'avoir enregistré votre poids.", - "SMARTDEVICES_SELECT": "Choisir", - "SMARTDEVICES_VITAL_SIGNS": "Fonctions vitales", - "SMARTDEVICES_VITALTRACER": "Montre VitalTracer", - "SMARTDEVICES_VITALTRACER_ERROR_NO_DEVICE": "Aucun appareil détecté. Veuillez activer l'écran de la montre et réessayer.", - "SMARTDEVICES_VITALTRACER_READ": "Lire les fonctions vitales", - "SMARTDEVICES_VITALTRACER_SUBMITTED": "Merci d'avoir enregistré vos fonctions vitales.", - "SMARTDEVICES_WEIGHT": "Poids", - "SMARTDEVICES_XIAOMI_SCALE": "Balance Xiaomi Mi", - "STAGE": "Étape", - "STAGEOF": "Étape {{index}} sur {{total}}", - "STUDIES": "Études", - "STUDIES_DESCRIPTION": "La section Études contient des informations sur les études de recherche auxquelles vous avez été invité à participer.", - "STUDIES_NONE": "Aucune étude", - "STUDY": "Étude", - "STUDY_STATUS_CONSENTED": "Vous participez à cette étude.", - "STUDY_STATUS_DECLINED": "Vous avez refusé cette étude.", - "STUDY_STATUS_INVITED": "Vous êtes invité à cette étude.", - "SUBMIT": "Soumettre", - "SUBMIT_AND_LOGOUT": "Soumettre et déconnecter", - "SUBMITANSWERS": "Soumettre les réponses", - "SUBMITCONSENT": "Soumettre le formulaire", - "SUBMITTING_QUESTIONNAIRE": "Enregistrement de votre questionnaire...", - "SUMMARY": "Résumé", - "TABLEOFCONTENTS": "Table des matières", - "TABLE_VIEW": "Vue de Tableau", - "TAPTOZOOM": "Appuyer sur l'ecran pour agrandir.", - "TEAMMESSAGES": "Messages", - "THANKYOUFORFEEDBACK": "Merci pour votre évaluation", - "TITLE": "Information", - "TO": "à", - "TODAY": "Rendez-vous aujourd'hui", - "TOO_MANY_REQUESTS_CONSENT": "Trop de tentatives de mot de passe erronées. Veuillez réessayer plus tard.", - "TREATINGTEAMNOTIFICATIONS": "Messages de l'équipe soignante", - "TREATMENTSESSION": "Sessions de Traitement", - "Tumor markers": "Marqueurs tumoraux", - "UNABLE_TO_SHARE_DOCUMENT": "Impossible de partager le document", - "UPCOMING_APPOINTMENTS": "Les rendez-vous à venir", - "UPDATE": "Mettre à jour", - "UPDATED_EMAIL": "Courriel mis à jour avec succès", - "UPDATEPASSWORDBUTTON": "Mettre à jour le mot de passe", - "UPDATEPASSWORDTITLE": "Mettre à jour le mot de passe", - "USER_DISABLED": "Votre compte a été bloqué. Veuillez contacter l'hôpital pour obtenir de l'aide.", - "WAITING_ROOM": "Salle d'attente:", - "WARNING": "Attention", - "YES": "Oui", - "YOU": "vous", - "VIDEO": "Vidéo" + "ADDED": "Reçu à", + "ANSWER": "Réponse", + "APPOINTMENT": "Rendez-vous", + "APPOINTMENTS": "Rendez-vous", + "APPOINTMENT_ABOUT": "À propos de ce rendez-vous", + "APPOINTMENT_CANCELLED": "Ce rendez-vous a été annulé.", + "APPOINTMENT_OPEN_ERROR": "Une erreur s'est produite en ouvrant ce rendez-vous.", + "AVAILABLE_DEVICES": "Disponible seulement sur un appareil mobile.", + "BEGIN": "Débuter", + "CARNET_SANTE": "Carnet santé Québec", + "CHARACTERS_LEFT": "caractères restants", + "CHART_ALL_RANGE_SELECTOR": "Tout", + "CHART_DESCRIPTION": "L'onglet Dossier contient toutes les données éléctroniques concernant votre santé.", + "CHART_NON_NUMERIC_VALUES": "Ces résultats ne peuvent pas être représentés car au moins l'un d'entre eux n'est pas un nombre", + "CHART_NO_PLOT_AVAILABLE": "Aucun graphique disponible", + "CHART_ONE_MONTH_SELECTOR": "1m", + "CHART_SIX_MONTHS_SELECTOR": "6m", + "CHART_THREE_MONTHS_SELECTOR": "3m", + "CHART_YEAR_SELECTOR": "1a", + "CHECKIN": "Enregistrement", + "CHECKIN_ALL_TODAY": "Enregistrer", + "CHECKIN_ERROR_GEOLOCATION": "Erreur de géolocalisation; vérifiez les paramètres d'autorisation de l'appli ou de l'appareil.", + "CHECKIN_ERROR_MULTIPLE": "Impossible de s'enregistrer pour votre/vos rendez-vous. Veuillez réessayer ou vous présenter à la réception.", + "CHECKIN_ERROR_ONE": "Impossible de s'enregistrer pour ce rendez-vous. Veuillez réessayer ou vous présenter à la réception.", + "CHECKIN_MESSAGE_AFTER": "Vous êtes enregistré(e) pour votre rendez-vous.", + "CHECKIN_MESSAGE_AFTER_PLURAL": "Vous êtes enregistré(e) pour vos rendez-vous.", + "CHECKIN_MESSAGE_BEFORE": "Enregistrez-vous pour votre rendez-vous.", + "CHECKIN_MESSAGE_BEFORE_PLURAL": "Enregistrez-vous pour vos rendez-vous.", + "CHECKIN_NONE": "Aucun rendez-vous disponible pour enregistrement aujourd'hui.", + "CHECKIN_NOT_ALLOWED": "L'enregistrement sera disponible dès l'arrivée à l'hôpital.", + "CHECKIN_PATIENT_HEADER_NON_SELF": "Rendez-vous de {name}", + "CHECKIN_PATIENT_HEADER_SELF": "Vos rendez-vous", + "CLINICAL_QUESTIONNAIRES": "Questionnaires cliniques", + "CLINICAL_REPORTS": "Rapports cliniques", + "COLLECTION_DATE": "Date de Collecte", + "CONFIRM_DOWNLOAD": "Le document doit temporairement être téléchargé sur votre appareil avant de continuer.", + "CONSENT": "Accepter", + "CONSENT_FORMS": "Formulaires de consentement", + "CONSENT_FORMS_NONE_COMPLETED": "Aucun formulaire rempli", + "CONSENT_FORMS_NONE_NEW": "Aucun nouveau formulaire", + "CONSENT_FORMS_NONE_PROGRESS": "Aucun formulaire en cours", + "CONSENT_FORM_ACKNOWLEDGEMENT": "Je consens à participer à ce projet de recherche selon les conditions mentionnées dans le formulaire de consentement.", + "CONSENT_FORM_BEGIN_INSTRUCTION": "Cliquez sur \"Débuter\" ou glissez vers la gauche pour répondre au formulaire de consentement.", + "CONSENT_FORM_GO_BACK_TO_LIST": "Retourner à la liste", + "CONSENT_FORM_PASSWORD_INSTRUCTION": "Veuillez entrer votre mot de passe pour confirmer votre consentement.", + "CONSENT_FORM_RESUME_INSTRUCTION": "Cliquez sur \"Reprendre\" ou glissez vers la gauche pour continuer le formulaire de consentement.", + "CONSENT_FORM_SUBMIT_INSTRUCTION": "Pour soummettre le formulaire de consentement, veuillez répondre à la question ci-dessous et appuyer sur le bouton \"Soumettre le formulaire\".", + "CONSENT_FORM_THANKS": "Merci d'avoir complété ce formulaire", + "DATE_END": "Date de fin", + "DATE_START": "Date de début", + "DAYS": "{ days } {days, plural, =0{jours} one{jour} other{jours}}", + "DEAR": "Chère/Cher", + "DECLINE": "Refuser", + "DETECTING_LOCATION": "Détection de votre emplacement...", + "DIAGNOSIS": "Diagnostic", + "DOCUMENT": "Document", + "DOC_ABOUT": "À propos de ce document", + "DOC_DATE_CREATED": "Créé le:", + "DOC_DATE_UPDATED": "Mis à jour le:", + "DOC_INFO": "Informations sur ce document", + "DOC_SIGNED_BY": "Signé par:", + "DONE": "Finir", + "EDUCATION_DESCRIPTION": "Cette section contient des informations spécifiques à votre traitement et à votre diagnostic en général.", + "EDU_OPEN_ERROR": "Erreur lors de l'ouverture du document de référence", + "ENTER_NEW_PASSWORD": "Entrez votre nouveau mot de passe :", + "ENTER_OLD_PASSWORD": "Entrez votre mot de passe actuel :", + "ENTER_OLD_PASSWORD_PLACEHOLDER": "Mot de passe actuel", + "ENTER_PASSWORD": "Entrez votre mot de passe:", + "ERROR_GETTING_EDU_MATERIAL": "Erreur. Le contenu de ce document de référence n'a pas pu être téléchargé du serveur.", + "ERROR_IN_VIDEO_URL_OR_FORMAT": "Erreur dans l'URL ou le format de la vidéo", + "ERROR_OBTAINING_DOCUMENT": "Erreur lors de l'obtention du document à partir du serveur", + "EXIT_APP": "Voulez-vous vraiment quitter Opal?", + "FEEDBACK_ERROR": "Une erreur s'est produite lors de l'envoi de vos commentaires. Veuillez réessayer plus tard.", + "FEEDBACK_LEAVE_MESSAGE": "Laissez-nous un message", + "FEEDBACK_MESSAGE": "Vos commentaires sont importants pour nous. S'il vous plaît, prenez le temps de nous faire savoir ce que vous pensez d'Opal. Chaque commentaire est apprécié.", + "FEEDBACK_RECEIVED": "Vos commentaires ont été reçus.", + "FEEDBACK_SUBMIT_AS": "Sera envoyé au nom de :", + "FIND_DOCTOR": "Accès à un médecin de famille", + "FONTSIZE": "Taille de la police", + "FOR": "Pour", + "FUTURE": "Rendez-vous à venir", + "GENERAL_ANNOUNCEMENTS": "Annonces générales", + "GENERAL_ANNOUNCEMENTS_HEADER": "Annonces", + "GENERAL_DESCRIPTION": "Dans l'onglet Général, vous trouverez des renseignements utiles pour faciliter votre visite à l'hôpital.", + "GO_TO_ROOM": "Salle de rendez-vous :", + "GO_TO_SUMMARY": "Aller au Résumé", + "HEADER_MESSAGE_HOME": "Accueil", + "HIDE": "Cacher", + "HOME_DESCRIPTION": "Dans l'onglet Accueil, vous pourrez accéder aux nouvelles concernant votre statut médical, vos documents, les annonces de l'hôpital et vos rendez-vous.", + "HOSPITAL_PARKING": "Stationnement", + "INDIVIDUAL_ANNOUNCEMENT_HEADER": "Annonce", + "INVALID_OLD_PASSWORD": "Mot de passe actuel invalide", + "INVALID_PASSWORD": "Mot de passe invalide.", + "INVESTIGATOR": "Chercheur(euse)", + "LABELS": "Étiquettes", + "LAB_BY_DATE": "Date", + "LAB_BY_TYPE": "Type", + "LAB_DELAY": "Paramètres de délai", + "LAB_DELAY_DEFAULTS_HEADER": "Les délais par défaut fixés par l'établissement sont :", + "LAB_DELAY_DEFAULTS_INTERPRETABLE": "Résultat interprétable ({ yesno, select, yes{oui} no{non} other{?} }) :", + "LAB_DELAY_INFO_HEADER": "Modification des paramètres de délai des résultats de laboratoire", + "LAB_DELAY_INFO_TEXT": "Les paramètres de délai des résultats de laboratoire peuvent être modifiés sur demande. Vous pouvez trouver un formulaire imprimable « d'Accès aux résultats de laboratoire » dans le menu Bibliothèque d'Opal ou en faisant la demande à l'hôpital.", + "LAB_DELAY_INTERPRETABLE": "Après avoir reçu l'enseignement de la part de votre équipe soignante vous serez en mesure d'interpréter ces résultats par vous-même.", + "LAB_DELAY_NON_INTERPRETABLE": "Non-interprétable : Ces résultats portent une part d'interprétation d'un professionnel de la santé et ne peuvent donc pas être interprétés par vous-même.", + "LAB_DISCLAIMER": "Pas pour usage clinique", + "LAB_INFO_CRITICAL_HEADER": "Valeurs critiques (C)", + "LAB_INFO_CRITICAL_TEXT": "Les résultats de vos tests sanguins sont considérablement en dehors de la plage normale. Le laboratoire communiquera généralement ces résultats à votre équipe soignante de manière accélérée. Votre équipe soignante les évaluera, et vous informera si des mesures doivent être prises en ce qui concerne vos résultats de tests sanguins anormaux.", + "LAB_INFO_FLAGS": "Les résultats en dehors de la plage de valeurs normales sont accompagnés d'un (L), d'un (H) ou d'un (C), où (L) indique une valeur faible, (H) indique une valeur élevée et (C) indique une valeur critique.", + "LAB_INFO_HIGH_LOW_HEADER": "Valeurs faibles (L) ou élevées (H)", + "LAB_INFO_HIGH_LOW_TEXT": "Les résultats de vos analyses de sang sont en dehors de la plage normale. Votre équipe de traitement les évaluera et ordonnera d'autres études ou traitements si nécessaire.", + "LAB_INFO_NORMAL_HEADER": "Valeurs normales", + "LAB_INFO_NORMAL_TEXT": "Les résultats de vos analyses de sang se situent dans la plage normale.", + "LAB_LEARN_ABOUT": "En savoir plus sur:", + "LAB_NAME": "Nom de l'analyse", + "LAB_NORM": "Valeurs normales", + "LAB_RECENT_RESULT": "Résultat récent", + "LAB_RESULTS": "Résultats de laboratoire", + "LAB_RESULTS_NONE": "Pas de résultats de laboratoire disponibles", + "LAB_RESULT_DELAY": "Délai :", + "LAB_RESULT_INTERPRETABLE": "Résultat interprétable :", + "LAB_TEST_INFO": "Détails de l'analyse", + "LAB_YOUR_RESULT": "Votre résultat", + "LANGUAGE": "Langue", + "LARGE": "Grand", + "LEAVING_APP": "Notez que vous quittez l'application et ne comptez plus sur Opal pour protéger votre document.", + "LEAVING_APP_LABS": "Veuillez noter que vous quittez l'application pour ouvrir un site Web externe. Ce site est offert à titre informatif seulement; ne fournissez aucune de vos données personnelles.", + "LOADING_APPOINTMENTS": "Chargement de vos rendez-vous...", + "LOADING_DATA": "Chargement de vos données", + "LOADING_DOCUMENT": "Chargement de votre document...", + "LOADING_ERROR": "Une erreur est survenue lors du chargement de vos données. Veuillez réessayer plus tard.", + "LOADING_LAB_RESULTS": "Chargement de vos résultats sanguins...", + "LOADING_MATERIAL": "Chargement de votre document de référence...", + "LOADING_QUESTIONNAIRE": "Chargement de votre questionnaire...", + "MARK_ALL_READ": "Tout marquer comme lu", + "MEDIUM": "Moyen", + "MESSAGE": "Message", + "MORE_EDU_MATERIAL": "Document de référence supplémentaire", + "NAME": "Nom", + "NO": "Non", + "NORMAL_RANGE": "Plage normale", + "NOTIFICATIONS": "Notifications", + "NOTIFICATION_OPEN_ERROR": "Une erreur s'est produite lors du chargement de cette notification.", + "NO_APPOINTMENTS": "Aucun rendez-vous", + "NO_APPOINTMENT_INFO": "Aucune information concernant ce rendez-vous n'est disponible pour le moment.", + "NO_DIAGNOSIS": "Pas de diagnostic", + "NO_GENERAL_ANNOUNCEMENTS": "Pas d’annonces générales", + "NO_NOTIFICATIONS": "Vous n'avez pas de nouvelles notifications", + "NO_PARKING_SITES": "Aucune information disponible sur le stationnement et le transport", + "NO_PATIENT_DOCUMENTS_AVAILABLE": "Vous n'avez aucun document de patient disponible", + "NO_TEAM_MESSAGES": "Pas de messages de l'équipe de traitement", + "NO_UPCOMING_APPOINTMENTS": "Vous n'avez aucun rendez-vous à venir.", + "OPEN_EXTERNAL_VIEWER": "Ouvrir dans une appli externe", + "OPEN_LINK": "Ouvrir le lien", + "OPEN_PDF": "Ouvrir le document", + "OPEN_PDF_ERROR": "Erreur lors de l'ouverture du PDF", + "OTHER": "Autres", + "PAST": "Rendez-vous complétés", + "PERSONAL": "Personnel", + "PHONE_NUMBER": "Téléphone", + "PLOT_VIEW": "Vue Graphique", + "PREFERENCES": "Préférences", + "QUEBEC_MEDICAL_SCHEDULER": "Rendez-vous santé Québec", + "QUESTION": "Question", + "QUESTIONNAIRES": "Questionnaires", + "QUESTIONNAIRE_ANSWERED_BY": "Complété par :", + "QUESTIONNAIRE_BEGIN_INSTRUCTION": "Cliquez sur \"Débuter\" ou glissez vers la gauche pour commencer le questionnaire.", + "QUESTIONNAIRE_CHECKBOX_CHOSEN": "Vous avez choisi", + "QUESTIONNAIRE_CHECKBOX_OPTION": "option(s)", + "QUESTIONNAIRE_COMPLETED": "Complétés", + "QUESTIONNAIRE_CONTACT": "Si vous avez des questions ou des préoccupations, veuillez en informer votre équipe soignante.", + "QUESTIONNAIRE_DATE_ADDED": "Ajouté le :", + "QUESTIONNAIRE_DATE_ANSWERED": "Complété le :", + "QUESTIONNAIRE_DATE_LAST_UPDATED": "Dernière mise à jour :", + "QUESTIONNAIRE_DESCRIPTION": "Description: ", + "QUESTIONNAIRE_GO_BACK_TO_LIST": "Retourner à la liste", + "QUESTIONNAIRE_GO_TO_QUESTION": "Aller à la question", + "QUESTIONNAIRE_HOME": "Accueil", + "QUESTIONNAIRE_INSTRUCTION": "Instruction: ", + "QUESTIONNAIRE_INSTRUCTIONS": "Répondez aux questions en rouge. Les questions en vert peuvent être modifiées. Une fois toutes les questions répondues, vous pouvez soumettre vos réponses.", + "QUESTIONNAIRE_IN_PROGRESS": "En cours", + "QUESTIONNAIRE_IN_PROGRESS_BY": "En cours par :", + "QUESTIONNAIRE_LOCKING_ERROR": "Ce questionnaire ne peut être complété car un autre utilisateur ayant access au dossier de ce patient l'a déjà commencé. Une fois le questionnaire complété, vous pourrez consulter les réponses sur l'onglet « Complétés ».", + "QUESTIONNAIRE_NEW": "Nouveaux", + "QUESTIONNAIRE_NONE_COMPLETED": "Pas de questionnaire rempli.", + "QUESTIONNAIRE_NONE_NEW": "Pas de nouveau questionnaire.", + "QUESTIONNAIRE_NONE_PROGRESS": "Pas de questionnaire en cours.", + "QUESTIONNAIRE_NOT_ALLOWED_TO_ANSWER": "Votre niveau d'accès aux données de ce patient ne permet pas de répondre aux questionnaires à sa place. Une fois le questionnaire complété par un autre utilisateur, vous pourrez en consulter les réponses sur l'onglet « Complétés ».", + "QUESTIONNAIRE_RESUME_INSTRUCTION": "Cliquez sur \"continuer\" ou glissez vers la gauche pour poursuivre le questionnaire.", + "QUESTIONNAIRE_SECTION_INSTRUCTION": "Instructions pour cette section", + "QUESTIONNAIRE_SELECT": "Choisissez", + "QUESTIONNAIRE_SUBMIT_AS_OTHER": "Soumission des réponses par : {userName} (au nom de {patientName})", + "QUESTIONNAIRE_SUBMIT_AS_SELF": "Soumission des réponses par : {userName}", + "QUESTIONNAIRE_SUBMIT_INSTRUCTION": "Veuillez appuyer sur le bouton \"Soumettre les réponses\" pour compléter le questionnaire.", + "QUESTIONNAIRE_THANKS": "Merci d'avoir complété ce questionnaire", + "RATE_IT": "Évaluer", + "RATE_THIS_MATERIAL": "Évaluer ce document de référence", + "REDIRECT_TO_QUESTIONNAIRE": "Redirection vers le questionnaire...", + "REFERENCE_MATERIAL_NONE": "Vous n’avez pas de documents de référence", + "REFRESH_ERROR": "Une erreur s'est produite en rafraichissant vos données.", + "RELATIONSHIPS": "Mes relations", + "RELATIONSHIPS_CAREGIVERS": "Mes proches aidants", + "RELATIONSHIPS_CAREGIVERS_DESCRIPTION": "Liste des proches aidants qui ont accès à vos données dans l'application Opal.", + "RELATIONSHIPS_CAREGIVERS_ERROR": "Une erreur s'est produite lors du chargement des données.", + "RELATIONSHIPS_CAREGIVERS_NONE": "Aucun proche aidant n'est relié à ce compte.", + "RELATIONSHIPS_ERROR": "Une erreur s'est produite lors du chargement des données.", + "RELATIONSHIPS_PATIENTS": "Mes patients", + "RELATIONSHIPS_PATIENTS_ACCESS": "Accès", + "RELATIONSHIPS_PATIENTS_AVAILABLE": "Dossiers de patient(es) disponibles", + "RELATIONSHIPS_PATIENTS_DESCRIPTION": "Liste des patients auxquels vous avez accès dans l'application Opal.", + "RELATIONSHIPS_PATIENTS_NONE": "Aucun patient n'est relié à ce compte.", + "RELATIONSHIPS_PATIENTS_NOT_AVAILABLE": "Aucun profil disponible", + "RELATIONSHIPS_PATIENTS_STATUS_CON": "Confirmé", + "RELATIONSHIPS_PATIENTS_STATUS_DEN": "Refusé", + "RELATIONSHIPS_PATIENTS_STATUS_EXP": "Expiré", + "RELATIONSHIPS_PATIENTS_STATUS_PEN": "En attente", + "RELATIONSHIPS_PATIENTS_STATUS_REV": "Revoqué", + "RELATIONSHIP_TYPES_ERROR": "Une erreur s'est produite lors du chargement des informations.", + "RESEARCH": "Recherche", + "RESEARCH_DESCRIPTION": "La section Recherche contient des informations sur les études de recherche auxquelles vous participez.", + "RESEARCH_FEEDBACK": "Commentaires sur la recherche", + "RESEARCH_FEEDBACK_MESSAGE": "Veuillez utiliser ce formulaire pour fournir des commentaires sur les études de recherche en cours dans Opal. Vous pouvez également utiliser ce formulaire pour révoquer votre consentement pour une étude de recherche à laquelle vous avez précédemment consenti en utilisant Opal.", + "RESEARCH_FEEDBACK_PLACEHOLDER": "Indiquez le nom complet de l'étude de recherche et la raison de vos commentaires (commentaires généraux ou révocation du consentement).", + "RESEARCH_QUESTIONNAIRES": "Questionnaires de recherche", + "RESEARCH_REFERENCE_MATERIAL": "Documents de référence de recherche", + "RESEARCH_REFERENCE_SHORT": "Référence recherche", + "RESULT": "Résultat", + "RESULTS": "Résultats", + "RESUME": "Continuer", + "SAVING_QUESTIONNAIRE_ANSWER": "Enregistrement de vos réponses...", + "SEARCH": "Recherche", + "SEARCH_EDU": "Recherche de titre", + "SECTION": "Section", + "SECURITY_QUESTIONS": "Questions de sécurité", + "SECURITY_QUESTION_ANSWER_UPDATE_SUCCESS": "Questions de sécurité mises à jour avec succès. Déconnection...", + "SECURITY_QUESTION_LENGTH_REQUIREMENT_1": "Votre réponse doit avoir une longueur minimale de", + "SECURITY_QUESTION_LENGTH_REQUIREMENT_2": "caractères", + "SECURITY_QUESTION_LOGOUT_WARNING": "Si vous faites des changements, vous serez déconnecté d'Opal et vous devez vous reconnecter.", + "SECURITY_QUESTIONS_INSTRUCTIONS": "Vous pouvez modifier une ou plusieurs questions de sécurité ou réponses ici.", + "SELECT_DROPDOWN_QUESTION": "Sélectionnez une nouvelle question de sécurité", + "SELECT_FONT_SIZE": "Choisissez une taille de police", + "SELECT_LANGUAGE": "Sélectionner la langue", + "SEND": "Envoyer", + "SEND_ANOTHER": "Envoyer un autre", + "SENT_TO": "Envoyé à", + "SERVER_ERROR_MODIFY_SECURITY": "Problème de serveur: les questions de sécurité ou réponses ne peuvent pas être modifiées pour le moment. Veuillez réessayer plus tard.", + "SERVER_ERROR_SUBMIT_ANSWER": "Problème de serveur: cette réponse ne peut pas être soumise. Veuillez réessayer plus tard.", + "SERVER_ERROR_SUBMIT_QUESTIONNAIRE": "Problème de serveur: ce questionnaire ne peut pas être soumis. Veuillez réessayer plus tard.", + "SHARE": "Partager", + "SHOW": "Montrer", + "SIGN_OUT": "Se déconnecter", + "SMALL": "Petit", + "SMART_DEVICES": "Appareils intelligents", + "SMART_DEVICES_BACK": "Retour à la liste des appareils", + "SMART_DEVICES_BLUETOOTH_DISABLED": "Bluetooth est désactivé", + "SMART_DEVICES_BLUETOOTH_PROMPT": "Veuillez l'activer et appuyer sur le bouton d'actualisation ci-dessous.", + "SMART_DEVICES_BLUETOOTH_REFRESH": "Actualiser", + "SMART_DEVICES_BLUETOOTH_UNAVAILABLE": "Les fonctions Bluetooth ne sont disponibles que sur appareil mobile", + "SMART_DEVICES_CONNECTING": "Connexion à l'appareil...", + "SMART_DEVICES_ERROR_BACKEND": "Erreur lors de l'envoi des données à l'hôpital", + "SMART_DEVICES_ERROR_NO_DATA": "Aucune donnée envoyée par l'appareil. Veuillez reprendre la mesure.", + "SMART_DEVICES_ETEKCITY": "Balance intelligente Etekcity (ESF24)", + "SMART_DEVICES_INFO_SUBMITTED": "Si vous avez des questions ou des préoccupations, veuillez en informer votre équipe clinique.", + "SMART_DEVICES_LIST_INFO": "Cette page affiche la liste des appareils compatibles avec Opal. Sélectionnez un appareil pour synchroniser ses données.", + "SMART_DEVICES_MULTIPLE": "Plusieurs appareils détectés. Veuillez choisir l'appareil à utiliser\u00A0:", + "SMART_DEVICES_SCALE_ERROR_NO_DEVICE": "Aucun appareil détecté. Veuillez reprendre la mesure et réessayer.", + "SMART_DEVICES_SCALE_INSTRUCTIONS": "Veuillez monter sur la balance et vous peser. Une fois votre poids mesuré, appuyez sur le bouton «\u00A0Lire le poids\u00A0» ci-dessous.", + "SMART_DEVICES_SCALE_READ": "Lire le poids", + "SMART_DEVICES_SCALE_SUBMIT": "Envoyer le poids à l'hôpital", + "SMART_DEVICES_SCALE_SUBMITTED": "Merci d'avoir enregistré votre poids.", + "SMART_DEVICES_SELECT": "Choisir", + "SMART_DEVICES_VITALTRACER": "Montre VitalTracer", + "SMART_DEVICES_VITALTRACER_ERROR_NO_DEVICE": "Aucun appareil détecté. Veuillez activer l'écran de la montre et réessayer.", + "SMART_DEVICES_VITALTRACER_READ": "Lire les fonctions vitales", + "SMART_DEVICES_VITALTRACER_SUBMITTED": "Merci d'avoir enregistré vos fonctions vitales.", + "SMART_DEVICES_VITAL_SIGNS": "Fonctions vitales", + "SMART_DEVICES_WEIGHT": "Poids", + "SMART_DEVICES_XIAOMI_SCALE": "Balance Xiaomi Mi", + "STUDIES": "Études", + "STUDIES_DESCRIPTION": "La section Études contient des informations sur les études de recherche auxquelles vous avez été invité à participer.", + "STUDIES_NONE": "Aucune étude", + "STUDY": "Étude", + "STUDY_STATUS_CONSENTED": "Vous participez à cette étude.", + "STUDY_STATUS_DECLINED": "Vous avez refusé cette étude.", + "STUDY_STATUS_INVITED": "Vous êtes invité à cette étude.", + "SUBMIT": "Soumettre", + "SUBMITTING_QUESTIONNAIRE": "Enregistrement de votre questionnaire...", + "SUBMIT_AND_LOGOUT": "Soumettre et déconnecter", + "SUBMIT_ANSWERS": "Soumettre les réponses", + "SUBMIT_CONSENT": "Soumettre le formulaire", + "SUMMARY": "Résumé", + "TABLE_OF_CONTENTS": "Table des matières", + "TABLE_VIEW": "Vue de Tableau", + "TAP_TO_ZOOM": "Appuyer sur l'ecran pour agrandir.", + "TEAM_MESSAGES": "Messages", + "THANK_YOU_FOR_FEEDBACK": "Merci pour votre évaluation", + "TITLE": "Information", + "TO": "à", + "TODAY": "Rendez-vous aujourd'hui", + "TOO_MANY_REQUESTS_CONSENT": "Trop de tentatives de mot de passe erronées. Veuillez réessayer plus tard.", + "TREATING_TEAM_NOTIFICATIONS": "Messages de l'équipe soignante", + "UNABLE_TO_SHARE_DOCUMENT": "Impossible de partager le document", + "UPCOMING_APPOINTMENTS": "Les rendez-vous à venir", + "UPDATE": "Mettre à jour", + "UPDATE_PASSWORD_BUTTON": "Mettre à jour le mot de passe", + "UPDATE_PASSWORD_TITLE": "Mettre à jour le mot de passe", + "WAITING_ROOM": "Salle d'attente:", + "WARNING": "Attention", + "YES": "Oui", + "YOU": "vous" } diff --git a/src/Languages/appTranslationTablesViews/login/en.json b/src/Languages/appTranslationTablesViews/login/en.json index 6fc16e1a0..3499edec2 100644 --- a/src/Languages/appTranslationTablesViews/login/en.json +++ b/src/Languages/appTranslationTablesViews/login/en.json @@ -6,34 +6,31 @@ "BACK": "Back", "BROWSER_OPEN_FAILED": "Error opening this link. Please try again later.", "CANCEL": "Cancel", + "CHART": "Chart", "CONFIRM": "Confirm", - "CONTACTHOSPITAL": "Contact the hospital for assistance", + "CONTACT_HOSPITAL": "Contact the hospital for assistance", "CONTINUE": "Continue", "CURRENT_VERSION": "Current version: ", "EDUCATION": "Clinical Reference Material", "EDUCATION_SHORT": "Clinical Reference", "EMAIL": "Email", "EMAIL_LOADING_ERROR": "Email loading error", - "ENTERANANSWER": "Enter an answer", - "ENTERANSWERPLACEHOLDER": "Enter your answer...", - "ENTEREMAIL": "Enter your Email Address:", - "ERROR": "Error", - "ERRORANSWERNOTMATCH": "Answer does not match our records", + "ENTER_ANSWER_PLACEHOLDER": "Enter your answer...", + "ENTER_AN_ANSWER": "Enter an answer", + "ENTER_EMAIL": "Enter your Email Address:", + "ERROR_ANSWER_NOT_MATCH": "Answer does not match our records", "ERROR_CONTACTING_HOSPITAL": "Error contacting the hospital. Try again later.", "ERROR_GENERIC": "Something went wrong", "ERROR_INIT_LINKS": "Error loading links in the app. Some links may not open.", - "ERROROBTAININGDOCUMENT": "Error obtaining document from server", "ERROR_NETWORK": "Could not connect to the internet", "ERROR_NO_CONFIRMED_PROFILES": "Access to your account has not yet been approved by Medical Records, or has been revoked. If you've recently requested access, please wait for it to be granted. Otherwise, please contact Opal support for assistance.", "ERROR_PAGE": "Error loading this page", "ERROR_SELECTING_HOSPITAL": "An error occurred while selecting a hospital. If this error persists, please contact Opal support for assistance.", "FEEDBACK": "Feedback", - "FEEDBACK_MESSAGE": "Your feedback is invaluable to us. Please take a moment to let us know what you think about Opal.", - "FEEDBACK_RECEIVED": "Your feedback has been received.", - "FORGOTPASSWORD": "Forgot Password?", - "FORGOTPASSWORD_NOQUESTION": "Forgot Password", + "FORGOT_PASSWORD": "Forgot Password?", + "FORGOT_PASSWORD_NO_QUESTION": "Forgot Password", "GENERAL": "General", - "GETTINGTOHOSPITAL": "Directions", + "GETTING_TO_HOSPITAL": "Directions", "GO_TO_LOGIN": "Go To Login", "HOME": "Home", "HOSPITAL": "Hospital", @@ -42,19 +39,16 @@ "INVALID_EMAIL": "Invalid email", "INVALID_EMAIL_OR_PWD": "Incorrect email or password", "INVALID_USER": "Invalid user", - "KICKEDOUT": "You have logged in on another device.", - "LANGUAGE": "Language", - "LEAVEMESSAGE": "Leave us a message", + "KICKED_OUT": "You have logged in on another device.", "LICENSE": "License", "LOADING": "Loading", - "LOGGINGIN": "Logging In...", + "LOGGING_IN": "Logging In...", "LOGIN": "Login", "MUHC": "MUHC", "MUHC_FULL": "McGill University Health Centre", - "MYCHART": "Chart", "NEURO_ACRONYM": "NEURO", "NEURO_FULL": "Montreal Neurological Institute-Hospital", - "NEWPASSWORD": "Set Password", + "NEW_PASSWORD": "Set Password", "NO_PAGE_CONTENT": "There is currently no content available for this page. Please contact the hospital for more information.", "OK_BUTTON": "OK", "OMI": "OMI", @@ -62,15 +56,14 @@ "OPAL_CONTRIBUTE": "Contribute to Opal Development", "OPAL_COPYRIGHT": "Opal Health Informatics Group at the RI-MUHC", "OPAL_DEMO_1": "OD1", - "OPAL_DEMO_2": "OD2", "OPAL_DEMO_1_FULL": "Opal Demo 1", + "OPAL_DEMO_2": "OD2", "OPAL_DEMO_2_FULL": "Opal Demo 2", "OPAL_OPEN_SOURCE": "Opal Open Source Community", "OPAL_SUPPORT": "Contact Opal Support", "OPAL_TOUR": "Show the Opal Tour", "OPAL_WEBSITE": "Opal's Website", - "OPALPROBLEMSUBJECT": "Found a Bug/Problem using Opal", - "OUTOFTRIES": "Too many failed attempts - Please try again later.", + "OUT_OF_TRIES": "Too many failed attempts - Please try again later.", "PAGE_ACCESS_ERROR": "Error accessing this page. Please try again later.", "PARKING": "Parking & Transport", "PASSWORD": "Password", @@ -83,54 +76,49 @@ "PASSWORD_INVALID_NUMBER": "Password requires at least one number", "PASSWORD_INVALID_SPECIAL_CHAR": "Password requires at least one special character", "PASSWORD_INVALID_STRENGTH": "Password is not strong enough", - "PASSWORDRESETSERVERERROR": "There seems to be an issue on our end regarding resetting your password. Please try resetting your password again. We apologize for any inconvenience.", + "PASSWORD_RESET_SERVER_ERROR": "There seems to be an issue on our end regarding resetting your password. Please try resetting your password again. We apologize for any inconvenience.", "PASSWORD_SERVER_ERROR": "An issue occurred with your password, possibly due to a password reset error. Please use the button below to reset it again.", "PASSWORD_UPDATED": "Your password has been updated.", "PASSWORD_UPDATED_LOG_IN": "Your password has been updated; you will now be logged out of your current session.", - "SHOW_PASSWORD": "Show password", - "RATETHISAPP": "Rate This App", "RECONNECTING": "Reconnecting...", - "REENTERPASSWORDPLACEHOLDER": "Re-enter new password", - "RESETERROR": "Password Reset Error", - "RESET_PASSWORD_SENT": "If your email address is in our system, an email will be sent to you to reset your password. Do not close the app while completing the password reset process.", - "RESETINSTRUCTIONS": "It should be at least 10 characters long, including a number, a lowercase letter, a capital letter and a special character.", - "RESETPASSWORD": "Reset Password", - "RESET_PASSWORD_CODE_INVALID": "The authorization code used to reset your password is invalid. Please try again.", + "REENTER_PASSWORD_PLACEHOLDER": "Re-enter new password", + "RESET_ERROR": "Password Reset Error", + "RESET_INSTRUCTIONS": "It should be at least 10 characters long, including a number, a lowercase letter, a capital letter and a special character.", + "RESET_PASSWORD": "Reset Password", "RESET_PASSWORD_CODE_EXPIRED": "You took too long to reset your password. Please try again.", + "RESET_PASSWORD_CODE_INVALID": "The authorization code used to reset your password is invalid. Please try again.", + "RESET_PASSWORD_SENT": "If your email address is in our system, an email will be sent to you to reset your password. Do not close the app while completing the password reset process.", "RETRY": "Retry", - "RETRYRESETMESSAGE": "Your password reset link is invalid or has expired. Please try resetting your password again.", + "RETRY_RESET_MESSAGE": "Your password reset link is invalid or has expired. Please try resetting your password again.", "SECURITY_AND_PRIVACY": "Security and Privacy", - "SERVICE_AGREEMENT": "Service Agreement", - "SECURITYQUESTION": "Security Question", + "SECURITY_QUESTION": "Security Question", "SELECT_HOSPITAL": "Select a hospital", - "SEND": "Send", - "SEND_ANOTHER": "Send another", - "SETNEWPASSWORDPLACEHOLDER": "New password", - "SETPASSWORDBUTTON": "Set Password", - "SETPASSWORDLABEL": "Set new password", + "SERVER_ERROR_ALERT": "Server problem: could not fetch data, try again later", + "SERVICE_AGREEMENT": "Service Agreement", + "SET_NEW_PASSWORD_PLACEHOLDER": "New password", + "SET_PASSWORD_BUTTON": "Set Password", + "SET_PASSWORD_LABEL": "Set new password", "SHOW_LICENSE_TEXT": "Show license text", - "SIGNOUT": "Sign out", + "SHOW_PASSWORD": "Show password", "SUCCESS": "Success", + "TAP_TO_SELECT_HOSPITAL": "Tap to select", "TERMS_OF_USE": "Terms of Use", "THIRD_PARTY": "Third-Party Dependencies", "TOO_MANY_REQUESTS": "Too many unsuccessful login attempts. Please try again later.", "TOUR_ACCOUNT": "On the Account tab, you will be able to log out and make changes to your account settings, including selecting your preferred font size and app language, and changing your password and security answers.", + "TOUR_CHART": "On the Chart tab, you will have access to your medical data, including test results, appointments, documents, clinical questionnaires for you to fill out, and more.", "TOUR_EDUCATION": "In the \"Clinical Reference Material\" section of the Chart tab, you will receive reference materials as you progress through your medical journey. We will show you videos, booklets and documents specific to you.", "TOUR_END_DESC": "We hope that you enjoy your experience using Opal. If you need any more help with the app, feel free to contact us at %%HELP_EMAIL%% and we'll be happy to help. Thanks for using Opal!", "TOUR_END_TITLE": "That's it for this tour!", "TOUR_GENERAL": "On the General tab, you will find announcements, parking information, and other useful links. You can also provide us with feedback on the app.", "TOUR_HOME": "On the Home tab, you will be provided with your most important information at a glance, including your notifications, and a button to check-in to your appointments for the day.", "TOUR_INFO": "The Information button will appear on some pages to give you additional details if you need them.", - "TOUR_MYCHART": "On the Chart tab, you will have access to your medical data, including test results, appointments, documents, clinical questionnaires for you to fill out, and more.", "TOUR_NAME": "Opal Tour", - "TOUR_WELCOME_DESC": "Opal is a patient portal designed to provide you with some of your medical information right at your fingertips. To get started, tap the arrow or swipe the screen to change slides.", - "TOUR_SECURITY_TITLE": "Security", "TOUR_SECURITY_DESCRIPTION": "Remember to secure your information by protecting your phone with a passphrase, and do not leave your phone unattended.", + "TOUR_SECURITY_TITLE": "Security", + "TOUR_WELCOME_DESC": "Opal is a patient portal designed to provide you with some of your medical information right at your fingertips. To get started, tap the arrow or swipe the screen to change slides.", "TRUST_DEVICE": "Set this device as a trusted device?", "UNTRANSLATED_PAGE_DISCLAIMER": "This page has not yet been translated, but its original content is provided below for reference purposes. Thank you for your understanding.", - "USER_DISABLED": "User account has been disabled", - "WARNING": "Warning", - "SERVERERRORALERT": "Server problem: could not fetch data, try again later", - "TAP_TO_SELECT_HOSPITAL": "Tap to select", - "WHATSNEW": "What's New" + "USER_DISABLED": "Your account has been blocked, please contact Opal support for further assistance.", + "WHATS_NEW": "What's New" } diff --git a/src/Languages/appTranslationTablesViews/login/fr.json b/src/Languages/appTranslationTablesViews/login/fr.json index b73a662f2..ff927bce6 100644 --- a/src/Languages/appTranslationTablesViews/login/fr.json +++ b/src/Languages/appTranslationTablesViews/login/fr.json @@ -6,34 +6,31 @@ "BACK": "Retour", "BROWSER_OPEN_FAILED": "Erreur lors de l'ouverture de ce lien. Veuillez réessayer plus tard.", "CANCEL": "Annuler", + "CHART": "Dossier", "CONFIRM": "Confirmer", - "CONTACTHOSPITAL": "Contacter l'hôpital pour obtenir de l'aide", + "CONTACT_HOSPITAL": "Contactez l'hôpital pour obtenir de l'aide", "CONTINUE": "Continuer", "CURRENT_VERSION": "Version actuelle: ", "EDUCATION": "Documents de référence cliniques", "EDUCATION_SHORT": "Référence clinique", "EMAIL": "Courriel", "EMAIL_LOADING_ERROR": "Erreur de chargement de l'adresse", - "ENTERANANSWER": "Entrer une réponse", - "ENTERANSWERPLACEHOLDER": "Entrer votre réponse...", - "ENTEREMAIL": "Entrez votre adresse courriel:", - "ERROR": "Erreur", - "ERRORANSWERNOTMATCH": "Votre réponse ne correspond pas à celle de nos fichiers.", + "ENTER_ANSWER_PLACEHOLDER": "Entrer votre réponse...", + "ENTER_AN_ANSWER": "Entrer une réponse", + "ENTER_EMAIL": "Entrez votre adresse courriel:", + "ERROR_ANSWER_NOT_MATCH": "Votre réponse ne correspond pas à celle dans nos dossiers", "ERROR_CONTACTING_HOSPITAL": "Une erreur s'est produite en contactant l'hôpital. Réessayez plus tard.", "ERROR_GENERIC": "Une erreur s'est produite", "ERROR_INIT_LINKS": "Erreur de chargement des liens dans l'application. Certains liens pourraient ne pas s'ouvrir.", - "ERROROBTAININGDOCUMENT": "Erreur lors de l'obtention du document à partir du serveur", "ERROR_NETWORK": "Erreur de connection Internet", "ERROR_NO_CONFIRMED_PROFILES": "L'accès à votre compte n'a pas encore été approuvé par le bureau des archives médicales, ou il a été révoqué. Si votre inscription est récente, veuillez attendre que votre accès soit accordé. Sinon, veuillez contacter l'équipe de soutien d'Opal pour obtenir de l'aide.", "ERROR_PAGE": "Erreur lors du chargement de cette page", "ERROR_SELECTING_HOSPITAL": "Une erreur s'est produite lors de la sélection d'un hôpital. Si cette erreur persiste, veuillez contacter l'équipe de soutien d'Opal pour obtenir de l'aide.", "FEEDBACK": "Commentaires", - "FEEDBACK_MESSAGE": "Votre commentaire est important pour nous. S'il vous plaît, prenez le temps de nous faire savoir ce que vous pensez d'Opal. Chaque commentaire est apprécié.", - "FEEDBACK_RECEIVED": "Vos commentaires ont été reçus.", - "FORGOTPASSWORD": "Mot de passe oublié?", - "FORGOTPASSWORD_NOQUESTION": "Mot de passe oublié", + "FORGOT_PASSWORD": "Mot de passe oublié?", + "FORGOT_PASSWORD_NO_QUESTION": "Mot de passe oublié", "GENERAL": "Général", - "GETTINGTOHOSPITAL": "Directions", + "GETTING_TO_HOSPITAL": "Directions", "GO_TO_LOGIN": "Aller à la page de connexion", "HOME": "Accueil", "HOSPITAL": "Hôpital", @@ -42,19 +39,16 @@ "INVALID_EMAIL": "Adresse courriel invalide", "INVALID_EMAIL_OR_PWD": "Adresse courriel ou mot de passe invalide", "INVALID_USER": "Utilisateur invalide", - "KICKEDOUT": "Votre compte a été ouvert sur un autre appareil.", - "LANGUAGE": "Langue", - "LEAVEMESSAGE": "Laissez-nous un message", + "KICKED_OUT": "Votre compte a été ouvert sur un autre appareil.", "LICENSE": "Licence", "LOADING": "Chargement", - "LOGGINGIN": "Se Connecter...", + "LOGGING_IN": "Se Connecter...", "LOGIN": "Connexion", "MUHC": "CUSM", "MUHC_FULL": "Centre universitaire de santé McGill", - "MYCHART": "Dossier", "NEURO_ACRONYM": "NEURO", "NEURO_FULL": "Institut-hôpital neurologique de Montréal", - "NEWPASSWORD": "Créez un mot de passe", + "NEW_PASSWORD": "Créez un mot de passe", "NO_PAGE_CONTENT": "Il n'y a présentement aucun contenu sur cette page. Veuillez contacter l'hôpital pour plus d'information.", "OK_BUTTON": "OK", "OMI": "ÉMO", @@ -62,15 +56,14 @@ "OPAL_CONTRIBUTE": "Contribuer au développement d'Opal", "OPAL_COPYRIGHT": "Groupe Informatique Opal Santé à l'IR-CUSM", "OPAL_DEMO_1": "DO1", - "OPAL_DEMO_2": "DO2", "OPAL_DEMO_1_FULL": "Démo Opal 1", + "OPAL_DEMO_2": "DO2", "OPAL_DEMO_2_FULL": "Démo Opal 2", "OPAL_OPEN_SOURCE": "Communauté logiciel ouvert d'Opal", "OPAL_SUPPORT": "Contacter l'équipe de soutien d'Opal", "OPAL_TOUR": "Voir le guide d'Opal", "OPAL_WEBSITE": "Site Web d'Opal", - "OPALPROBLEMSUBJECT": "Trouvé un bogue / problème en utilisant Opal", - "OUTOFTRIES": "Trop de tentatives échouées - Veuillez réessayer plus tard.", + "OUT_OF_TRIES": "Trop de tentatives échouées - Veuillez réessayer plus tard.", "PAGE_ACCESS_ERROR": "Erreur d'accès à cette page. Veuillez réessayer plus tard.", "PARKING": "Stationnement et transport", "PASSWORD": "Mot de passe", @@ -83,54 +76,49 @@ "PASSWORD_INVALID_NUMBER": "Mot de passe nécessite au moins un chiffre", "PASSWORD_INVALID_SPECIAL_CHAR": "Mot de passe nécessite au moins un symbole", "PASSWORD_INVALID_STRENGTH": "Mot de passe trop faible", - "PASSWORDRESETSERVERERROR": "Il semble y avoir un problème de notre part concernant la réinitialisation de votre mot de passe. Veuillez réessayer de réinitialiser votre mot de passe. Nous nous excusons pour tout inconvénient.", + "PASSWORD_RESET_SERVER_ERROR": "Il semble y avoir un problème de notre part concernant la réinitialisation de votre mot de passe. Veuillez réessayer de réinitialiser votre mot de passe. Nous nous excusons pour tout inconvénient.", "PASSWORD_SERVER_ERROR": "Un problème est survenu avec votre mot de passe, probablement en raison d'une erreur de réinitialisation. Veuillez utiliser le bouton ci-dessous pour le réinitialiser à nouveau.", "PASSWORD_UPDATED": "Votre mot de passe a été mis à jour.", "PASSWORD_UPDATED_LOG_IN": "Votre mot de passe a été mis à jour; vous serez maintenant déconnecté(e) de la session en cours.", - "SHOW_PASSWORD": "Afficher le mot de passe", - "RATETHISAPP": "Évaluer l'application", "RECONNECTING": "En cours de reconnexion...", - "REENTERPASSWORDPLACEHOLDER": "Confirmer le nouveau mot de passe", - "RESETERROR": "Erreur de réinitialisation du mot de passe", - "RESET_PASSWORD_SENT": "Si votre adresse courriel est dans notre système, un courriel vous sera envoyé pour réinitialiser votre mot de passe. Ne fermez pas l'application pendant le processus de réinitialisation.", - "RESETINSTRUCTIONS": "Il doit comporter au moins 10 caractères, dont un chiffre, une lettre minuscule, une lettre majuscule et un caractère spécial.", - "RESETPASSWORD": "Réinitialiser le mot de passe", - "RESET_PASSWORD_CODE_INVALID": "Le code d'autorisation utilisé pour réinitialiser votre mot de passe n'est pas valide. Veuillez réessayer.", + "REENTER_PASSWORD_PLACEHOLDER": "Confirmer le nouveau mot de passe", + "RESET_ERROR": "Erreur de réinitialisation du mot de passe", + "RESET_INSTRUCTIONS": "Il doit comporter au moins 10 caractères, dont un chiffre, une lettre minuscule, une lettre majuscule et un caractère spécial.", + "RESET_PASSWORD": "Réinitialiser le mot de passe", "RESET_PASSWORD_CODE_EXPIRED": "Vous avez pris trop de temps pour réinitialiser votre mot de passe. Veuillez réessayer.", + "RESET_PASSWORD_CODE_INVALID": "Le code d'autorisation utilisé pour réinitialiser votre mot de passe n'est pas valide. Veuillez réessayer.", + "RESET_PASSWORD_SENT": "Si votre adresse courriel est dans notre système, un courriel vous sera envoyé pour réinitialiser votre mot de passe. Ne fermez pas l'application pendant le processus de réinitialisation.", "RETRY": "Réessayer", - "RETRYRESETMESSAGE": "Votre lien de réinitialisation est invalide ou expiré. Veuillez recommencer le processus de réinitialisation de votre mot de passe.", + "RETRY_RESET_MESSAGE": "Votre lien de réinitialisation est invalide ou expiré. Veuillez recommencer le processus de réinitialisation de votre mot de passe.", "SECURITY_AND_PRIVACY": "Sécurité et confidentialité", - "SERVICE_AGREEMENT": "Accord de service", - "SECURITYQUESTION": "Question de sécurité", + "SECURITY_QUESTION": "Question de sécurité", "SELECT_HOSPITAL": "Sélectionnez un hôpital", - "SEND": "Envoyer", - "SEND_ANOTHER": "Envoyer un autre", - "SETNEWPASSWORDPLACEHOLDER": "Nouveau mot de passe", - "SETPASSWORDBUTTON": "Changer le mot de passe", - "SETPASSWORDLABEL": "Nouveau mot de passe", + "SERVER_ERROR_ALERT": "Problème de serveur: impossible de télécharger les données, veuillez réessayer plus tard", + "SERVICE_AGREEMENT": "Accord de service", + "SET_NEW_PASSWORD_PLACEHOLDER": "Nouveau mot de passe", + "SET_PASSWORD_BUTTON": "Changer le mot de passe", + "SET_PASSWORD_LABEL": "Nouveau mot de passe", "SHOW_LICENSE_TEXT": "Afficher la licence", - "SIGNOUT": "Se déconnecter", + "SHOW_PASSWORD": "Afficher le mot de passe", "SUCCESS": "Succès", + "TAP_TO_SELECT_HOSPITAL": "Appuyez pour choisir", "TERMS_OF_USE": "Conditions d'utilisation", "THIRD_PARTY": "Dépendances tierces", "TOO_MANY_REQUESTS": "Trop de tentatives de connexion erronées. Veuillez réessayer plus tard.", "TOUR_ACCOUNT": "Dans l'onglet «\u00A0Réglages\u00A0», vous pourrez vous déconnecter et modifier les paramètres de votre compte. Par exemple, vous pourrez sélectionner la taille de police et la langue de votre choix, ou modifier votre mot de passe et vos réponses aux questions de sécurité.", + "TOUR_CHART": "Dans l'onglet «\u00A0Dossier\u00A0», vous aurez accès à vos données médicales, y compris vos résultats de laboratoire, vos rendez-vous, des documents, des questionnaires cliniques à remplir, et plus encore.", "TOUR_EDUCATION": "Dans la section «\u00A0Documents de référence cliniques\u00A0» de l’onglet «\u00A0Dossier\u00A0», vous recevrez des documents au fur et à mesure que vous progresserez dans votre parcours médical. Nous vous enverrons des vidéos, des livrets et des documents personnalisés pour vous.", "TOUR_END_DESC": "Nous espérons que vous apprécierez votre expérience avec Opal. Si vous avez besoin d'aide supplémentaire avec l'application, n'hésitez pas à nous contacter à %%HELP_EMAIL%% et nous serons heureux de vous aider. Merci d'utiliser Opal!", "TOUR_END_TITLE": "C'est tout pour cette visite!", "TOUR_GENERAL": "Dans l'onglet «\u00A0Général\u00A0», vous trouverez des annonces, des informations sur le stationnement et autres liens utiles. Vous pourrez également nous faire part de vos commentaires sur l'application.", "TOUR_HOME": "Dans l'onglet «\u00A0Accueil\u00A0», vous verrez vos informations les plus importantes d'un coup d'œil, y compris vos notifications et un bouton pour vous enregistrer à vos rendez-vous de la journée.", "TOUR_INFO": "Le bouton «\u00A0Information\u00A0» apparaîtra sur certaines pages pour vous donner des détails supplémentaires si vous en avez besoin.", - "TOUR_MYCHART": "Dans l'onglet «\u00A0Dossier\u00A0», vous aurez accès à vos données médicales, y compris vos résultats de laboratoire, vos rendez-vous, des documents, des questionnaires cliniques à remplir, et plus encore.", "TOUR_NAME": "Guide d'Opal", - "TOUR_WELCOME_DESC": "Opal est un portail patient conçu pour vous fournir quelques unes de vos informations médicales à portée de main. Pour commencer, appuyez sur la flèche ou faites glisser l'écran pour changer de page.", - "TOUR_SECURITY_TITLE": "Sécurité", "TOUR_SECURITY_DESCRIPTION": "N'oubliez pas de protéger votre appareil avec un mot de passe, et ne laissez pas votre appareil sans surveillance.", + "TOUR_SECURITY_TITLE": "Sécurité", + "TOUR_WELCOME_DESC": "Opal est un portail patient conçu pour vous fournir quelques unes de vos informations médicales à portée de main. Pour commencer, appuyez sur la flèche ou faites glisser l'écran pour changer de page.", "TRUST_DEVICE": "Faire confiance à cet appareil?", "UNTRANSLATED_PAGE_DISCLAIMER": "La traduction de cette page n'est pas encore disponible, mais son contenu original est tout de même affiché ci-dessous à titre de référence. Merci de votre compréhension.", - "USER_DISABLED": "Le compte d'utilisateur a été désactivé", - "WARNING": "Attention", - "SERVERERRORALERT": "Problème de serveur: impossible de télécharger les données, veuillez réessayer plus tard", - "TAP_TO_SELECT_HOSPITAL": "Appuyez pour choisir", - "WHATSNEW": "Nouveautés" + "USER_DISABLED": "Votre compte a été bloqué. Veuillez contacter l'équipe de soutien d'Opal pour obtenir de l'aide.", + "WHATS_NEW": "Nouveautés" } diff --git a/src/js/controllers/auth/securityQuestionController.js b/src/js/controllers/auth/securityQuestionController.js index 579950b2d..cf82dada3 100644 --- a/src/js/controllers/auth/securityQuestionController.js +++ b/src/js/controllers/auth/securityQuestionController.js @@ -289,18 +289,18 @@ vm.alert.content = "INVALID_USER"; break; case 4: - vm.alert.content = "OUTOFTRIES"; + vm.alert.content = "OUT_OF_TRIES"; vm.tooManyAttempts = true; vm.lockout(); break; case "corrupted-data": - vm.alert.content = "CONTACTHOSPITAL"; + vm.alert.content = "CONTACT_HOSPITAL"; break; case "wrong-answer": - vm.alert.content = "ERRORANSWERNOTMATCH"; + vm.alert.content = "ERROR_ANSWER_NOT_MATCH"; break; case "no-answer": - vm.alert.content = "ENTERANANSWER"; + vm.alert.content = "ENTER_AN_ANSWER"; break; default: vm.alert.content = "ERROR_GENERIC"; diff --git a/src/js/controllers/auth/setNewPasswordController.js b/src/js/controllers/auth/setNewPasswordController.js index 37bb78c8b..584af6928 100644 --- a/src/js/controllers/auth/setNewPasswordController.js +++ b/src/js/controllers/auth/setNewPasswordController.js @@ -118,7 +118,7 @@ vm.alert.content = "PASSWORD_CRITERIA"; break; default: - vm.alert.content = "PASSWORDRESETSERVERERROR"; + vm.alert.content = "PASSWORD_RESET_SERVER_ERROR"; break; } }) diff --git a/src/js/controllers/feedback/feedbackController.js b/src/js/controllers/feedback/feedbackController.js index 25b030bd2..a61c10fd2 100644 --- a/src/js/controllers/feedback/feedbackController.js +++ b/src/js/controllers/feedback/feedbackController.js @@ -53,7 +53,7 @@ case 'general': vm.title = 'FEEDBACK'; vm.description = 'FEEDBACK_MESSAGE'; - vm.placeholder = 'LEAVEMESSAGE'; + vm.placeholder = 'FEEDBACK_LEAVE_MESSAGE'; break; case 'research': vm.title = 'RESEARCH_FEEDBACK'; diff --git a/src/js/controllers/info-tab/infoTabController.js b/src/js/controllers/info-tab/infoTabController.js index 4b0fc4ca7..e08838cff 100644 --- a/src/js/controllers/info-tab/infoTabController.js +++ b/src/js/controllers/info-tab/infoTabController.js @@ -33,8 +33,8 @@ chart: { iconType: 'icon', icon: 'fa-solid fa-user', - name: "MYCHART", - description: "MYCHART_DESCRIPTION" + name: "CHART", + description: "CHART_DESCRIPTION" }, general: { iconType: 'general-icon', diff --git a/src/js/controllers/loading/loadingController.js b/src/js/controllers/loading/loadingController.js index dca3a5aac..a129c114d 100644 --- a/src/js/controllers/loading/loadingController.js +++ b/src/js/controllers/loading/loadingController.js @@ -68,7 +68,7 @@ //Timeout to show, alerting user of server problems. let timeOut = setTimeout(function(){ loadingmodal.hide(); - NativeNotification.showNotificationAlert($filter('translate')("SERVERERRORALERT"), null, LogOutService.logOut); + NativeNotification.showNotificationAlert($filter('translate')("SERVER_ERROR_ALERT"), null, LogOutService.logOut); }, 90000); } })(); diff --git a/src/js/controllers/parking/parkingController.js b/src/js/controllers/parking/parkingController.js index 30403c9c2..27c7ae671 100644 --- a/src/js/controllers/parking/parkingController.js +++ b/src/js/controllers/parking/parkingController.js @@ -93,7 +93,7 @@ vm.noParkingSites = true; vm.alert = { type: Params.alertTypeInfo, - content: "NOPARKINGSITES", + content: "NO_PARKING_SITES", }; } diff --git a/src/js/controllers/questionnaires/answeredQuestionnaireController.js b/src/js/controllers/questionnaires/answeredQuestionnaireController.js index cd1b0db38..0b0eb0e1f 100644 --- a/src/js/controllers/questionnaires/answeredQuestionnaireController.js +++ b/src/js/controllers/questionnaires/answeredQuestionnaireController.js @@ -413,7 +413,7 @@ $filter('translate')("TITLE"), ); } - else NativeNotification.showNotificationAlert($filter('translate')("SERVERERRORALERT")); + else NativeNotification.showNotificationAlert($filter('translate')("SERVER_ERROR_ALERT")); } /** diff --git a/src/js/controllers/questionnaires/questionnaireMainController.js b/src/js/controllers/questionnaires/questionnaireMainController.js index 77988a9d9..197065fcd 100644 --- a/src/js/controllers/questionnaires/questionnaireMainController.js +++ b/src/js/controllers/questionnaires/questionnaireMainController.js @@ -945,7 +945,7 @@ $filter('translate')("TITLE"), ); } - else NativeNotification.showNotificationAlert($filter('translate')("SERVERERRORALERT")); + else NativeNotification.showNotificationAlert($filter('translate')("SERVER_ERROR_ALERT")); } /** diff --git a/src/js/controllers/questionnaires/questionnaireNotifRedirectController.js b/src/js/controllers/questionnaires/questionnaireNotifRedirectController.js index e24777e8d..5a28ed6b6 100644 --- a/src/js/controllers/questionnaires/questionnaireNotifRedirectController.js +++ b/src/js/controllers/questionnaires/questionnaireNotifRedirectController.js @@ -139,7 +139,7 @@ function handleLoadQuestionnaireErr() { // go to the questionnaire list page if there is an error navigator.popPage(); - NativeNotification.showNotificationAlert($filter('translate')("SERVERERRORALERT")); + NativeNotification.showNotificationAlert($filter('translate')("SERVER_ERROR_ALERT")); } } })(); diff --git a/src/js/controllers/settings/caregiversController.js b/src/js/controllers/settings/caregiversController.js index 90f148f74..e9f01966d 100644 --- a/src/js/controllers/settings/caregiversController.js +++ b/src/js/controllers/settings/caregiversController.js @@ -21,6 +21,7 @@ vm.apiData; vm.caregivers; vm.loadingList = true; // This is for loading the list of caregivers + // See translations for: RELATIONSHIPS_PATIENTS_STATUS_CON, RELATIONSHIPS_PATIENTS_STATUS_DEN, RELATIONSHIPS_PATIENTS_STATUS_EXP, RELATIONSHIPS_PATIENTS_STATUS_PEN, RELATIONSHIPS_PATIENTS_STATUS_REV vm.getRelationshipStatusText = (status) => `RELATIONSHIPS_PATIENTS_STATUS_${status}`; vm.goToCaregiversInfo = () => navigator.pushPage('views/settings/info-page-relationship-type.html', {id: 'caregivers'}); diff --git a/src/js/controllers/settings/changeSettingController.js b/src/js/controllers/settings/changeSettingController.js index e9890d4b4..c2d4cf851 100644 --- a/src/js/controllers/settings/changeSettingController.js +++ b/src/js/controllers/settings/changeSettingController.js @@ -57,19 +57,19 @@ vm.value = parameters; //Sets the instructions depending on the value to update if (parameters === Params.setPasswordParam) { - vm.title = "UPDATEPASSWORDTITLE"; + vm.title = "UPDATE_PASSWORD_TITLE"; vm.newValue = ''; vm.newValueValidate = ''; vm.oldValue = ''; - vm.instruction = "ENTERNEWPASSWORD"; - vm.instructionOld = "ENTEROLDPASSWORD"; + vm.instruction = "ENTER_NEW_PASSWORD"; + vm.instructionOld = "ENTER_OLD_PASSWORD"; } else if (parameters === Params.setLanguageParam) { - vm.instruction = "SELECTLANGUAGE"; + vm.instruction = "SELECT_LANGUAGE"; vm.pickLanguage = UserPreferences.getLanguage(); vm.settingsLanguageOptions = Params.settingsLanguageOptions; } else if (parameters === Params.setFontSizeParam) { vm.settingFontOptions = Params.settingFontOptions; - vm.instruction = "SELECTFONTSIZE"; + vm.instruction = "SELECT_FONT_SIZE"; vm.pickFont = UserPreferences.getFontSize(); } }); diff --git a/src/js/controllers/settings/patientController.js b/src/js/controllers/settings/patientController.js index eb765f725..012ffc853 100644 --- a/src/js/controllers/settings/patientController.js +++ b/src/js/controllers/settings/patientController.js @@ -20,6 +20,7 @@ vm.message = null; vm.apiData; vm.patients; + // See translations for: RELATIONSHIPS_PATIENTS_STATUS_CON, RELATIONSHIPS_PATIENTS_STATUS_DEN, RELATIONSHIPS_PATIENTS_STATUS_EXP, RELATIONSHIPS_PATIENTS_STATUS_PEN, RELATIONSHIPS_PATIENTS_STATUS_REV vm.getRelationshipStatusText = (status) => `RELATIONSHIPS_PATIENTS_STATUS_${status}`; vm.goToPatientsInfo = () => navigator.pushPage('views/settings/info-page-relationship-type.html', {id: 'patients'}) diff --git a/src/js/controllers/settings/updateSecurityQuestionController.js b/src/js/controllers/settings/updateSecurityQuestionController.js index 2bd904acd..7dbf0b5e2 100644 --- a/src/js/controllers/settings/updateSecurityQuestionController.js +++ b/src/js/controllers/settings/updateSecurityQuestionController.js @@ -170,7 +170,7 @@ import {SecurityAnswer} from "../../models/settings/SecurityAnswer"; ons.notification.alert({ //message: 'Server problem: could not fetch data, try again later', - message: $filter('translate')("SERVERERRORALERT"), + message: $filter('translate')("SERVER_ERROR_ALERT"), modifier: (ons.platform.isAndroid())?'material':null }) } diff --git a/src/js/controllers/smartdevices/devices/etekcityScaleController.js b/src/js/controllers/smartdevices/devices/etekcityScaleController.js index 513f258c2..7121d0aa9 100644 --- a/src/js/controllers/smartdevices/devices/etekcityScaleController.js +++ b/src/js/controllers/smartdevices/devices/etekcityScaleController.js @@ -25,9 +25,9 @@ const WRITE_CHARACTERISTIC_UUID = 'FFF2'; // Error messages - const ERROR_BACKEND = $filter('translate')('SMARTDEVICES_ERROR_BACKEND'); - const ERROR_NO_DEVICE = $filter('translate')('SMARTDEVICES_SCALE_ERROR_NO_DEVICE'); - const ERROR_NO_DATA = $filter('translate')('SMARTDEVICES_ERROR_NO_DATA'); + const ERROR_BACKEND = $filter('translate')('SMART_DEVICES_ERROR_BACKEND'); + const ERROR_NO_DEVICE = $filter('translate')('SMART_DEVICES_SCALE_ERROR_NO_DEVICE'); + const ERROR_NO_DATA = $filter('translate')('SMART_DEVICES_ERROR_NO_DATA'); // body mass const SAMPLE_TYPE_WEIGHT = 'BM'; diff --git a/src/js/controllers/smartdevices/devices/vitalTracerWatchController.js b/src/js/controllers/smartdevices/devices/vitalTracerWatchController.js index 1dc394981..fe9c26159 100644 --- a/src/js/controllers/smartdevices/devices/vitalTracerWatchController.js +++ b/src/js/controllers/smartdevices/devices/vitalTracerWatchController.js @@ -24,9 +24,9 @@ const BLOOD_PRESSURE_CHARACTERISTIC_UUID = '2A35'; // Error messages - const ERROR_BACKEND = $filter('translate')('SMARTDEVICES_ERROR_BACKEND'); - const ERROR_NO_DEVICE = $filter('translate')('SMARTDEVICES_VITALTRACER_ERROR_NO_DEVICE'); - const ERROR_NO_DATA = $filter('translate')('SMARTDEVICES_ERROR_NO_DATA'); + const ERROR_BACKEND = $filter('translate')('SMART_DEVICES_ERROR_BACKEND'); + const ERROR_NO_DEVICE = $filter('translate')('SMART_DEVICES_VITALTRACER_ERROR_NO_DEVICE'); + const ERROR_NO_DATA = $filter('translate')('SMART_DEVICES_ERROR_NO_DATA'); const SAMPLE_TYPE_HEART_RATE = 'HR'; const SAMPLE_TYPE_BLOOD_PRESSURE_SYSTOLIC = 'BPS'; diff --git a/src/js/controllers/smartdevices/devices/xiaomiScaleController.js b/src/js/controllers/smartdevices/devices/xiaomiScaleController.js index 0cb625463..96605c822 100644 --- a/src/js/controllers/smartdevices/devices/xiaomiScaleController.js +++ b/src/js/controllers/smartdevices/devices/xiaomiScaleController.js @@ -22,9 +22,9 @@ const NOTIFICATION_CHARACTERISTIC_UUID = '2A9D'; // Error messages - const ERROR_BACKEND = $filter('translate')('SMARTDEVICES_ERROR_BACKEND'); - const ERROR_NO_DEVICE = $filter('translate')('SMARTDEVICES_SCALE_ERROR_NO_DEVICE'); - const ERROR_NO_DATA = $filter('translate')('SMARTDEVICES_ERROR_NO_DATA'); + const ERROR_BACKEND = $filter('translate')('SMART_DEVICES_ERROR_BACKEND'); + const ERROR_NO_DEVICE = $filter('translate')('SMART_DEVICES_SCALE_ERROR_NO_DEVICE'); + const ERROR_NO_DATA = $filter('translate')('SMART_DEVICES_ERROR_NO_DATA'); // body mass const SAMPLE_TYPE_WEIGHT = 'BM'; diff --git a/src/js/controllers/test-results/patient-test-results-by-datetime.controller.js b/src/js/controllers/test-results/patient-test-results-by-datetime.controller.js index 15173d6bf..5555c5949 100644 --- a/src/js/controllers/test-results/patient-test-results-by-datetime.controller.js +++ b/src/js/controllers/test-results/patient-test-results-by-datetime.controller.js @@ -126,7 +126,7 @@ class PatientTestResultsByDatetimeController { this.#updateView(); ons.notification.alert({ //message: 'Server problem: could not fetch data, try again later', - message: this.#$filter('translate')("SERVERERRORALERT"), + message: this.#$filter('translate')("SERVER_ERROR_ALERT"), modifier: (ons.platform.isAndroid()) ? 'material' : null }); }; diff --git a/src/js/controllers/test-results/patient-test-results-by-type.controller.js b/src/js/controllers/test-results/patient-test-results-by-type.controller.js index 229b2ab34..85c3314cc 100644 --- a/src/js/controllers/test-results/patient-test-results-by-type.controller.js +++ b/src/js/controllers/test-results/patient-test-results-by-type.controller.js @@ -171,7 +171,7 @@ class PatientTestResultsByTypeController { this.loading = false; ons.notification.alert({ //message: 'Server problem: could not fetch data, try again later', - message: this.#$filter('translate')("SERVERERRORALERT"), + message: this.#$filter('translate')("SERVER_ERROR_ALERT"), modifier: (ons.platform.isAndroid()) ? 'material' : null }); }; diff --git a/src/js/controllers/tour/tourController.js b/src/js/controllers/tour/tourController.js index bacc0d405..5ac1c6a07 100644 --- a/src/js/controllers/tour/tourController.js +++ b/src/js/controllers/tour/tourController.js @@ -51,8 +51,8 @@ import "../../../css/views/tour.view.css"; { iconType: "icon", icon: "fa-user", - title: "MYCHART", - description: "TOUR_MYCHART", + title: "CHART", + description: "TOUR_CHART", }, { iconType: "general-icon", diff --git a/src/js/directives/pdf-viewer.directive.js b/src/js/directives/pdf-viewer.directive.js index c0a6f71a6..32b8b3e47 100644 --- a/src/js/directives/pdf-viewer.directive.js +++ b/src/js/directives/pdf-viewer.directive.js @@ -55,7 +55,7 @@ import * as pdfjsLib from '../../lib/pdfjs_legacy_webpack.mjs'; diff --git a/src/js/services/concurrent-login.service.js b/src/js/services/concurrent-login.service.js index 3afbda4ea..dde197c2e 100644 --- a/src/js/services/concurrent-login.service.js +++ b/src/js/services/concurrent-login.service.js @@ -88,7 +88,7 @@ // Show message "You have logged in on another device." Toast.showToast({ - message: $filter('translate')("KICKEDOUT"), + message: $filter('translate')("KICKED_OUT"), }); } }); diff --git a/src/js/services/fileManagerService.js b/src/js/services/fileManagerService.js index 737d9ed55..934cb855d 100644 --- a/src/js/services/fileManagerService.js +++ b/src/js/services/fileManagerService.js @@ -356,7 +356,7 @@ function ($filter, $injector, Browser, Constants, RequestToServer, Toast) { function share(name, url) { // Sharing is only available on mobile devices if (!Constants.app) { - ons.notification.alert({message: $filter('translate')('AVAILABLEDEVICES')}); + ons.notification.alert({message: $filter('translate')('AVAILABLE_DEVICES')}); return; } diff --git a/src/js/services/questionnairesService.js b/src/js/services/questionnairesService.js index 85639d576..e2925820b 100644 --- a/src/js/services/questionnairesService.js +++ b/src/js/services/questionnairesService.js @@ -93,10 +93,10 @@ }; const PURPOSE_SUBMIT_BUTTON_MAP = { - clinical: 'SUBMITANSWERS', - research: 'SUBMITANSWERS', - consent: 'SUBMITCONSENT', - default: 'SUBMITANSWERS', + clinical: 'SUBMIT_ANSWERS', + research: 'SUBMIT_ANSWERS', + consent: 'SUBMIT_CONSENT', + default: 'SUBMIT_ANSWERS', }; const PURPOSE_SUBMIT_INSTRUCTION_MAP = { diff --git a/src/views/general/announcements/announcements.html b/src/views/general/announcements/announcements.html index de7410e74..2b2b6f0b6 100644 --- a/src/views/general/announcements/announcements.html +++ b/src/views/general/announcements/announcements.html @@ -5,7 +5,7 @@ --> - + @@ -43,6 +43,6 @@
-

{{"NOGENERALANNOUNCEMENTS"|translate}}

+

{{"NO_GENERAL_ANNOUNCEMENTS"|translate}}

diff --git a/src/views/general/feedback/feedback.html b/src/views/general/feedback/feedback.html index d8b894bc4..9e15c70be 100644 --- a/src/views/general/feedback/feedback.html +++ b/src/views/general/feedback/feedback.html @@ -45,7 +45,7 @@
-

{{"THANKYOUFORFEEDBACK"|translate}}

+

{{"THANK_YOU_FOR_FEEDBACK"|translate}}

{{"FEEDBACK_RECEIVED"|translate}}

{{"SEND_ANOTHER"|translate}}
diff --git a/src/views/general/general.html b/src/views/general/general.html index fdd1fd0dc..7fd76ad21 100644 --- a/src/views/general/general.html +++ b/src/views/general/general.html @@ -30,7 +30,7 @@
{{"GENERALANNOUNCEMENTS"|translate}} + ng-class="fontSizeTitle">{{"GENERAL_ANNOUNCEMENTS"|translate}}

diff --git a/src/views/general/parking/parking.html b/src/views/general/parking/parking.html index a69347f15..28c6d87c5 100644 --- a/src/views/general/parking/parking.html +++ b/src/views/general/parking/parking.html @@ -26,7 +26,7 @@
- {{"GETTINGTOHOSPITAL"|translate}} + {{"GETTING_TO_HOSPITAL"|translate}} @@ -39,7 +39,7 @@
- {{"HOSPITALPARKING"|translate}} + {{"HOSPITAL_PARKING"|translate}} diff --git a/src/views/home/checkin/checkin-list.html b/src/views/home/checkin/checkin-list.html index e75cf1fbb..6da22b5d4 100644 --- a/src/views/home/checkin/checkin-list.html +++ b/src/views/home/checkin/checkin-list.html @@ -9,7 +9,7 @@ - +
diff --git a/src/views/init/technical-legal.html b/src/views/init/technical-legal.html index 9e608c085..2072f7f20 100644 --- a/src/views/init/technical-legal.html +++ b/src/views/init/technical-legal.html @@ -9,7 +9,7 @@ - {{"RATETHISAPP"|translate}} + {{"FEEDBACK"|translate}} {{"SECURITY_AND_PRIVACY"|translate}} diff --git a/src/views/login/forgot-password.html b/src/views/login/forgot-password.html index 99f34e2aa..e684568b1 100644 --- a/src/views/login/forgot-password.html +++ b/src/views/login/forgot-password.html @@ -5,17 +5,17 @@ --> - +
- + {{vm.alert.message|translate}} diff --git a/src/views/login/login.html b/src/views/login/login.html index 0237fea53..6134d3150 100644 --- a/src/views/login/login.html +++ b/src/views/login/login.html @@ -43,14 +43,14 @@
diff --git a/src/views/login/new-password.html b/src/views/login/new-password.html index fd38ff2c5..15ab17cf4 100644 --- a/src/views/login/new-password.html +++ b/src/views/login/new-password.html @@ -5,7 +5,7 @@ --> - + {{"BACK"|translate}} @@ -15,8 +15,8 @@
- -

{{'RESETINSTRUCTIONS'|translate}}

+ +

{{'RESET_INSTRUCTIONS'|translate}}

@@ -26,7 +26,7 @@ name="text" ng-model="new.newValue" ng-change="new.passwordFieldChange()" - placeholder="{{'SETNEWPASSWORDPLACEHOLDER'|translate}}"/> + placeholder="{{'SET_NEW_PASSWORD_PLACEHOLDER'|translate}}"/> + placeholder="{{'REENTER_PASSWORD_PLACEHOLDER'|translate}}"/>

{{"PASSWORD_INVALID_MATCH" | translate}} @@ -57,7 +57,7 @@ ng-disabled="new.alert.type=='success' || !new.passwordIsValid || new.submitting || new.passwordConfirmationInvalid()" ng-if="!new.resetSuccess"> - {{"SETPASSWORDBUTTON"|translate}} + {{"SET_PASSWORD_BUTTON"|translate}} diff --git a/src/views/login/security-question.html b/src/views/login/security-question.html index 164f94bd3..c9b9bad9d 100644 --- a/src/views/login/security-question.html +++ b/src/views/login/security-question.html @@ -13,8 +13,8 @@ ng-click="initNavigator.resetToPage('./views/init/init-screen.html',{animation:'none'});">{{"HOME"|translate}}

-
{{"SECURITYQUESTION"|translate}}
-
{{"FORGOTPASSWORD_NOQUESTION"|translate}}
+
{{"SECURITY_QUESTION"|translate}}
+
{{"FORGOT_PASSWORD_NO_QUESTION"|translate}}
@@ -42,7 +42,7 @@
@@ -67,9 +67,9 @@ -

{{"RESETERROR"|translate}}

+

{{"RESET_ERROR"|translate}}

-

{{"RETRYRESETMESSAGE"|translate}}

+

{{"RETRY_RESET_MESSAGE"|translate}}

{{"RETRY"|translate}}
-

{{"WHATSNEW"|translate}}

+

{{"WHATS_NEW"|translate}}

{{"CURRENT_VERSION"|translate}}{{infoModalVersion}}

Version: {{data.title}}

diff --git a/src/views/personal/appointments/appointments.html b/src/views/personal/appointments/appointments.html index 1a4286190..caf9562e8 100644 --- a/src/views/personal/appointments/appointments.html +++ b/src/views/personal/appointments/appointments.html @@ -60,7 +60,7 @@
{{"NOAPPOINTMENTS"|translate}}
+ ng-class="fontSizeTitle">{{"NO_APPOINTMENTS"|translate}}
diff --git a/src/views/personal/appointments/individual-appointment.html b/src/views/personal/appointments/individual-appointment.html index df87299f7..78526bd83 100644 --- a/src/views/personal/appointments/individual-appointment.html +++ b/src/views/personal/appointments/individual-appointment.html @@ -19,7 +19,7 @@

{{vm.app.ScheduledStartTime|date:'mediumNoSeconds'}}

- {{"GOTO_ROOM"|translate}} {{vm.app["RoomLocation_"+vm.language]}} + {{"GO_TO_ROOM"|translate}} {{vm.app["RoomLocation_"+vm.language]}}

@@ -53,6 +53,6 @@ -
{{"NOAPPOINTMENTINFO"|translate}}
+
{{"NO_APPOINTMENT_INFO"|translate}}
diff --git a/src/views/personal/diagnosis/diagnosis.html b/src/views/personal/diagnosis/diagnosis.html index 07a22b831..30f42c717 100644 --- a/src/views/personal/diagnosis/diagnosis.html +++ b/src/views/personal/diagnosis/diagnosis.html @@ -31,8 +31,6 @@ {{"DIAGNOSIS"|translate}} {{diagnosis["Description_" + diag.language]}}
-
@@ -40,6 +38,6 @@
- {{"NODIAGNOSIS"|translate}} + {{"NO_DIAGNOSIS"|translate}}
diff --git a/src/views/personal/documents/documents.html b/src/views/personal/documents/documents.html index abd804d5d..610a5c7ec 100644 --- a/src/views/personal/documents/documents.html +++ b/src/views/personal/documents/documents.html @@ -22,7 +22,7 @@
- {{"NOPATIENTDOCUMENTSAVAILABLE"|translate}} + {{"NO_PATIENT_DOCUMENTS_AVAILABLE"|translate}}
diff --git a/src/views/personal/documents/individual-document.html b/src/views/personal/documents/individual-document.html index 3c3be2f81..a28f66ea7 100644 --- a/src/views/personal/documents/individual-document.html +++ b/src/views/personal/documents/individual-document.html @@ -16,8 +16,8 @@ diff --git a/src/views/personal/documents/info-popover.html b/src/views/personal/documents/info-popover.html index df7eda8b4..941e162f4 100644 --- a/src/views/personal/documents/info-popover.html +++ b/src/views/personal/documents/info-popover.html @@ -12,7 +12,7 @@

{{"NAME"|translate}}: {{docParams.Title}}

{{"DOC_DATE_CREATED"|translate}} {{docParams.CreatedTimeStamp| date:'longDate'}}

{{"DOC_DATE_UPDATED"|translate}} {{docParams.ApprovedTimeStamp| date:'longDate'}}

-

{{"DOC_SIGNEDBY"|translate}} {{docParams.FirstName}} {{docParams.LastName}}

+

{{"DOC_SIGNED_BY"|translate}} {{docParams.FirstName}} {{docParams.LastName}}

@@ -28,7 +28,7 @@ - {{"OPENEXTERNALVIEWER"|translate}} + {{"OPEN_EXTERNAL_VIEWER"|translate}}
diff --git a/src/views/personal/education/education-booklet.html b/src/views/personal/education/education-booklet.html index baff4230d..bfb7a5d81 100644 --- a/src/views/personal/education/education-booklet.html +++ b/src/views/personal/education/education-booklet.html @@ -61,7 +61,7 @@ + loading-message="{{'LOADING_MATERIAL'|translate}}"> diff --git a/src/views/personal/education/individual-material.html b/src/views/personal/education/individual-material.html index bc4ad1c69..9d5ee7f7a 100644 --- a/src/views/personal/education/individual-material.html +++ b/src/views/personal/education/individual-material.html @@ -41,7 +41,7 @@ @@ -97,7 +97,7 @@ - {{"TABLEOFCONTENTS"|translate}} + {{"TABLE_OF_CONTENTS"|translate}} @@ -134,7 +134,7 @@ + loading-message="{{'LOADING_MATERIAL'|translate}}">
diff --git a/src/views/personal/education/material-rating-template.html b/src/views/personal/education/material-rating-template.html index c978ee06f..ee867b7c6 100644 --- a/src/views/personal/education/material-rating-template.html +++ b/src/views/personal/education/material-rating-template.html @@ -6,13 +6,13 @@
-

{{"RATETHISMATERIAL"|translate}}

+

{{"RATE_THIS_MATERIAL"|translate}}

- {{"RATEIT" | translate}} + {{"RATE_IT" | translate}}
-

{{"THANKYOUFORFEEDBACK"|translate}}

+

{{"THANK_YOU_FOR_FEEDBACK"|translate}}

diff --git a/src/views/personal/education/table-contents-popover.html b/src/views/personal/education/table-contents-popover.html index 3cd24cc45..d0871835c 100644 --- a/src/views/personal/education/table-contents-popover.html +++ b/src/views/personal/education/table-contents-popover.html @@ -9,7 +9,7 @@

{{contentsEduBooklet.Booklet.Name}}

- {{"TABLEOFCONTENTS"|translate}} + {{"TABLE_OF_CONTENTS"|translate}} diff --git a/src/views/personal/notifications/notifications.html b/src/views/personal/notifications/notifications.html index 2511c34a3..e37146a0b 100644 --- a/src/views/personal/notifications/notifications.html +++ b/src/views/personal/notifications/notifications.html @@ -59,6 +59,6 @@
-

{{"NONOTIFICATIONS"|translate}}

+

{{"NO_NOTIFICATIONS"|translate}}

diff --git a/src/views/personal/personal.html b/src/views/personal/personal.html index 27e31c785..c096857ef 100644 --- a/src/views/personal/personal.html +++ b/src/views/personal/personal.html @@ -98,7 +98,7 @@
{{"TREATINGTEAMNOTIFICATIONS"|translate}} + ng-class="fontSizeTitle">{{"TREATING_TEAM_NOTIFICATIONS"|translate}}

@@ -169,7 +169,7 @@
- {{"SMARTDEVICES"|translate}} + {{"SMART_DEVICES"|translate}}

diff --git a/src/views/personal/questionnaires/answeredQuestionnaire.html b/src/views/personal/questionnaires/answeredQuestionnaire.html index f314b6b75..4c14bf8ed 100644 --- a/src/views/personal/questionnaires/answeredQuestionnaire.html +++ b/src/views/personal/questionnaires/answeredQuestionnaire.html @@ -14,7 +14,7 @@ - +
{{vm.questionna
diff --git a/src/views/personal/questionnaires/questionnaires.html b/src/views/personal/questionnaires/questionnaires.html index 187868a4c..a92cc5d02 100644 --- a/src/views/personal/questionnaires/questionnaires.html +++ b/src/views/personal/questionnaires/questionnaires.html @@ -31,7 +31,7 @@ + loading-message="{{'LOADING_QUESTIONNAIRE'|translate}}">
@@ -291,7 +291,7 @@


diff --git a/src/views/personal/research/research-studies/individual-study.html b/src/views/personal/research/research-studies/individual-study.html index 16fb149a1..cdfd54916 100644 --- a/src/views/personal/research/research-studies/individual-study.html +++ b/src/views/personal/research/research-studies/individual-study.html @@ -38,7 +38,7 @@

{{stud.study["t ng-class="fontSizeDesc">
{{"EMAIL"|translate}}: {{stud.study["email"]}}

{{"PHONENUMBER"|translate}}:
{{"PHONE_NUMBER"|translate}}:
{{stud.study["phone"]|FormatPhoneNumber}}
x {{stud.study["phoneExt"]}} diff --git a/src/views/personal/test-results/test-results-by-datetime.html b/src/views/personal/test-results/test-results-by-datetime.html index c385bfb26..dcb84bf03 100755 --- a/src/views/personal/test-results/test-results-by-datetime.html +++ b/src/views/personal/test-results/test-results-by-datetime.html @@ -16,7 +16,7 @@ - +
diff --git a/src/views/personal/test-results/test-results-by-type.html b/src/views/personal/test-results/test-results-by-type.html index 9c05e6f1d..eeadaddb1 100755 --- a/src/views/personal/test-results/test-results-by-type.html +++ b/src/views/personal/test-results/test-results-by-type.html @@ -11,7 +11,7 @@ - +
diff --git a/src/views/personal/test-results/test-results.html b/src/views/personal/test-results/test-results.html index c70925186..4249b2962 100755 --- a/src/views/personal/test-results/test-results.html +++ b/src/views/personal/test-results/test-results.html @@ -30,12 +30,12 @@
-
{{'LAB_BYDATE'|translate}}
+
{{'LAB_BY_DATE'|translate}}
-
{{'LAB_BYTYPE'|translate}}
+
{{'LAB_BY_TYPE'|translate}}
diff --git a/src/views/personal/treatment-team-messages/team-messages.html b/src/views/personal/treatment-team-messages/team-messages.html index a097e46ae..940c33ac3 100644 --- a/src/views/personal/treatment-team-messages/team-messages.html +++ b/src/views/personal/treatment-team-messages/team-messages.html @@ -5,7 +5,7 @@ --> - + @@ -40,6 +40,6 @@
-

{{"NOTEAMMESSAGES"|translate}}

+

{{"NO_TEAM_MESSAGES"|translate}}

diff --git a/src/views/settings/settings.html b/src/views/settings/settings.html index 203a407ad..70be2a4a5 100644 --- a/src/views/settings/settings.html +++ b/src/views/settings/settings.html @@ -66,7 +66,7 @@ - {{"SIGNOUT"|translate}} + {{"SIGN_OUT"|translate}} diff --git a/src/views/settings/update-account-field.html b/src/views/settings/update-account-field.html index 65f56e0e4..80abdecde 100644 --- a/src/views/settings/update-account-field.html +++ b/src/views/settings/update-account-field.html @@ -17,14 +17,14 @@ ng-minlength="1" type="password" ng-class="fontSizeDesc" - placeholder="{{'ENTEROLDPASSWORDPLACEHOLDER' | translate}}" + placeholder="{{'ENTER_OLD_PASSWORD_PLACEHOLDER' | translate}}" ng-model="Ctrl.oldValue" ng-change="Ctrl.passwordFieldChange()">

-

{{"RESETINSTRUCTIONS" | translate}}

+

{{"RESET_INSTRUCTIONS" | translate}}

@@ -34,7 +34,7 @@ type="password" ng-class="fontSizeDesc" class="style-4" - placeholder="{{'SETNEWPASSWORDPLACEHOLDER' | translate}}" + placeholder="{{'SET_NEW_PASSWORD_PLACEHOLDER' | translate}}" ng-model="Ctrl.newValue" ng-change="Ctrl.passwordFieldChange()"> @@ -55,7 +55,7 @@ type="password" ng-class="fontSizeDesc" class="style-4" - placeholder="{{'REENTERPASSWORDPLACEHOLDER' | translate}}" + placeholder="{{'REENTER_PASSWORD_PLACEHOLDER' | translate}}" ng-model="Ctrl.newValueValidate" ng-change="Ctrl.passwordFieldChange()"> @@ -65,7 +65,7 @@ diff --git a/src/views/settings/update-security-question.html b/src/views/settings/update-security-question.html index 0b8413e64..a8777b0a2 100644 --- a/src/views/settings/update-security-question.html +++ b/src/views/settings/update-security-question.html @@ -13,14 +13,14 @@
-

{{"SELECT_3_SECURITY_QUESTIONS"|translate}}

+

{{"SECURITY_QUESTIONS_INSTRUCTIONS"|translate}}

{{"SECURITY_QUESTION_LOGOUT_WARNING"|translate}}


-

{{"ENTERPASSWORD"|translate}}

+

{{"ENTER_PASSWORD"|translate}}

diff --git a/src/views/smartdevices/devices/etekcity_scale.html b/src/views/smartdevices/devices/etekcity_scale.html index e53bfe42c..e6db8b21d 100644 --- a/src/views/smartdevices/devices/etekcity_scale.html +++ b/src/views/smartdevices/devices/etekcity_scale.html @@ -5,7 +5,7 @@ --> - + @@ -20,24 +20,24 @@
-

{{ "SMARTDEVICES_SCALE_INSTRUCTIONS" | translate }}

+

{{ "SMART_DEVICES_SCALE_INSTRUCTIONS" | translate }}

- +
-

{{ "SMARTDEVICES_WEIGHT" | translate }}

+

{{ "SMART_DEVICES_WEIGHT" | translate }}

{{ ctrl.weight }}kg

@@ -48,21 +48,21 @@ -->
-

{{ "SMARTDEVICES_SCALE_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_INFO_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_SCALE_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_INFO_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_MULTIPLE" | translate }}

+

{{ "SMART_DEVICES_MULTIPLE" | translate }}

@@ -78,7 +78,7 @@
diff --git a/src/views/smartdevices/devices/vitaltracer_watch.html b/src/views/smartdevices/devices/vitaltracer_watch.html index 841c000b1..d5ddbca37 100644 --- a/src/views/smartdevices/devices/vitaltracer_watch.html +++ b/src/views/smartdevices/devices/vitaltracer_watch.html @@ -5,7 +5,7 @@ --> - + @@ -22,18 +22,18 @@
- +
-

{{ "SMARTDEVICES_VITAL_SIGNS" | translate }}

+

{{ "SMART_DEVICES_VITAL_SIGNS" | translate }}

{{ ctrl.heartRate }}bpm {{ ctrl.bloodPressureSystolic }} / {{ ctrl.bloodPressureDiastolic }}mm Hg @@ -44,16 +44,16 @@

-

{{ "SMARTDEVICES_VITALTRACER_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_INFO_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_VITALTRACER_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_INFO_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_MULTIPLE" | translate }}

+

{{ "SMART_DEVICES_MULTIPLE" | translate }}

@@ -69,7 +69,7 @@

diff --git a/src/views/smartdevices/devices/xiaomi_scale.html b/src/views/smartdevices/devices/xiaomi_scale.html index 346c62ee2..1e1dac35c 100644 --- a/src/views/smartdevices/devices/xiaomi_scale.html +++ b/src/views/smartdevices/devices/xiaomi_scale.html @@ -5,7 +5,7 @@ --> - + @@ -20,24 +20,24 @@
-

{{ "SMARTDEVICES_SCALE_INSTRUCTIONS" | translate }}

+

{{ "SMART_DEVICES_SCALE_INSTRUCTIONS" | translate }}

- +
-

{{ "SMARTDEVICES_WEIGHT" | translate }}

+

{{ "SMART_DEVICES_WEIGHT" | translate }}

{{ ctrl.weight }}kg

@@ -48,21 +48,21 @@ -->
-

{{ "SMARTDEVICES_SCALE_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_INFO_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_SCALE_SUBMITTED" | translate }}

+

{{ "SMART_DEVICES_INFO_SUBMITTED" | translate }}

-

{{ "SMARTDEVICES_MULTIPLE" | translate }}

+

{{ "SMART_DEVICES_MULTIPLE" | translate }}

@@ -78,7 +78,7 @@
diff --git a/src/views/smartdevices/smartdevices-info.html b/src/views/smartdevices/smartdevices-info.html index 3e5717bb8..6e7ed5a59 100644 --- a/src/views/smartdevices/smartdevices-info.html +++ b/src/views/smartdevices/smartdevices-info.html @@ -5,11 +5,11 @@ --> - +
- {{'SMARTDEVICES_LIST_INFO'|translate}} + {{'SMART_DEVICES_LIST_INFO'|translate}}
diff --git a/src/views/smartdevices/smartdevices.html b/src/views/smartdevices/smartdevices.html index f08236a12..e3bd811f0 100644 --- a/src/views/smartdevices/smartdevices.html +++ b/src/views/smartdevices/smartdevices.html @@ -5,7 +5,7 @@ --> - + @@ -17,15 +17,15 @@
-

{{"SMARTDEVICES_BLUETOOTH_DISABLED"|translate}}

-

{{"SMARTDEVICES_BLUETOOTH_PROMPT"|translate}}

+

{{"SMART_DEVICES_BLUETOOTH_DISABLED"|translate}}

+

{{"SMART_DEVICES_BLUETOOTH_PROMPT"|translate}}

-

{{"SMARTDEVICES_BLUETOOTH_UNAVAILABLE"|translate}}

+

{{"SMART_DEVICES_BLUETOOTH_UNAVAILABLE"|translate}}

@@ -41,7 +41,7 @@

{{"SMARTDEVICES_BLUETOOTH_UNAVAILABLE"|translate}}

style="color:red; display: inline-block">
-

{{"SMARTDEVICES_VITALTRACER"|translate}}

+

{{"SMART_DEVICES_VITALTRACER"|translate}}

@@ -55,7 +55,7 @@

{{"SMARTDEVICES_BLUETOOTH_UNAVAILABLE"|translate}}

style="color:red; display: inline-block">
-

{{"SMARTDEVICES_ETEKCITY"|translate}}

+

{{"SMART_DEVICES_ETEKCITY"|translate}}

@@ -69,7 +69,7 @@

{{"SMARTDEVICES_BLUETOOTH_UNAVAILABLE"|translate}}

style="color:red; display: inline-block">
-

{{"SMARTDEVICES_XIAOMI_SCALE"|translate}}

+

{{"SMART_DEVICES_XIAOMI_SCALE"|translate}}

diff --git a/src/views/tabs/tabs.html b/src/views/tabs/tabs.html index ee839ba75..d82f87db8 100644 --- a/src/views/tabs/tabs.html +++ b/src/views/tabs/tabs.html @@ -15,7 +15,7 @@
-
{{"MYCHART"|translate}}
+
{{"CHART"|translate}}
From aa70d86dc3ab6917bb779f32346c346d8aa487c6 Mon Sep 17 00:00:00 2001 From: Stacey Beard <31229509+staceybeard@users.noreply.github.com> Date: Wed, 21 May 2025 18:26:18 -0400 Subject: [PATCH 08/36] ci: combine build and deploy web workflows (#1382) Combined the build and deployment workflows for the web app, to match the combined workflow for build and deployment of the mobile app. - Replaced `github.ref` with `github.ref_name`. - Removed unnecessary capitalization of the ENVIRONMENT variable, since GitHub Actions variables are case-insensitive. --- ...nd-deploy-app.yml => build-deploy-app.yml} | 4 +- .../{build-web.yml => build-deploy-web.yml} | 70 +++++++++++++------ .github/workflows/deploy-web.yml | 67 ------------------ 3 files changed, 51 insertions(+), 90 deletions(-) rename .github/workflows/{build-and-deploy-app.yml => build-deploy-app.yml} (98%) rename .github/workflows/{build-web.yml => build-deploy-web.yml} (54%) delete mode 100644 .github/workflows/deploy-web.yml diff --git a/.github/workflows/build-and-deploy-app.yml b/.github/workflows/build-deploy-app.yml similarity index 98% rename from .github/workflows/build-and-deploy-app.yml rename to .github/workflows/build-deploy-app.yml index b6101eb62..c133a432f 100644 --- a/.github/workflows/build-and-deploy-app.yml +++ b/.github/workflows/build-deploy-app.yml @@ -151,7 +151,7 @@ jobs: needs: build-android runs-on: ubuntu-latest # Deploy manually via inputs, or automatically (to dev) when building on main - if: ${{ inputs.DEPLOY || github.ref == 'refs/heads/main' }} + if: ${{ inputs.DEPLOY || github.ref_name == 'main' }} steps: # Setup - uses: actions/checkout@v4.2.2 @@ -185,7 +185,7 @@ jobs: needs: build-ios runs-on: ubuntu-latest # Deploy manually via inputs, or automatically (to dev) when building on main - if: ${{ inputs.DEPLOY || github.ref == 'refs/heads/main' }} + if: ${{ inputs.DEPLOY || github.ref_name == 'main' }} steps: # Setup - uses: actions/checkout@v4.2.2 diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-deploy-web.yml similarity index 54% rename from .github/workflows/build-web.yml rename to .github/workflows/build-deploy-web.yml index c5e12c046..3a4264259 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-deploy-web.yml @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: Apache-2.0 -name: Build Web +name: Build and Deploy Web # Default to dev when running automatically (see also "env" below) run-name: Building and (optionally) deploying the web app for ${{ inputs.ENVIRONMENT || 'dev' }} 📦🚀 on: @@ -44,21 +44,17 @@ jobs: runs-on: ubuntu-latest steps: # Setup - - name: Convert environment to all caps - run: echo ENVIRONMENT_CAPS="$(echo "$ENVIRONMENT" | tr '[:lower:]' '[:upper:]')" >> "$GITHUB_ENV" - name: Print environment - run: | - echo "Environment: $ENVIRONMENT ($ENVIRONMENT_CAPS)" + run: echo "Environment = $ENVIRONMENT" - uses: actions/checkout@v4.2.2 with: persist-credentials: false - - name: Set up build uses: ./.github/actions/build-setup with: NPMRC_FILE: ${{ secrets.NPMRC_FILE }} - ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT_CAPS)] }} - ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT_CAPS)] }} + ENV_CONFIG_JS: ${{ vars[format('{0}_CONFIG_JS', env.ENVIRONMENT)] }} + ENV_GOOGLE_SERVICES: ${{ vars[format('{0}_GOOGLE_SERVICES', env.ENVIRONMENT)] }} # Build for web - name: Build the web app @@ -70,22 +66,54 @@ jobs: - name: Archive build output uses: actions/upload-artifact@v4.6.2 with: - name: Web app + name: web-app path: web-app - # Pass $ENVIRONMENT to the next job (workaround for reusable workflows) - # See: https://github.com/actions/runner/issues/2372 - # See: https://stackoverflow.com/questions/73797254/environment-variables-in-github-actions/74217028#74217028) - outputs: - ENVIRONMENT: ${{ env.ENVIRONMENT }} - # Call another workflow if applicable to deploy the web app deploy-web: needs: build-web + runs-on: ubuntu-latest # Deploy manually via inputs, or automatically (to dev) when building on main - if: ${{ inputs.DEPLOY || github.ref == 'refs/heads/main' }} - uses: ./.github/workflows/deploy-web.yml - with: - ENVIRONMENT: ${{ needs.build-web.outputs.ENVIRONMENT }} - secrets: - FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }} + # TODO test github.ref_name + if: ${{ inputs.DEPLOY || github.ref_name == 'main' }} + steps: + # Setup + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + - name: Ensure $ENVIRONMENT is defined to avoid destructive mirroring on the server + run: | + echo "Environment = $ENVIRONMENT; target folder for upload is ./app/${ENVIRONMENT}/" + if [ -z "$ENVIRONMENT" ]; then exit 1; fi + shell: bash + - name: Download web build artifact (`www`) + uses: actions/download-artifact@v4.3.0 + with: + name: web-app + run-id: ${{ github.run_id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Install lftp + run: | + sudo apt-get install lftp + lftp --version + - name: List contents of `www` + run: ls -la www + + # Upload web files + # See: https://www.cyberciti.biz/faq/lftp-mirror-example/ + # See: https://linuxconfig.org/lftp-tutorial-on-linux-with-examples + - name: Upload files using lftp + run: > + lftp -c " + set cmd:fail-exit yes; + open $FTP_HOST + user $FTP_USER $FTP_PASSWORD; + mirror --exclude='app' --exclude='content' --reverse --delete --verbose ./static/landingpage/ ./app/${ENVIRONMENT}/; + mirror --reverse --delete --use-pget-n=10 --verbose ./www/ ./app/${ENVIRONMENT}/app/; + ls -la app/${ENVIRONMENT}; + bye + " + env: + FTP_HOST: ${{ vars.FTP_HOST }} + FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }} + FTP_USER: ${{ vars.FTP_USER }} diff --git a/.github/workflows/deploy-web.yml b/.github/workflows/deploy-web.yml deleted file mode 100644 index 4b189fdcd..000000000 --- a/.github/workflows/deploy-web.yml +++ /dev/null @@ -1,67 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre -# -# SPDX-License-Identifier: Apache-2.0 - -name: Deploy Web -run-name: Deploying the web app for ${{ inputs.ENVIRONMENT }} 🚀 -on: - workflow_call: - inputs: - ENVIRONMENT: - required: true - type: string - secrets: - FTP_PASSWORD: - required: true - -permissions: - contents: read - -jobs: - deploy-web: - runs-on: ubuntu-latest - steps: - # Setup - - uses: actions/checkout@v4.2.2 - with: - persist-credentials: false - - name: Download web build artifact (`www`) - uses: actions/download-artifact@v4.3.0 - with: - name: Web app - run-id: ${{ github.run_id }} - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: Install lftp - run: | - sudo apt-get install lftp - lftp --version - - name: List contents of `www` - run: ls -la www - - - name: Ensure $ENVIRONMENT is defined to avoid destructive mirroring on the server - run: | - echo "Environment: $ENVIRONMENT" - if [ -z "$ENVIRONMENT" ]; then exit 1; fi - shell: bash - env: - ENVIRONMENT: ${{ inputs.ENVIRONMENT }} - - # Upload web files - # See: https://www.cyberciti.biz/faq/lftp-mirror-example/ - # See: https://linuxconfig.org/lftp-tutorial-on-linux-with-examples - - name: Upload files using lftp - run: > - lftp -c " - set cmd:fail-exit yes; - open $FTP_HOST - user $FTP_USER $FTP_PASSWORD; - mirror --exclude='app' --exclude='content' --reverse --delete --verbose ./static/landingpage/ ./app/${ENVIRONMENT}/; - mirror --reverse --delete --use-pget-n=10 --verbose ./www/ ./app/${ENVIRONMENT}/app/; - ls -la app/${ENVIRONMENT}; - bye - " - env: - ENVIRONMENT: ${{ inputs.ENVIRONMENT }} - FTP_HOST: ${{ vars.FTP_HOST }} - FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }} - FTP_USER: ${{ vars.FTP_USER }} From e0a99d12d858c21f33286d6a019b3c930c7b72a9 Mon Sep 17 00:00:00 2001 From: Stacey Beard <31229509+staceybeard@users.noreply.github.com> Date: Mon, 26 May 2025 14:26:23 -0400 Subject: [PATCH 09/36] ci: calculate build number based on the commit history (#1383) Added steps to the `build-setup` action to calculate a build number based on the number of commits between tags. For example, the first commit tagged v2.0.0 will be 2.0.0 (1). The next commit will be 2.0.0 (2), and so on, until the next tag. --- .github/actions/build-setup/action.yml | 47 ++++++++++++++++++++++++++ .github/workflows/build-deploy-app.yml | 6 ++++ .github/workflows/build-deploy-web.yml | 4 ++- 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/.github/actions/build-setup/action.yml b/.github/actions/build-setup/action.yml index 7503b363a..b9354917c 100644 --- a/.github/actions/build-setup/action.yml +++ b/.github/actions/build-setup/action.yml @@ -49,3 +49,50 @@ runs: env: ENV_CONFIG_JS: ${{ inputs.ENV_CONFIG_JS }} ENV_GOOGLE_SERVICES: ${{ inputs.ENV_GOOGLE_SERVICES }} + + # Setup for the next step, calculate-build-number + # Ensure the sed command works the same way on Linux and Mac by installing gnu-sed on Mac + - name: Install gnu-sed if running on macOS + run: | + if [ "$IS_ON_MACOS" == "true" ]; then + echo "Installing gnu-sed" + brew install gnu-sed + echo "/opt/homebrew/opt/gnu-sed/libexec/gnubin" >> "$GITHUB_PATH" + else + echo "Not on macOS, using default sed" + fi + shell: bash + env: + IS_ON_MACOS: ${{ runner.os == 'macOS' }} + + # Calculate the app's build number, for example the number '2' in 1.0.0 (2). + - name: Calculate build number + id: calculate-build-number + # Calculate the number of commits (inclusive) between the last tagged version (e.g. v2.0.0) and the current commit + # This represents the build number; for example, the first commit tagged v2.0.0 will be 2.0.0 (1). The next commit will be 2.0.0 (2), and so on, until the next tag. + # This is only applicable on the 'main' branch; if not on main, use default value '1' + run: | + LATEST_TAG=$(git describe --tags --abbrev=0 --match v*) + COMMIT_DISTANCE=$(git rev-list --count $LATEST_TAG..HEAD) + NEW_BUILD_NUMBER=$((COMMIT_DISTANCE + 1)) + if [ "$IS_ON_MAIN" = true ]; then + echo "Calculating build number" + BUILD_NUMBER=$NEW_BUILD_NUMBER + else + echo "Execution is not on the main branch, defaulting to 1" + BUILD_NUMBER=1 + fi + echo "BUILD_NUMBER=$BUILD_NUMBER" >> "$GITHUB_OUTPUT" + echo "Using build number = $BUILD_NUMBER" + shell: bash + env: + IS_ON_MAIN: ${{ github.ref_name == 'main' }} + + # Replace the build number in the file opal.config.js with the newly calculated value. + - name: Replace build number in opal.config.js + run: | + sed --in-place --regexp-extended "s/\"BUILD_NUMBER\"\: .+\,/\"BUILD_NUMBER\"\: ${BUILD_NUMBER}\,/" env/$ENVIRONMENT/opal.config.js + grep BUILD_NUMBER env/$ENVIRONMENT/opal.config.js + shell: bash + env: + BUILD_NUMBER: ${{ steps.calculate-build-number.outputs.BUILD_NUMBER }} diff --git a/.github/workflows/build-deploy-app.yml b/.github/workflows/build-deploy-app.yml index c133a432f..2c5f828e2 100644 --- a/.github/workflows/build-deploy-app.yml +++ b/.github/workflows/build-deploy-app.yml @@ -49,6 +49,9 @@ jobs: - uses: actions/checkout@v4.2.2 with: persist-credentials: false + # Fetch part of the commit history and its tags, in order to calculate the build number in `build-setup` + fetch-depth: ${{ vars.FETCH_DEPTH }} + fetch-tags: true - name: Set up build uses: ./.github/actions/build-setup with: @@ -83,6 +86,9 @@ jobs: - uses: actions/checkout@v4.2.2 with: persist-credentials: false + # Fetch part of the commit history and its tags, in order to calculate the build number in `build-setup` + fetch-depth: ${{ vars.FETCH_DEPTH }} + fetch-tags: true - name: Set up build uses: ./.github/actions/build-setup with: diff --git a/.github/workflows/build-deploy-web.yml b/.github/workflows/build-deploy-web.yml index 3a4264259..852eca1ea 100644 --- a/.github/workflows/build-deploy-web.yml +++ b/.github/workflows/build-deploy-web.yml @@ -49,6 +49,9 @@ jobs: - uses: actions/checkout@v4.2.2 with: persist-credentials: false + # Fetch part of the commit history and its tags, in order to calculate the build number in `build-setup` + fetch-depth: ${{ vars.FETCH_DEPTH }} + fetch-tags: true - name: Set up build uses: ./.github/actions/build-setup with: @@ -74,7 +77,6 @@ jobs: needs: build-web runs-on: ubuntu-latest # Deploy manually via inputs, or automatically (to dev) when building on main - # TODO test github.ref_name if: ${{ inputs.DEPLOY || github.ref_name == 'main' }} steps: # Setup From 522e26dab746765fd314ff9ec4eb143b947bca56 Mon Sep 17 00:00:00 2001 From: Stacey Beard <31229509+staceybeard@users.noreply.github.com> Date: Tue, 27 May 2025 16:16:30 -0400 Subject: [PATCH 10/36] ci: add workflow to increment the app version using semantic-release (#1384) Wrote a workflow that calls `semantic-release` to automatically increment the app's version number based on the commit history since the last version. Note that this workflow doesn't trigger building and releasing the app. For now, this can be executed manually after incrementing the version, if needed. - Moved dependency installation to a composite action for reuse. - Fixed `"on commit commit"` message from the release notes, since `git log --format=medium` already includes the word `commit`. --- .github/actions/build-setup/action.yml | 20 ++--------- .github/actions/deploy-app-setup/action.yml | 2 +- .../actions/install-dependencies/action.yml | 34 ++++++++++++++++++ .github/workflows/increment-version.yml | 36 +++++++++++++++++++ opal-env.setup.js | 4 ++- package.json | 8 +++-- renovate.json5 | 2 +- 7 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 .github/actions/install-dependencies/action.yml create mode 100644 .github/workflows/increment-version.yml diff --git a/.github/actions/build-setup/action.yml b/.github/actions/build-setup/action.yml index b9354917c..b3f35dfd5 100644 --- a/.github/actions/build-setup/action.yml +++ b/.github/actions/build-setup/action.yml @@ -20,24 +20,10 @@ runs: using: "composite" steps: # Install dependencies - - name: Load .npmrc - run: echo "${NPMRC_FILE}" > .npmrc - shell: bash - env: - NPMRC_FILE: ${{ inputs.NPMRC_FILE }} - # Use setup-node's built-in functionality for caching and restoring npm dependencies - # See: https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows - - uses: actions/setup-node@v4.4.0 - with: - # renovate: datasource=node-version dependency=node - node-version: 22.15.0 - cache: 'npm' - - name: Check npm installation - run: npm -v - shell: bash - name: Install dependencies - run: npm ci - shell: bash + uses: ./.github/actions/install-dependencies + with: + NPMRC_FILE: ${{ inputs.NPMRC_FILE }} # Initialize the environment files needed to build the app from repository-level Actions variables - name: Load environment files diff --git a/.github/actions/deploy-app-setup/action.yml b/.github/actions/deploy-app-setup/action.yml index 5eae0d14c..95302a2c1 100644 --- a/.github/actions/deploy-app-setup/action.yml +++ b/.github/actions/deploy-app-setup/action.yml @@ -21,7 +21,7 @@ runs: run: | { echo 'RELEASE_NOTES<> "$GITHUB_ENV" shell: bash diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml new file mode 100644 index 000000000..e02aa736d --- /dev/null +++ b/.github/actions/install-dependencies/action.yml @@ -0,0 +1,34 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Install Dependencies +description: Install the dependencies needed by the app, using npm + +inputs: + NPMRC_FILE: + description: 'Secret with the contents of .npmrc' + required: true + +runs: + using: "composite" + steps: + # Install dependencies + - name: Load .npmrc + run: echo "${NPMRC_FILE}" > .npmrc + shell: bash + env: + NPMRC_FILE: ${{ inputs.NPMRC_FILE }} + # Use setup-node's built-in functionality for caching and restoring npm dependencies + # See: https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows + - uses: actions/setup-node@v4.4.0 + with: + # renovate: datasource=node-version dependency=node + node-version: 22.15.0 + cache: 'npm' + - name: Check npm installation + run: npm -v + shell: bash + - name: Install dependencies + run: npm ci + shell: bash diff --git a/.github/workflows/increment-version.yml b/.github/workflows/increment-version.yml new file mode 100644 index 000000000..955f7c1ac --- /dev/null +++ b/.github/workflows/increment-version.yml @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: Copyright (C) 2025 Opal Health Informatics Group at the Research Institute of the McGill University Health Centre +# +# SPDX-License-Identifier: Apache-2.0 + +name: Increment Version +run-name: Incrementing the app version using semantic-release +on: + # Offer a manual interface to run semantic-release + workflow_dispatch: + +permissions: + contents: read + +jobs: + # See: https://semantic-release.gitbook.io/semantic-release/recipes/ci-configurations/github-actions#node-project-configuration + increment-version: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + # Setup + - uses: actions/checkout@v4.2.2 + with: + persist-credentials: false + # Fetch part of the commit history, used by semantic-release to calculate a new version number + fetch-depth: ${{ vars.FETCH_DEPTH }} + - name: Install dependencies + uses: ./.github/actions/install-dependencies + with: + NPMRC_FILE: ${{ secrets.NPMRC_FILE }} + + # Increment the version + - name: Run semantic-release + run: npx semantic-release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/opal-env.setup.js b/opal-env.setup.js index 5009ba1dc..c2316cfc8 100644 --- a/opal-env.setup.js +++ b/opal-env.setup.js @@ -257,7 +257,9 @@ class OpalEnv { fullTagEmptyElement: false, indentCdata: true, spaces: 4, - }) + }); + // Make sure the file ends in a newline + contentToWrite += '\n'; fs.writeFileSync(filePath, contentToWrite); } diff --git a/package.json b/package.json index 246c9614b..af5812ae1 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,8 @@ "name": "opal-app", "description": "Opal Mobile App", "main": "index.js", + "_comment": "Private: true is used to prevent semantic-release from publishing to the registry: https://semantic-release.gitbook.io/semantic-release/support/faq#there-are-valid-reasons-to-commit-during-a-release", + "private": true, "scripts": { "help": "echo Append a variable at the end of each start or build command to specify which environment to use, for example: --env=local", "postinstall": "node -e \"require('./opal-env.setup.js').createWWWFolder()\"", @@ -32,7 +34,7 @@ }, "repository": { "type": "git", - "url": "https://gitlab.com/opalmedapps/qplus.git" + "url": "https://github.com/opalmedapps/opal-app.git" }, "keywords": [ "Health", @@ -41,9 +43,9 @@ "author": "Opal Health Informatics Group", "license": "Apache-2.0", "bugs": { - "url": "https://github.com/Sable/qplus/issues" + "url": "https://github.com/opalmedapps/opal-app/issues" }, - "homepage": "https://github.com/Sable/qplus#readme", + "homepage": "https://github.com/opalmedapps/opal-app#readme", "dependencies": { "@babel/runtime": "7.26.10", "@fortawesome/fontawesome-free": "6.7.2", diff --git a/renovate.json5 b/renovate.json5 index 9b50cdb39..66dcfcbb7 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -13,7 +13,7 @@ // https://docs.renovatebot.com/presets-default/#separatepatchreleases ":separatePatchReleases", // get updates for alpine version of node images - "gitlab>opalmedapps/renovate-bot//presets/docker-alpine.json5", + "github>mschoettle/renovate-presets//presets/docker-alpine.json5", // set timezone to local one to ensure schedules are run // https://docs.renovatebot.com/configuration-options/#timezone ":timezone(America/Toronto)", From cf49d9e3fb2913c7ac15a790c07c3b507438f43a Mon Sep 17 00:00:00 2001 From: Stacey Beard <31229509+staceybeard@users.noreply.github.com> Date: Thu, 12 Jun 2025 14:00:36 -0400 Subject: [PATCH 11/36] chore: update author in config.xml (#1385) Updated the author email in `config.xml` to `contact@opalmedapps.ca`, and the author name to `Opal Health Informatics Group`. --- env/config.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/env/config.xml b/env/config.xml index b394c9442..311ca578c 100644 --- a/env/config.xml +++ b/env/config.xml @@ -9,8 +9,8 @@ SPDX-License-Identifier: Apache-2.0 Opal is a patient portal designed to empower patients with their medical information. - - Opal Med Apps Inc. + + Opal Health Informatics Group

-

+

{{"WAITING_ROOM"|translate}} {{app["MapName_" + checkIn.language]}}

diff --git a/src/views/settings/settings.html b/src/views/settings/settings.html index 70be2a4a5..fd515b10c 100644 --- a/src/views/settings/settings.html +++ b/src/views/settings/settings.html @@ -56,7 +56,7 @@
{{"PREFERENCES"|translate}}
- + {{"LANGUAGE"|translate}} {{Ctrl.Language}} diff --git a/webpack.config.js b/webpack.config.js index 7b4d6332d..b4df24359 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -42,10 +42,10 @@ const config = env => { const OPAL_ENV_FOLDER = path.join(__dirname, (OPAL_ENV) ? `./env/${OPAL_ENV}` : './'); // Read environment settings from opal.config.js - let requiredSettingNames = ["externalContentFileURL", "serviceStatusURL", "useSourceMap", "webpackMode"]; + let requiredSettingNames = ['externalContentFileURL', 'serviceStatusURL', 'supportedLanguages', 'useSourceMap', 'webpackMode']; let settings = {}; requiredSettingNames.forEach(name => settings[name] = OpalEnv.getEnvSetting(name, OPAL_ENV)); - console.log("Environment settings:", settings); + console.log("Required environment settings:", settings); // Check whether to minimize the output (default = true) let minimize; From ee6a26d47881d858bebd816968c898b6b0773157 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 15:55:59 -0400 Subject: [PATCH 18/36] chore(deps): update dependency webpack to v5.100.2 (#1394) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 57 ++++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 37 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 64c174a38..3550ddc86 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,7 +86,7 @@ "shelljs": "0.10.0", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "webpack": "5.98.0", + "webpack": "5.100.2", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.1", "webpack-manifest-plugin": "5.0.1", @@ -4503,9 +4503,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, @@ -5067,9 +5067,9 @@ } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -5079,6 +5079,19 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/agent-base": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", @@ -21909,9 +21922,9 @@ "license": "ISC" }, "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -25141,21 +25154,23 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "version": "5.100.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.2.tgz", + "integrity": "sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.2", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -25165,11 +25180,11 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -25478,9 +25493,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index d6469737a..7f61ffcdf 100644 --- a/package.json +++ b/package.json @@ -125,7 +125,7 @@ "shelljs": "0.10.0", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "webpack": "5.98.0", + "webpack": "5.100.2", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.1", "webpack-manifest-plugin": "5.0.1", From 9267f0ea7b46783ad6c7058900b07bc57c520f60 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 16:02:08 -0400 Subject: [PATCH 19/36] chore(deps): update dependency firebase-tools to v14 (#1396) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 1178 +++++++++++++++++++++++++++++++++------------ package.json | 2 +- 2 files changed, 866 insertions(+), 314 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3550ddc86..4df197eff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -75,7 +75,7 @@ "copy-webpack-plugin": "13.0.0", "css-loader": "7.1.2", "exports-loader": "5.0.0", - "firebase-tools": "13.29.1", + "firebase-tools": "14.10.1", "html-webpack-plugin": "5.6.3", "imports-loader": "5.0.0", "node-polyfill-webpack-plugin": "4.1.0", @@ -1751,12 +1751,22 @@ } }, "node_modules/@electric-sql/pglite": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.2.17.tgz", - "integrity": "sha512-qEpKRT2oUaWDH6tjRxLHjdzMqRUGYDnGZlKrnL4dJ77JVMcP2Hpo3NYnOSPKdZdeec57B6QPprCUFg0picx5Pw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.3.5.tgz", + "integrity": "sha512-fhODErXJjOrnsJj5f1A8sH/Zj0INpLUbqOCiskufIUImUsFOBNHE6/FApY656Q2VSOp46wkXX3rvbBBO8O8Cag==", "dev": true, "license": "Apache-2.0" }, + "node_modules/@electric-sql/pglite-tools": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.2.10.tgz", + "integrity": "sha512-iPdWvzy9j0c8R6MMZeXhwp2oZ8RjCkrXjPPew64TW97esEHCg1r5A9bHXFytRqkzLsxigkElgkBdzbZFzMvNUw==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "@electric-sql/pglite": "0.3.5" + } + }, "node_modules/@firebase/analytics": { "version": "0.10.12", "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.12.tgz", @@ -2545,6 +2555,344 @@ } } }, + "node_modules/@inquirer/checkbox": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.9.tgz", + "integrity": "sha512-DBJBkzI5Wx4jFaYm221LHvAhpKYkhVS0k9plqHwaHhofGNxvYB7J3Bz8w+bFJ05zaMb0sZNHo4KdmENQFlNTuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.13.tgz", + "integrity": "sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.14.tgz", + "integrity": "sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/core/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.14.tgz", + "integrity": "sha512-yd2qtLl4QIIax9DTMZ1ZN2pFrrj+yL3kgIWxm34SS6uwCr0sIhsNyudUjAo5q3TqI03xx4SEBkUJqZuAInp9uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.16.tgz", + "integrity": "sha512-oiDqafWzMtofeJyyGkb1CTPaxUkjIcSxePHHQCfif8t3HV9pHcw1Kgdw3/uGpDvaFfeTluwQtWiqzPVjAqS3zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.12.tgz", + "integrity": "sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.0.tgz", + "integrity": "sha512-opqpHPB1NjAmDISi3uvZOTrjEEU5CWVu/HBkDby8t93+6UxYX0Z7Ps0Ltjm5sZiEbWenjubwUkivAEYQmy9xHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.16.tgz", + "integrity": "sha512-kMrXAaKGavBEoBYUCgualbwA9jWUx2TjMA46ek+pEKy38+LFpL9QHlTd8PO2kWPUgI/KB+qi02o4y2rwXbzr3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.16.tgz", + "integrity": "sha512-g8BVNBj5Zeb5/Y3cSN+hDUL7CsIFDIuVxb9EPty3lkxBaYpjL5BNRKSYOF9yOLe+JOcKFd+TSVeADQ4iSY7rbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.6.0.tgz", + "integrity": "sha512-jAhL7tyMxB3Gfwn4HIJ0yuJ5pvcB5maYUcouGcgd/ub79f9MqZ+aVnBtuFf+VC2GTkCBF+R+eo7Vi63w5VZlzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.1.9", + "@inquirer/confirm": "^5.1.13", + "@inquirer/editor": "^4.2.14", + "@inquirer/expand": "^4.0.16", + "@inquirer/input": "^4.2.0", + "@inquirer/number": "^3.0.16", + "@inquirer/password": "^4.0.16", + "@inquirer/rawlist": "^4.1.4", + "@inquirer/search": "^3.0.16", + "@inquirer/select": "^4.2.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.4.tgz", + "integrity": "sha512-5GGvxVpXXMmfZNtvWw4IsHpR7RzqAR624xtkPd1NxxlV5M+pShMqzL4oRddRkg8rVEOK9fKdJp1jjVML2Lr7TQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/type": "^3.0.7", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.16.tgz", + "integrity": "sha512-POCmXo+j97kTGU6aeRjsPyuCpQQfKcMXdeTMw708ZMtWrj5aykZvlUxH4Qgz3+Y1L/cAVZsSpA+UgZCu2GMOMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.2.4.tgz", + "integrity": "sha512-unTppUcTjmnbl/q+h8XeQDhAqIOmwWYWNyiiP2e3orXrg6tOaa5DHXja9PChCSbChOsktyKgOieRZFnajzxoBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.14", + "@inquirer/figures": "^1.0.12", + "@inquirer/type": "^3.0.7", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.7.tgz", + "integrity": "sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -2781,6 +3129,304 @@ "dev": true, "license": "MIT" }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.15.1.tgz", + "integrity": "sha512-W/XlN9c528yYn+9MQkVjxiTPgPxoxt+oczfjHBDsJx0+59+O7B75Zhsp0B16Xbwbz8ANISDajh6+V7nIcPMc5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@napi-rs/canvas": { "version": "0.1.69", "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.69.tgz", @@ -6828,18 +7474,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz", - "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==", - "dev": true, - "dependencies": { - "colors": "1.0.3" - }, - "engines": { - "node": ">= 0.2.0" - } - }, "node_modules/cli-table3": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", @@ -6856,16 +7490,6 @@ "@colors/colors": "1.5.0" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -7014,16 +7638,6 @@ "dev": true, "license": "MIT" }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/colorspace": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", @@ -8563,142 +9177,64 @@ }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true, - "license": "MIT" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-env": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", - "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.5" - }, - "bin": { - "cross-env": "dist/bin/cross-env.js", - "cross-env-shell": "dist/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/cross-env/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-env/node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/cross-env/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/cross-env/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } + "license": "MIT" }, - "node_modules/cross-env/node_modules/shebang-command": { + "node_modules/create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/cross-env/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/cross-env/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "cross-spawn": "^7.0.1" }, "bin": { - "which": "bin/which" + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, "node_modules/cross-spawn": { @@ -10167,6 +10703,29 @@ "dev": true, "license": "MIT" }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.3.tgz", + "integrity": "sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -10344,6 +10903,22 @@ "url": "https://opencollective.com/express" } }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -10678,43 +11253,46 @@ } }, "node_modules/firebase-tools": { - "version": "13.29.1", - "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-13.29.1.tgz", - "integrity": "sha512-fFiUF9KNdVPzcQKHqtewTzQNsjm6GrvCyVyXiIDiiUFO9zIEmM6m4sI/Y9cKg8dknCTsqr0D4cNv2d6AoUaeWg==", + "version": "14.10.1", + "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-14.10.1.tgz", + "integrity": "sha512-KUwA/HyJhiOLgsHwsanQmXI5j7J12IkA+JnA+oMpmyOv/gBzJxp3LRuxHTdfv/MY17w29ppUMDqS2+jR3ViSzw==", "dev": true, "license": "MIT", "dependencies": { - "@electric-sql/pglite": "^0.2.0", + "@electric-sql/pglite": "^0.3.3", + "@electric-sql/pglite-tools": "^0.2.8", "@google-cloud/cloud-sql-connector": "^1.3.3", "@google-cloud/pubsub": "^4.5.0", + "@inquirer/prompts": "^7.4.0", + "@modelcontextprotocol/sdk": "^1.10.2", "abort-controller": "^3.0.0", - "ajv": "^6.12.6", + "ajv": "^8.17.1", + "ajv-formats": "3.0.1", "archiver": "^7.0.0", "async-lock": "1.4.1", "body-parser": "^1.19.0", "chokidar": "^3.6.0", "cjson": "^0.3.1", - "cli-table": "0.3.11", + "cli-table3": "0.6.5", "colorette": "^2.0.19", "commander": "^5.1.0", "configstore": "^5.0.1", "cors": "^2.8.5", - "cross-env": "^5.1.3", - "cross-spawn": "^7.0.3", + "cross-env": "^7.0.3", + "cross-spawn": "^7.0.5", "csv-parse": "^5.0.4", "deep-equal-in-any-order": "^2.0.6", "exegesis": "^4.2.0", "exegesis-express": "^4.0.0", "express": "^4.16.4", "filesize": "^6.1.0", - "form-data": "^4.0.0", + "form-data": "^4.0.1", "fs-extra": "^10.1.0", "fuzzy": "^0.1.3", "gaxios": "^6.7.0", "glob": "^10.4.1", "google-auth-library": "^9.11.0", - "inquirer": "^8.2.6", - "inquirer-autocomplete-prompt": "^2.0.1", + "ignore": "^7.0.4", "js-yaml": "^3.14.1", "jsonwebtoken": "^9.0.0", "leven": "^3.1.0", @@ -10731,6 +11309,8 @@ "ora": "^5.4.1", "p-limit": "^3.0.1", "pg": "^8.11.3", + "pg-gateway": "^0.3.0-beta.4", + "pglite-2": "npm:@electric-sql/pglite@0.2.17", "portfinder": "^1.0.32", "progress": "^2.0.3", "proxy-agent": "^6.3.0", @@ -10739,7 +11319,7 @@ "sql-formatter": "^15.3.0", "stream-chain": "^2.2.4", "stream-json": "^1.7.3", - "superstatic": "^9.1.0", + "superstatic": "^9.2.0", "tar": "^6.1.11", "tcp-port-used": "^1.0.2", "tmp": "^0.2.3", @@ -10750,19 +11330,56 @@ "winston": "^3.0.0", "winston-transport": "^4.4.0", "ws": "^7.5.10", - "yaml": "^2.4.1" + "yaml": "^2.4.1", + "zod": "^3.24.3", + "zod-to-json-schema": "^3.24.5" }, "bin": { "firebase": "lib/bin/firebase.js" }, "engines": { - "node": ">=18.0.0 || >=20.0.0" + "node": ">=20.0.0 || >=22.0.0" + } + }, + "node_modules/firebase-tools/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/firebase-tools/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, "node_modules/firebase-tools/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -10785,6 +11402,16 @@ "node": ">=12" } }, + "node_modules/firebase-tools/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/firebase-tools/node_modules/is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", @@ -10795,6 +11422,13 @@ "node": ">=4" } }, + "node_modules/firebase-tools/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, "node_modules/firebase-tools/node_modules/marked": { "version": "13.0.3", "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.3.tgz", @@ -12513,122 +13147,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer-autocomplete-prompt": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-2.0.1.tgz", - "integrity": "sha512-jUHrH0btO7j5r8DTQgANf2CBkTZChoVySD8zF/wp5fZCOLIuUbleXhf4ZY5jNBOc1owA3gdfWtfZuppfYBhcUg==", - "dev": true, - "license": "ISC", - "dependencies": { - "ansi-escapes": "^4.3.2", - "figures": "^3.2.0", - "picocolors": "^1.0.0", - "run-async": "^2.4.1", - "rxjs": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "inquirer": "^8.0.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer-autocomplete-prompt/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer/node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/insight": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/insight/-/insight-0.11.1.tgz", @@ -15427,13 +15945,6 @@ "multicast-dns": "cli.js" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true, - "license": "ISC" - }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -15536,13 +16047,6 @@ "node": ">= 0.4.0" } }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "license": "MIT" - }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -19822,6 +20326,13 @@ "dev": true, "license": "MIT" }, + "node_modules/pg-gateway": { + "version": "0.3.0-beta.4", + "resolved": "https://registry.npmjs.org/pg-gateway/-/pg-gateway-0.3.0-beta.4.tgz", + "integrity": "sha512-CTjsM7Z+0Nx2/dyZ6r8zRsc3f9FScoD5UAOlfUx1Fdv/JOIWvRbF7gou6l6vP+uypXQVoYPgw8xZDXgMGvBa4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/pg-int8": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", @@ -19866,6 +20377,14 @@ "node": ">=4" } }, + "node_modules/pglite-2": { + "name": "@electric-sql/pglite", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.2.17.tgz", + "integrity": "sha512-qEpKRT2oUaWDH6tjRxLHjdzMqRUGYDnGZlKrnL4dJ77JVMcP2Hpo3NYnOSPKdZdeec57B6QPprCUFg0picx5Pw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/pgpass": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", @@ -19930,6 +20449,16 @@ "node": ">=0.10.0" } }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/pkg-conf": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", @@ -21851,16 +22380,6 @@ "run-script-os": "index.js" } }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -26075,6 +26594,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zip-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", @@ -26089,6 +26621,26 @@ "engines": { "node": ">= 14" } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } } } } diff --git a/package.json b/package.json index 7f61ffcdf..154330a2f 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "copy-webpack-plugin": "13.0.0", "css-loader": "7.1.2", "exports-loader": "5.0.0", - "firebase-tools": "13.29.1", + "firebase-tools": "14.10.1", "html-webpack-plugin": "5.6.3", "imports-loader": "5.0.0", "node-polyfill-webpack-plugin": "4.1.0", From 72bdd163130be866eae55ea0fe64dae2afadcf5f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 16:07:05 -0400 Subject: [PATCH 20/36] fix(deps): update babel monorepo (minor) (#1392) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 1139 ++++++++++++++++++++++----------------------- package.json | 8 +- 2 files changed, 567 insertions(+), 580 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4df197eff..d897d9f35 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "7.26.10", + "@babel/runtime": "7.27.6", "@fortawesome/fontawesome-free": "6.7.2", "@havesource/cordova-plugin-push": "5.0.5", "@zxcvbn-ts/core": "3.0.4", @@ -64,9 +64,9 @@ "tweetnacl-util": "0.15.1" }, "devDependencies": { - "@babel/core": "7.26.10", - "@babel/plugin-transform-runtime": "7.26.10", - "@babel/preset-env": "7.26.9", + "@babel/core": "7.28.0", + "@babel/plugin-transform-runtime": "7.28.0", + "@babel/preset-env": "7.28.0", "@semantic-release/changelog": "6.0.3", "@semantic-release/exec": "7.0.3", "@semantic-release/git": "10.0.1", @@ -141,24 +141,24 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "dev": true, "license": "MIT", "engines": { @@ -166,22 +166,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -207,16 +207,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -224,27 +224,27 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", - "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -264,18 +264,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", - "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.27.0", + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", "semver": "^6.3.1" }, "engines": { @@ -296,13 +296,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", - "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, @@ -324,60 +324,70 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.10" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -387,22 +397,22 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -410,15 +420,15 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -428,15 +438,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -446,23 +456,23 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { @@ -470,9 +480,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, "license": "MIT", "engines": { @@ -480,9 +490,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -490,42 +500,42 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", + "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -535,14 +545,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -552,13 +562,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -568,13 +578,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -584,15 +594,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -602,14 +612,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", + "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -632,13 +642,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -648,13 +658,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -681,13 +691,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -697,15 +707,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -715,15 +725,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -733,13 +743,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -749,13 +759,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", - "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", + "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -765,14 +775,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -782,14 +792,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", + "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -799,18 +809,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", + "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -820,14 +830,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -837,13 +847,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -853,14 +864,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -870,13 +881,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -886,14 +897,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -903,13 +914,30 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -919,13 +947,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -935,13 +963,13 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -951,14 +979,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", - "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -968,15 +996,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -986,13 +1014,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1002,13 +1030,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1018,13 +1046,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1034,13 +1062,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1050,14 +1078,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1067,14 +1095,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1084,16 +1112,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1103,14 +1131,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1120,14 +1148,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1137,13 +1165,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1153,13 +1181,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1169,13 +1197,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1185,15 +1213,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", + "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1203,14 +1233,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1220,13 +1250,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1236,14 +1266,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1253,13 +1283,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1269,14 +1299,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1286,15 +1316,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1304,13 +1334,13 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1320,14 +1350,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", - "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz", + "integrity": "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1337,14 +1366,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1354,13 +1383,13 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1370,17 +1399,17 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", - "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.0.tgz", + "integrity": "sha512-dGopk9nZrtCs2+nfIem25UuHyt5moSJamArzIoh9/vezUQPmYDOzjaHDCkAzuGJibCIkPup8rMT2+wYB6S73cA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "engines": { @@ -1401,13 +1430,13 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1417,14 +1446,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1434,13 +1463,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1450,13 +1479,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", - "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1466,13 +1495,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", - "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1482,13 +1511,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1498,14 +1527,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1515,14 +1544,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1532,14 +1561,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1549,80 +1578,81 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz", + "integrity": "sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.26.8", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.26.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-classes": "^7.28.0", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.0", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "engines": { @@ -1658,60 +1688,57 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", - "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.28.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2984,18 +3011,14 @@ "license": "ISC" }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -3008,16 +3031,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", @@ -3037,9 +3050,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6323,14 +6336,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", - "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.4", + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { @@ -6348,27 +6361,27 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", - "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.4" + "@babel/helper-define-polyfill-provider": "^0.6.5" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -6912,9 +6925,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "dev": true, "funding": [ { @@ -6932,10 +6945,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -7153,9 +7166,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001712", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", - "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==", + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "dev": true, "funding": [ { @@ -9031,13 +9044,13 @@ } }, "node_modules/core-js-compat": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", - "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "version": "3.44.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", + "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.24.4" + "browserslist": "^4.25.1" }, "funding": { "type": "opencollective", @@ -9449,9 +9462,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -10114,9 +10127,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.133", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.133.tgz", - "integrity": "sha512-mrR+g6Y1at0GKDlPlMMwLAkI6c47q3d7U/vKS3rGTa3V4xStu18oT4UCPg5ErcAhUqk7swSjXSPUGstOYd2qBw==", + "version": "1.5.182", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.182.tgz", + "integrity": "sha512-Lv65Btwv9W4J9pyODI6EWpdnhfvrve/us5h1WspW8B2Fb0366REPtY3hX7ounk1CkV/TBjWCEvCBBbYbmV0qCA==", "dev": true, "license": "ISC" }, @@ -11989,16 +12002,6 @@ "node": ">=10" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -21874,22 +21877,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regexpu-core": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", diff --git a/package.json b/package.json index 154330a2f..cbcd37e62 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ }, "homepage": "https://github.com/opalmedapps/opal-app#readme", "dependencies": { - "@babel/runtime": "7.26.10", + "@babel/runtime": "7.27.6", "@fortawesome/fontawesome-free": "6.7.2", "@havesource/cordova-plugin-push": "5.0.5", "@zxcvbn-ts/core": "3.0.4", @@ -103,9 +103,9 @@ "tweetnacl-util": "0.15.1" }, "devDependencies": { - "@babel/core": "7.26.10", - "@babel/plugin-transform-runtime": "7.26.10", - "@babel/preset-env": "7.26.9", + "@babel/core": "7.28.0", + "@babel/plugin-transform-runtime": "7.28.0", + "@babel/preset-env": "7.28.0", "@semantic-release/changelog": "6.0.3", "@semantic-release/exec": "7.0.3", "@semantic-release/git": "10.0.1", From 02230790debdcd93a4dcadfc2c968ce9e10e7dff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 16:21:18 -0400 Subject: [PATCH 21/36] chore(deps): update dependency webpack-dev-server to v5.2.2 (#1400) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 66 +++++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 42 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index d897d9f35..284c359c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,7 +88,7 @@ "terser-webpack-plugin": "5.3.14", "webpack": "5.100.2", "webpack-cli": "6.0.1", - "webpack-dev-server": "5.2.1", + "webpack-dev-server": "5.2.2", "webpack-manifest-plugin": "5.0.1", "xml-js": "1.6.11" } @@ -25815,9 +25815,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.1.tgz", - "integrity": "sha512-ml/0HIj9NLpVKOMq+SuBPLHcmbG+TGIjXRHsYfZwocUBIqEvws8NnS/V9AFQ5FKP+tgn5adwVwRrTEpGL33QFQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dev": true, "license": "MIT", "dependencies": { @@ -25837,7 +25837,7 @@ "connect-history-api-fallback": "^2.0.0", "express": "^4.21.2", "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.7", + "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", @@ -25895,33 +25895,17 @@ "node": ">= 10" } }, - "node_modules/webpack-dev-server/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/webpack-dev-server/node_modules/open": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", - "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dev": true, "license": "MIT", "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" + "wsl-utils": "^0.1.0" }, "engines": { "node": ">=18" @@ -26423,6 +26407,38 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xcode": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", diff --git a/package.json b/package.json index cbcd37e62..cdcb42ac3 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "terser-webpack-plugin": "5.3.14", "webpack": "5.100.2", "webpack-cli": "6.0.1", - "webpack-dev-server": "5.2.1", + "webpack-dev-server": "5.2.2", "webpack-manifest-plugin": "5.0.1", "xml-js": "1.6.11" }, From 7c70d049366aede5db0210db5d9ffb11b35d6520 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 16:22:54 -0400 Subject: [PATCH 22/36] chore(deps): update node.js to v22.17.1 (#1401) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/install-dependencies/action.yml | 2 +- .gitlab-ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml index aeb098e0d..b71f67189 100644 --- a/.github/actions/install-dependencies/action.yml +++ b/.github/actions/install-dependencies/action.yml @@ -24,7 +24,7 @@ runs: - uses: actions/setup-node@v4.4.0 with: # renovate: datasource=node-version dependency=node - node-version: 22.17.0 + node-version: 22.17.1 cache: 'npm' - name: Check npm installation run: npm -v diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ed889a823..ca382f759 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,7 @@ default: # run jobs on GitLab shared runners by default # only run those jobs that need our own build machine (macOS) specifically - image: node:22.17.0-alpine3.21 + image: node:22.17.1-alpine3.21 # Cache modules in between pipelines # See: https://javascript.plainenglish.io/improving-ci-performance-aka-how-to-save-your-money-31ff691360e4 cache: From fc58702e9ea63a38a78cbca2d6e0ec81775e236e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 17:02:18 -0400 Subject: [PATCH 23/36] fix(deps): update dependency marked to v15.0.12 (#1402) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 284c359c6..ff3a718d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "firebase": "11.5.0", "jquery": "3.7.1", "jquery.panzoom": "3.2.3", - "marked": "15.0.7", + "marked": "15.0.12", "moment": "2.30.1", "onsenui": "1.3.17", "pdfjs-dist": "4.10.38", @@ -15255,9 +15255,9 @@ } }, "node_modules/marked": { - "version": "15.0.7", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.7.tgz", - "integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==", + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "license": "MIT", "bin": { "marked": "bin/marked.js" diff --git a/package.json b/package.json index cdcb42ac3..2872d3ab8 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "firebase": "11.5.0", "jquery": "3.7.1", "jquery.panzoom": "3.2.3", - "marked": "15.0.7", + "marked": "15.0.12", "moment": "2.30.1", "onsenui": "1.3.17", "pdfjs-dist": "4.10.38", From 34902b12d315963f14ceb11085a0cc2157433e38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Jul 2025 15:55:56 -0400 Subject: [PATCH 24/36] fix(deps): update dependency cordova-android to v14 (#1403) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Stacey Beard --- env/config.xml | 2 +- package-lock.json | 62 ++++++++++++++++++++++++++++++++++++++--------- package.json | 2 +- 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/env/config.xml b/env/config.xml index 311ca578c..6ed55eb8d 100644 --- a/env/config.xml +++ b/env/config.xml @@ -55,7 +55,7 @@ SPDX-License-Identifier: Apache-2.0 - + diff --git a/package-lock.json b/package-lock.json index ff3a718d3..928c3e1bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "animate.css": "4.1.1", "bootstrap": "3.4.1", "cordova": "12.0.0", - "cordova-android": "13.0.0", + "cordova-android": "14.0.1", "cordova-ios": "7.1.1", "cordova-plugin-android-permissions": "1.1.5", "cordova-plugin-androidx-adapter": "1.1.3", @@ -8150,27 +8150,35 @@ } }, "node_modules/cordova-android": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-13.0.0.tgz", - "integrity": "sha512-uQG+cSyrB1NMi2aIzihldIupHB9WGpZVvrMMMAAtnyc6tDlEk7gweSSaFsEONyGAnteRYpIvrzg/YwDW08PcUg==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-14.0.1.tgz", + "integrity": "sha512-HMBMdGu/JlSQtmBuDEpKWf/pE75SpF3FksxZ+mqYuL3qSIN8lN/QsNurwYaPAP7zWXN2DNpvwlpOJItS5VhdLg==", "license": "Apache-2.0", "dependencies": { - "android-versions": "^2.0.0", - "cordova-common": "^5.0.0", + "android-versions": "^2.1.0", + "cordova-common": "^5.0.1", "dedent": "^1.5.3", "execa": "^5.1.1", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", + "fast-glob": "^3.3.3", "is-path-inside": "^3.0.3", - "nopt": "^7.2.1", + "nopt": "^8.1.0", "properties-parser": "^0.6.0", - "semver": "^7.6.2", + "semver": "^7.7.1", "string-argv": "^0.3.1", "untildify": "^4.0.0", - "which": "^4.0.0" + "which": "^5.0.0" }, "engines": { - "node": ">=16.13.0" + "node": ">=20.5.0" + } + }, + "node_modules/cordova-android/node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/cordova-android/node_modules/execa": { @@ -8229,6 +8237,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cordova-android/node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/cordova-android/node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -8256,6 +8279,21 @@ "node": ">=6" } }, + "node_modules/cordova-android/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/cordova-app-hello-world": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cordova-app-hello-world/-/cordova-app-hello-world-6.0.0.tgz", diff --git a/package.json b/package.json index 2872d3ab8..d257299d6 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "animate.css": "4.1.1", "bootstrap": "3.4.1", "cordova": "12.0.0", - "cordova-android": "13.0.0", + "cordova-android": "14.0.1", "cordova-ios": "7.1.1", "cordova-plugin-android-permissions": "1.1.5", "cordova-plugin-androidx-adapter": "1.1.3", From d337828393f4b7daf3ee548f4317d34e7c7bafaa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Jul 2025 14:13:18 -0400 Subject: [PATCH 25/36] chore(deps): update dependency semantic-release to v24.2.7 (#1397) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 441 ++++++++++++++++++---------------------------- package.json | 2 +- 2 files changed, 176 insertions(+), 267 deletions(-) diff --git a/package-lock.json b/package-lock.json index 928c3e1bd..6b1166e61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -81,7 +81,7 @@ "node-polyfill-webpack-plugin": "4.1.0", "raw-loader": "4.0.2", "run-script-os": "1.1.6", - "semantic-release": "24.2.3", + "semantic-release": "24.2.7", "semver": "7.7.1", "shelljs": "0.10.0", "style-loader": "4.0.0", @@ -4756,9 +4756,9 @@ } }, "node_modules/@semantic-release/npm": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-12.0.1.tgz", - "integrity": "sha512-/6nntGSUGK2aTOI0rHPwY3ZjgY9FkXmEHbW9Kr+62NVOsyqpKKeP0lrCH+tphv+EsNdJNmqqwijTEnVWUMQ2Nw==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-12.0.2.tgz", + "integrity": "sha512-+M9/Lb35IgnlUO6OSJ40Ie+hUsZLuph2fqXC/qrKn0fMvUU/jiCjpoL6zEm69vzcmaZJ8yNKtMBEKHWN49WBbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4769,7 +4769,7 @@ "lodash-es": "^4.17.21", "nerf-dart": "^1.0.0", "normalize-url": "^8.0.0", - "npm": "^10.5.0", + "npm": "^10.9.3", "rc": "^1.2.8", "read-pkg": "^9.0.0", "registry-auth-token": "^5.0.0", @@ -16487,9 +16487,9 @@ } }, "node_modules/npm": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.2.tgz", - "integrity": "sha512-iriPEPIkoMYUy3F6f3wwSZAU93E0Eg6cHwIR6jzzOXWSy+SD/rOODEs74cVONHKSx2obXtuUoyidVEhISrisgQ==", + "version": "10.9.3", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.3.tgz", + "integrity": "sha512-6Eh1u5Q+kIVXeA8e7l2c/HpnFFcwrkt37xDMujD5be1gloWa9p6j3Fsv3mByXXmqJHy+2cElRMML8opNT7xIJQ==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -16571,37 +16571,37 @@ ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/config": "^9.0.0", "@npmcli/fs": "^4.0.0", "@npmcli/map-workspaces": "^4.0.2", - "@npmcli/package-json": "^6.1.0", + "@npmcli/package-json": "^6.2.0", "@npmcli/promise-spawn": "^8.0.2", - "@npmcli/redact": "^3.0.0", - "@npmcli/run-script": "^9.0.1", - "@sigstore/tuf": "^3.0.0", - "abbrev": "^3.0.0", + "@npmcli/redact": "^3.2.2", + "@npmcli/run-script": "^9.1.0", + "@sigstore/tuf": "^3.1.1", + "abbrev": "^3.0.1", "archy": "~1.0.0", "cacache": "^19.0.1", - "chalk": "^5.3.0", - "ci-info": "^4.1.0", + "chalk": "^5.4.1", + "ci-info": "^4.2.0", "cli-columns": "^4.0.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", "glob": "^10.4.5", "graceful-fs": "^4.2.11", - "hosted-git-info": "^8.0.2", + "hosted-git-info": "^8.1.0", "ini": "^5.0.0", "init-package-json": "^7.0.2", - "is-cidr": "^5.1.0", + "is-cidr": "^5.1.1", "json-parse-even-better-errors": "^4.0.0", "libnpmaccess": "^9.0.0", - "libnpmdiff": "^7.0.0", - "libnpmexec": "^9.0.0", - "libnpmfund": "^6.0.0", + "libnpmdiff": "^7.0.1", + "libnpmexec": "^9.0.1", + "libnpmfund": "^6.0.1", "libnpmhook": "^11.0.0", "libnpmorg": "^7.0.0", - "libnpmpack": "^8.0.0", + "libnpmpack": "^8.0.1", "libnpmpublish": "^10.0.1", "libnpmsearch": "^8.0.0", "libnpmteam": "^7.0.0", @@ -16611,23 +16611,23 @@ "minipass": "^7.1.1", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^11.0.0", - "nopt": "^8.0.0", + "node-gyp": "^11.2.0", + "nopt": "^8.1.0", "normalize-package-data": "^7.0.0", "npm-audit-report": "^6.0.0", "npm-install-checks": "^7.1.1", - "npm-package-arg": "^12.0.0", + "npm-package-arg": "^12.0.2", "npm-pick-manifest": "^10.0.0", "npm-profile": "^11.0.1", "npm-registry-fetch": "^18.0.2", "npm-user-validate": "^3.0.0", - "p-map": "^4.0.0", + "p-map": "^7.0.3", "pacote": "^19.0.1", "parse-conflict-json": "^4.0.0", "proc-log": "^5.0.0", "qrcode-terminal": "^0.12.0", - "read": "^4.0.0", - "semver": "^7.6.3", + "read": "^4.1.0", + "semver": "^7.7.2", "spdx-expression-parse": "^4.0.0", "ssri": "^12.0.0", "supports-color": "^9.4.0", @@ -16635,7 +16635,7 @@ "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", - "validate-npm-package-name": "^6.0.0", + "validate-npm-package-name": "^6.0.1", "which": "^5.0.0", "write-file-atomic": "^6.0.0" }, @@ -16967,7 +16967,7 @@ } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "8.0.0", + "version": "8.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -17047,7 +17047,7 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "6.0.1", + "version": "6.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -17057,7 +17057,6 @@ "lru-cache": "^10.0.1", "npm-pick-manifest": "^10.0.0", "proc-log": "^5.0.0", - "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^5.0.0" @@ -17163,7 +17162,7 @@ } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "6.1.0", + "version": "6.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -17172,9 +17171,9 @@ "glob": "^10.2.2", "hosted-git-info": "^8.0.0", "json-parse-even-better-errors": "^4.0.0", - "normalize-package-data": "^7.0.0", "proc-log": "^5.0.0", - "semver": "^7.5.3" + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -17193,19 +17192,19 @@ } }, "node_modules/npm/node_modules/@npmcli/query": { - "version": "4.0.0", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/redact": { - "version": "3.0.0", + "version": "3.2.2", "dev": true, "inBundle": true, "license": "ISC", @@ -17214,7 +17213,7 @@ } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "9.0.2", + "version": "9.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -17241,21 +17240,21 @@ } }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", + "version": "0.4.3", "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "3.0.0", + "version": "3.1.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/protobuf-specs": "^0.4.1", "tuf-js": "^3.0.1" }, "engines": { @@ -17272,7 +17271,7 @@ } }, "node_modules/npm/node_modules/abbrev": { - "version": "3.0.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -17281,30 +17280,14 @@ } }, "node_modules/npm/node_modules/agent-base": { - "version": "7.1.1", + "version": "7.1.3", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", "dev": true, @@ -17373,7 +17356,7 @@ } }, "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", + "version": "2.0.2", "dev": true, "inBundle": true, "license": "MIT", @@ -17413,19 +17396,6 @@ "node": ">=18" } }, - "node_modules/npm/node_modules/cacache/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/cacache/node_modules/mkdirp": { "version": "3.0.1", "dev": true, @@ -17441,18 +17411,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/cacache/node_modules/p-map": { - "version": "7.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm/node_modules/cacache/node_modules/tar": { "version": "7.4.3", "dev": true, @@ -17480,7 +17438,7 @@ } }, "node_modules/npm/node_modules/chalk": { - "version": "5.3.0", + "version": "5.4.1", "dev": true, "inBundle": true, "license": "MIT", @@ -17501,7 +17459,7 @@ } }, "node_modules/npm/node_modules/ci-info": { - "version": "4.1.0", + "version": "4.2.0", "dev": true, "funding": [ { @@ -17516,7 +17474,7 @@ } }, "node_modules/npm/node_modules/cidr-regex": { - "version": "4.1.1", + "version": "4.1.3", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -17527,15 +17485,6 @@ "node": ">=14" } }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", "dev": true, @@ -17624,7 +17573,7 @@ } }, "node_modules/npm/node_modules/debug": { - "version": "4.3.7", + "version": "4.4.1", "dev": true, "inBundle": true, "license": "MIT", @@ -17687,7 +17636,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.1", + "version": "3.1.2", "dev": true, "inBundle": true, "license": "Apache-2.0" @@ -17702,12 +17651,12 @@ } }, "node_modules/npm/node_modules/foreground-child": { - "version": "3.3.0", + "version": "3.3.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -17756,7 +17705,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "8.0.2", + "version": "8.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -17768,7 +17717,7 @@ } }, "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", + "version": "4.2.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause" @@ -17787,12 +17736,12 @@ } }, "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.5", + "version": "7.0.6", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -17833,15 +17782,6 @@ "node": ">=0.8.19" } }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/ini": { "version": "5.0.0", "dev": true, @@ -17895,7 +17835,7 @@ } }, "node_modules/npm/node_modules/is-cidr": { - "version": "5.1.0", + "version": "5.1.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -17995,12 +17935,12 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "7.0.0", + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/installed-package-contents": "^3.0.0", "binary-extensions": "^2.3.0", "diff": "^5.1.0", @@ -18014,12 +17954,12 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "9.0.0", + "version": "9.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/run-script": "^9.0.1", "ci-info": "^4.0.0", "npm-package-arg": "^12.0.0", @@ -18035,12 +17975,12 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "6.0.0", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0" + "@npmcli/arborist": "^8.0.1" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -18073,12 +18013,12 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "8.0.0", + "version": "8.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/run-script": "^9.0.1", "npm-package-arg": "^12.0.0", "pacote": "^19.0.0" @@ -18221,7 +18161,7 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "4.0.0", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -18237,19 +18177,6 @@ "encoding": "^0.1.13" } }, - "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", "dev": true, @@ -18323,28 +18250,15 @@ } }, "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", + "version": "3.0.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">= 18" } }, "node_modules/npm/node_modules/mkdirp": { @@ -18375,20 +18289,20 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "11.0.0", + "version": "11.2.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", "make-fetch-happen": "^14.0.3", "nopt": "^8.0.0", "proc-log": "^5.0.0", "semver": "^7.3.5", "tar": "^7.4.3", + "tinyglobby": "^0.2.12", "which": "^5.0.0" }, "bin": { @@ -18407,19 +18321,6 @@ "node": ">=18" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": { "version": "3.0.1", "dev": true, @@ -18462,12 +18363,12 @@ } }, "node_modules/npm/node_modules/nopt": { - "version": "8.0.0", + "version": "8.1.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" @@ -18476,15 +18377,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/nopt/node_modules/abbrev": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/normalize-package-data": { "version": "7.0.0", "dev": true, @@ -18542,7 +18434,7 @@ } }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "12.0.0", + "version": "12.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -18615,19 +18507,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/npm-user-validate": { "version": "3.0.0", "dev": true, @@ -18638,15 +18517,12 @@ } }, "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", + "version": "7.0.3", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -18729,7 +18605,7 @@ } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.1.2", + "version": "7.1.0", "dev": true, "inBundle": true, "license": "MIT", @@ -18777,12 +18653,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", "dev": true, @@ -18817,7 +18687,7 @@ } }, "node_modules/npm/node_modules/read": { - "version": "4.0.0", + "version": "4.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -18859,21 +18729,6 @@ "node": ">= 4" } }, - "node_modules/npm/node_modules/rimraf": { - "version": "5.0.10", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", "dev": true, @@ -18882,7 +18737,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.6.3", + "version": "7.7.2", "dev": true, "inBundle": true, "license": "ISC", @@ -18927,29 +18782,29 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.0.0", + "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^3.0.0", - "@sigstore/tuf": "^3.0.0", - "@sigstore/verify": "^2.0.0" + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/protobuf-specs": "^0.4.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -18965,15 +18820,15 @@ } }, "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.0.0", + "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^14.0.1", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", "proc-log": "^5.0.0", "promise-retry": "^2.0.1" }, @@ -18982,14 +18837,14 @@ } }, "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify": { - "version": "2.0.0", + "version": "2.1.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.0.0", + "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/protobuf-specs": "^0.4.1" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -19006,7 +18861,7 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.8.3", + "version": "2.8.5", "dev": true, "inBundle": true, "license": "MIT", @@ -19020,12 +18875,12 @@ } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.4", + "version": "8.0.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -19070,7 +18925,7 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.20", + "version": "3.0.21", "dev": true, "inBundle": true, "license": "CC0-1.0" @@ -19209,6 +19064,31 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", "dev": true, @@ -19221,6 +19101,48 @@ "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.14", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "dev": true, + "inBundle": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", "dev": true, @@ -19308,7 +19230,7 @@ } }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "6.0.0", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -22544,16 +22466,16 @@ } }, "node_modules/semantic-release": { - "version": "24.2.3", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.3.tgz", - "integrity": "sha512-KRhQG9cUazPavJiJEFIJ3XAMjgfd0fcK3B+T26qOl8L0UG5aZUjeRfREO0KM5InGtYwxqiiytkJrbcYoLDEv0A==", + "version": "24.2.7", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.7.tgz", + "integrity": "sha512-g7RssbTAbir1k/S7uSwSVZFfFXwpomUB9Oas0+xi9KStSCmeDXcA7rNhiskjLqvUe/Evhx8fVCT16OSa34eM5g==", "dev": true, "license": "MIT", "dependencies": { "@semantic-release/commit-analyzer": "^13.0.0-beta.1", "@semantic-release/error": "^4.0.0", "@semantic-release/github": "^11.0.0", - "@semantic-release/npm": "^12.0.0", + "@semantic-release/npm": "^12.0.2", "@semantic-release/release-notes-generator": "^14.0.0-beta.1", "aggregate-error": "^5.0.0", "cosmiconfig": "^9.0.0", @@ -22568,8 +22490,8 @@ "hosted-git-info": "^8.0.0", "import-from-esm": "^2.0.0", "lodash-es": "^4.17.21", - "marked": "^12.0.0", - "marked-terminal": "^7.0.0", + "marked": "^15.0.0", + "marked-terminal": "^7.3.0", "micromatch": "^4.0.2", "p-each-series": "^3.0.0", "p-reduce": "^3.0.0", @@ -22644,9 +22566,9 @@ } }, "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz", - "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", "dev": true, "license": "ISC", "dependencies": { @@ -22676,19 +22598,6 @@ "dev": true, "license": "ISC" }, - "node_modules/semantic-release/node_modules/marked": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.2.tgz", - "integrity": "sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==", - "dev": true, - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/semantic-release/node_modules/p-reduce": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", diff --git a/package.json b/package.json index d257299d6..5996f3b2d 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "node-polyfill-webpack-plugin": "4.1.0", "raw-loader": "4.0.2", "run-script-os": "1.1.6", - "semantic-release": "24.2.3", + "semantic-release": "24.2.7", "semver": "7.7.1", "shelljs": "0.10.0", "style-loader": "4.0.0", From 0304b1d0f6370ed750d2489a4ad14c45e512bb11 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Jul 2025 14:47:02 -0400 Subject: [PATCH 26/36] chore(deps): update dependency @semantic-release/exec to v7.1.0 (#1398) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b1166e61..ac24eba50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,7 +68,7 @@ "@babel/plugin-transform-runtime": "7.28.0", "@babel/preset-env": "7.28.0", "@semantic-release/changelog": "6.0.3", - "@semantic-release/exec": "7.0.3", + "@semantic-release/exec": "7.1.0", "@semantic-release/git": "10.0.1", "babel-loader": "10.0.0", "clean-webpack-plugin": "4.0.0", @@ -4425,9 +4425,9 @@ } }, "node_modules/@semantic-release/exec": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/exec/-/exec-7.0.3.tgz", - "integrity": "sha512-uNWwPNtWi3WTcTm3fWfFQEuj8otOvwoS5m9yo2jSVHuvqdZNsOWmuL0/FqcVyZnCI32fxyYV0G7PPb/TzCH6jw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@semantic-release/exec/-/exec-7.1.0.tgz", + "integrity": "sha512-4ycZ2atgEUutspPZ2hxO6z8JoQt4+y/kkHvfZ1cZxgl9WKJId1xPj+UadwInj+gMn2Gsv+fLnbrZ4s+6tK2TFQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 5996f3b2d..0a1f542e2 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,7 @@ "@babel/plugin-transform-runtime": "7.28.0", "@babel/preset-env": "7.28.0", "@semantic-release/changelog": "6.0.3", - "@semantic-release/exec": "7.0.3", + "@semantic-release/exec": "7.1.0", "@semantic-release/git": "10.0.1", "babel-loader": "10.0.0", "clean-webpack-plugin": "4.0.0", From db45ffb15ae452481997c5256a862bbb0ec5cc1f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Jul 2025 14:48:59 -0400 Subject: [PATCH 27/36] chore(deps): update dependency semver to v7.7.2 (#1399) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index ac24eba50..7e0fe3969 100644 --- a/package-lock.json +++ b/package-lock.json @@ -82,7 +82,7 @@ "raw-loader": "4.0.2", "run-script-os": "1.1.6", "semantic-release": "24.2.7", - "semver": "7.7.1", + "semver": "7.7.2", "shelljs": "0.10.0", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", @@ -22622,9 +22622,9 @@ } }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" diff --git a/package.json b/package.json index 0a1f542e2..8481b598a 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "raw-loader": "4.0.2", "run-script-os": "1.1.6", "semantic-release": "24.2.7", - "semver": "7.7.1", + "semver": "7.7.2", "shelljs": "0.10.0", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", From 403dd8a40e7a17959f8d70bc15e2e03a7d57da4a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Jul 2025 14:51:27 -0400 Subject: [PATCH 28/36] chore(deps): update node.js to v22.17.1-alpine3.22 (#1405) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ca382f759..0510dadd4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,7 @@ default: # run jobs on GitLab shared runners by default # only run those jobs that need our own build machine (macOS) specifically - image: node:22.17.1-alpine3.21 + image: node:22.17.1-alpine3.22 # Cache modules in between pipelines # See: https://javascript.plainenglish.io/improving-ci-performance-aka-how-to-save-your-money-31ff691360e4 cache: From 1ae73a0b9a2737cf0ce367e28c9b242f61472ff4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Jul 2025 15:03:01 -0400 Subject: [PATCH 29/36] fix(deps): update plotly packages to v3.0.2 (patch) (#1406) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 16 ++++++++-------- package.json | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7e0fe3969..5a6ce89cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,8 +57,8 @@ "moment": "2.30.1", "onsenui": "1.3.17", "pdfjs-dist": "4.10.38", - "plotly.js-basic-dist-min": "3.0.1", - "plotly.js-locales": "3.0.1", + "plotly.js-basic-dist-min": "3.0.2", + "plotly.js-locales": "3.0.2", "python-struct": "1.1.3", "tweetnacl": "1.0.3", "tweetnacl-util": "0.15.1" @@ -20610,15 +20610,15 @@ } }, "node_modules/plotly.js-basic-dist-min": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/plotly.js-basic-dist-min/-/plotly.js-basic-dist-min-3.0.1.tgz", - "integrity": "sha512-2DNfjn0Xv+IAk6ksaIm8AHSlKCxWQOx9f3v5JGvzFKPwEbJRsLIy4Up0cOPqO53kL4jrdw8LnUTrM9FAzvKMsQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/plotly.js-basic-dist-min/-/plotly.js-basic-dist-min-3.0.2.tgz", + "integrity": "sha512-eoZp/gmJ+o+dKENhQ2NGlipnnji72SAlWzy4knZHXpEj7ctTP/BJ1R1/9hPwsLeovmf5hfe2yRWck8gB902Bwg==", "license": "MIT" }, "node_modules/plotly.js-locales": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/plotly.js-locales/-/plotly.js-locales-3.0.1.tgz", - "integrity": "sha512-49OfOhnOFpWAXey+HoKunJsfb79ozaFQqG+eqfQtqY4z0/NxPG/1a3I0qf0k3DDE5t11EpBKi2TTa00eIiWYVA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/plotly.js-locales/-/plotly.js-locales-3.0.2.tgz", + "integrity": "sha512-6IbkNI+qovvChyYWUCeHuBeYjl6SD0wegmucqIN/nJOtAmzgdUQnUpyi/CxBzGP4sHjJz36DqlQByyTswsUcEg==", "license": "MIT" }, "node_modules/portfinder": { diff --git a/package.json b/package.json index 8481b598a..011ae4dd0 100644 --- a/package.json +++ b/package.json @@ -96,8 +96,8 @@ "moment": "2.30.1", "onsenui": "1.3.17", "pdfjs-dist": "4.10.38", - "plotly.js-basic-dist-min": "3.0.1", - "plotly.js-locales": "3.0.1", + "plotly.js-basic-dist-min": "3.0.2", + "plotly.js-locales": "3.0.2", "python-struct": "1.1.3", "tweetnacl": "1.0.3", "tweetnacl-util": "0.15.1" From eb65a9ad8e56caa328bf25f7f3297295e9d72210 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Jul 2025 15:04:29 -0400 Subject: [PATCH 30/36] chore(deps): update dependency firebase-tools to v14.11.1 (#1407) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a6ce89cb..e3d82144a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -75,7 +75,7 @@ "copy-webpack-plugin": "13.0.0", "css-loader": "7.1.2", "exports-loader": "5.0.0", - "firebase-tools": "14.10.1", + "firebase-tools": "14.11.1", "html-webpack-plugin": "5.6.3", "imports-loader": "5.0.0", "node-polyfill-webpack-plugin": "4.1.0", @@ -11304,9 +11304,9 @@ } }, "node_modules/firebase-tools": { - "version": "14.10.1", - "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-14.10.1.tgz", - "integrity": "sha512-KUwA/HyJhiOLgsHwsanQmXI5j7J12IkA+JnA+oMpmyOv/gBzJxp3LRuxHTdfv/MY17w29ppUMDqS2+jR3ViSzw==", + "version": "14.11.1", + "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-14.11.1.tgz", + "integrity": "sha512-TABPdXQTGJC16Q6QizOMnNbaI31SIJHQUKQs2XH1FjCYLoC3ur88OdOFYgCy2vdGOFmDqBEmFYRzOr0sxlngEA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 011ae4dd0..0bf528841 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "copy-webpack-plugin": "13.0.0", "css-loader": "7.1.2", "exports-loader": "5.0.0", - "firebase-tools": "14.10.1", + "firebase-tools": "14.11.1", "html-webpack-plugin": "5.6.3", "imports-loader": "5.0.0", "node-polyfill-webpack-plugin": "4.1.0", From d2ec52e6b6ecfa5d7119eb36078cab2fca411a2e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Jul 2025 17:20:58 -0400 Subject: [PATCH 31/36] fix(deps): update dependency @havesource/cordova-plugin-push to v6 (#1408) Removed `android:exported="false"` statements which have now been added by the plugin. Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Stacey Beard --- env/config.xml | 6 ------ package-lock.json | 13 +++++++++---- package.json | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/env/config.xml b/env/config.xml index 6ed55eb8d..a88c51fa2 100644 --- a/env/config.xml +++ b/env/config.xml @@ -83,12 +83,6 @@ SPDX-License-Identifier: Apache-2.0 - - - - - - diff --git a/package-lock.json b/package-lock.json index e3d82144a..45e639c95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@babel/runtime": "7.27.6", "@fortawesome/fontawesome-free": "6.7.2", - "@havesource/cordova-plugin-push": "5.0.5", + "@havesource/cordova-plugin-push": "6.0.1", "@zxcvbn-ts/core": "3.0.4", "@zxcvbn-ts/language-common": "3.0.4", "@zxcvbn-ts/language-en": "3.0.2", @@ -2548,9 +2548,9 @@ } }, "node_modules/@havesource/cordova-plugin-push": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@havesource/cordova-plugin-push/-/cordova-plugin-push-5.0.5.tgz", - "integrity": "sha512-eD7EyjSTl1vi1gcMswD3Q7o5UV1l+JoS+RaQ9LxlBXC3u+tOEgVFvvrnb9klWvuLrRVu/JjuG0sg4oK8irVLuA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@havesource/cordova-plugin-push/-/cordova-plugin-push-6.0.1.tgz", + "integrity": "sha512-GsYnjkDSLUQM9gkcv68ofslT9Mss3SvO+/x2PjRjiLWuHM3xhisrvipKQBIJ2CWCGYlI0W0CfxwMuyMyaR8/dA==", "license": "MIT", "engines": { "cordovaDependencies": { @@ -2578,6 +2578,11 @@ "cordova": ">=10.0.0", "cordova-android": ">=12.0.0", "cordova-ios": ">=6.0.0" + }, + "6.0.0": { + "cordova": ">=10.0.0", + "cordova-android": ">=12.0.0", + "cordova-ios": ">=6.0.0" } } } diff --git a/package.json b/package.json index 0bf528841..9e2c63a66 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "dependencies": { "@babel/runtime": "7.27.6", "@fortawesome/fontawesome-free": "6.7.2", - "@havesource/cordova-plugin-push": "5.0.5", + "@havesource/cordova-plugin-push": "6.0.1", "@zxcvbn-ts/core": "3.0.4", "@zxcvbn-ts/language-common": "3.0.4", "@zxcvbn-ts/language-en": "3.0.2", From fd8e5592984d6dcdecd87d63a3119693d704cfba Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 24 Jul 2025 13:00:53 -0400 Subject: [PATCH 32/36] fix(deps): update dependency firebase to v12 (#1409) Also ran `npm audit fix`. Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Stacey Beard --- package-lock.json | 1672 +++++++++++++++++++++++++++++++++++---------- package.json | 2 +- 2 files changed, 1303 insertions(+), 371 deletions(-) diff --git a/package-lock.json b/package-lock.json index 45e639c95..a39a44f45 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,7 +50,7 @@ "cordova-plugin-x-socialsharing": "6.0.4", "crypto-js": "4.2.0", "es6-promise-plugin": "4.2.2", - "firebase": "11.5.0", + "firebase": "12.0.0", "jquery": "3.7.1", "jquery.panzoom": "3.2.3", "marked": "15.0.12", @@ -1794,16 +1794,74 @@ "@electric-sql/pglite": "0.3.5" } }, + "node_modules/@firebase/ai": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@firebase/ai/-/ai-2.0.0.tgz", + "integrity": "sha512-N/aSHjqOpU+KkYU3piMkbcuxzvqsOvxflLUXBAkYAPAz8wjE2Ye3BQDgKHEYuhMmEWqj6LFgEBUN8wwc6dfMTw==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x", + "@firebase/app-types": "0.x" + } + }, + "node_modules/@firebase/ai/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/ai/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/ai/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/analytics": { - "version": "0.10.12", - "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.12.tgz", - "integrity": "sha512-iDCGnw6qdFqwI5ywkgece99WADJNoymu+nLIQI4fZM/vCZ3bEo4wlpEetW71s1HqGpI0hQStiPhqVjFxDb2yyw==", + "version": "0.10.18", + "resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.18.tgz", + "integrity": "sha512-iN7IgLvM06iFk8BeFoWqvVpRFW3Z70f+Qe2PfCJ7vPIgLPjHXDE774DhCT5Y2/ZU/ZbXPDPD60x/XPWEoZLNdg==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/installations": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { @@ -1811,81 +1869,183 @@ } }, "node_modules/@firebase/analytics-compat": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.18.tgz", - "integrity": "sha512-Hw9mzsSMZaQu6wrTbi3kYYwGw9nBqOHr47pVLxfr5v8CalsdrG5gfs9XUlPOZjHRVISp3oQrh1j7d3E+ulHPjQ==", + "version": "0.2.24", + "resolved": "https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.24.tgz", + "integrity": "sha512-jE+kJnPG86XSqGQGhXXYt1tpTbCTED8OQJ/PQ90SEw14CuxRxx/H+lFbWA1rlFtFSsTCptAJtgyRBwr/f00vsw==", "license": "Apache-2.0", "dependencies": { - "@firebase/analytics": "0.10.12", + "@firebase/analytics": "0.10.18", "@firebase/analytics-types": "0.8.3", - "@firebase/component": "0.6.13", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/analytics-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/analytics-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/analytics-types": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3.tgz", "integrity": "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==", "license": "Apache-2.0" }, + "node_modules/@firebase/analytics/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/analytics/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/analytics/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/app": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.11.3.tgz", - "integrity": "sha512-QlTZl/RcqPSonYxB87n8KgAUW2L6ZZz0W4D91PVmQ1tJPsKsKPrWAFHL0ii2cQW6FxTxfNjbZ7kucuIcKXk3tw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.14.0.tgz", + "integrity": "sha512-APIAeKvRNFWKJLjIL8wLDjh7u8g6ZjaeVmItyqSjCdEkJj14UuVlus74D8ofsOMWh45HEwxwkd96GYbi+CImEg==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "idb": "7.1.1", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@firebase/app-check": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.8.13.tgz", - "integrity": "sha512-ONsgml8/dplUOAP42JQO6hhiWDEwR9+RUTLenxAN9S8N6gel/sDQ9Ci721Py1oASMGdDU8v9R7xAZxzvOX5lPg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.11.0.tgz", + "integrity": "sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "node_modules/@firebase/app-check-compat": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.3.20.tgz", - "integrity": "sha512-/twgmlnNAaZ/wbz3kcQrL/26b+X+zUX+lBmu5LwwEcWcpnb+mrVEAKhD7/ttm52dxYiSWtLDeuXy3FXBhqBC5A==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.4.0.tgz", + "integrity": "sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g==", "license": "Apache-2.0", "dependencies": { - "@firebase/app-check": "0.8.13", + "@firebase/app-check": "0.11.0", "@firebase/app-check-types": "0.5.3", - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/app-check-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-check-compat/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-check-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/app-check-interop-types": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz", @@ -1898,20 +2058,96 @@ "integrity": "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==", "license": "Apache-2.0" }, + "node_modules/@firebase/app-check/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-check/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-check/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/app-compat": { - "version": "0.2.52", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.52.tgz", - "integrity": "sha512-0p/l1KiwhwwYTcPWoleFQHftOnYzeXvyVf3WNZyKFBAoQMpCVW6bVm/uO1bXF91AwU1JN0og888Y6Sc8avqZ+A==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.0.tgz", + "integrity": "sha512-nUnNpOeRj0KZzVzHsyuyrmZKKHfykZ8mn40FtG28DeSTWeM5b/2P242Va4bmQpJsy5y32vfv50+jvdckrpzy7Q==", "license": "Apache-2.0", "dependencies": { - "@firebase/app": "0.11.3", - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/app": "0.14.0", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-compat/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" } }, "node_modules/@firebase/app-types": { @@ -1920,19 +2156,57 @@ "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==", "license": "Apache-2.0" }, + "node_modules/@firebase/app/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/app/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/auth": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.9.1.tgz", - "integrity": "sha512-9KKo5SNVkyJzftsW+daS+PGDbeJ+MFJWXQFHDqqPPH3acWHtiNnGHH5HGpIJErEELrsm9xMPie5zfZ0XpGU8+w==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.11.0.tgz", + "integrity": "sha512-5j7+ua93X+IRcJ1oMDTClTo85l7Xe40WSkoJ+shzPrX7OISlVWLdE1mKC57PSD+/LfAbdhJmvKixINBw2ESK6w==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@firebase/app": "0.x", @@ -1945,24 +2219,50 @@ } }, "node_modules/@firebase/auth-compat": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.19.tgz", - "integrity": "sha512-v898POphOIBJliKF76SiGOXh4EdhO5fM6S9a2ZKf/8wHdBea/qwxwZoVVya4DW6Mi7vWyp1lIzHbFgwRz8G9TA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.6.0.tgz", + "integrity": "sha512-J0lGSxXlG/lYVi45wbpPhcWiWUMXevY4fvLZsN1GHh+po7TZVng+figdHBVhFheaiipU8HZyc7ljw1jNojM2nw==", "license": "Apache-2.0", "dependencies": { - "@firebase/auth": "1.9.1", + "@firebase/auth": "1.11.0", "@firebase/auth-types": "0.13.0", - "@firebase/component": "0.6.13", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/auth-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/auth-interop-types": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz", @@ -1979,120 +2279,298 @@ "@firebase/util": "1.x" } }, - "node_modules/@firebase/component": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.13.tgz", - "integrity": "sha512-I/Eg1NpAtZ8AAfq8mpdfXnuUpcLxIDdCDtTzWSh+FXnp/9eCKJ3SNbOCKrUCyhLzNa2SiPJYruei0sxVjaOTeg==", + "node_modules/@firebase/auth/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/auth/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/auth/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" } }, "node_modules/@firebase/data-connect": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.2.tgz", - "integrity": "sha512-PYG55JRTmvYrUuXXmYBsZexwKVP9aR3mIRRHxB9V2bQeRDZky6JtRZnH3GLhf4ZsxZy5Ewd8ul/jTOYR4gpD9w==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.11.tgz", + "integrity": "sha512-G258eLzAD6im9Bsw+Qm1Z+P4x0PGNQ45yeUuuqe5M9B1rn0RJvvsQCRHXgE52Z+n9+WX1OJd/crcuunvOGc7Vw==", "license": "Apache-2.0", "dependencies": { "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, - "node_modules/@firebase/database": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.14.tgz", - "integrity": "sha512-9nxYtkHAG02/Nh2Ssms1T4BbWPPjiwohCvkHDUl4hNxnki1kPgsLo5xe9kXNzbacOStmVys+RUXvwzynQSKmUQ==", + "node_modules/@firebase/data-connect/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", - "faye-websocket": "0.11.4", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@firebase/database-compat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.5.tgz", - "integrity": "sha512-CNf1UbvWh6qIaSf4sn6sx2DTDz/em/D7QxULH1LTxxDQHr9+CeYGvlAqrKnk4ZH0P0eIHyQFQU7RwkUJI0B9gQ==", + "node_modules/@firebase/data-connect/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/database": "1.0.14", - "@firebase/database-types": "1.0.10", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@firebase/database-types": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.10.tgz", - "integrity": "sha512-mH6RC1E9/Pv8jf1/p+M8YFTX+iu+iHDN89hecvyO7wHrI4R1V0TXjxOHvX3nLJN1sfh0CWG6CHZ0VlrSmK/cwg==", + "node_modules/@firebase/data-connect/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz", + "integrity": "sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz", + "integrity": "sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/database": "1.1.0", + "@firebase/database-types": "1.0.16", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz", + "integrity": "sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==", "license": "Apache-2.0", "dependencies": { "@firebase/app-types": "0.9.3", - "@firebase/util": "1.11.0" + "@firebase/util": "1.13.0" + } + }, + "node_modules/@firebase/database-types/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" } }, "node_modules/@firebase/firestore": { - "version": "4.7.10", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.10.tgz", - "integrity": "sha512-6nKsyo2U+jYSCcSE5sjMdDNA23DMUvYPUvsYGg09CNvcTO8GGKsPs7SpOhspsB91mbacq+u627CDAx3FUhPSSQ==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.9.0.tgz", + "integrity": "sha512-5zl0+/h1GvlCSLt06RMwqFsd7uqRtnNZt4sW99k2rKRd6k/ECObIWlEnvthm2cuOSnUmwZknFqtmd1qyYSLUuQ==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", - "@firebase/webchannel-wrapper": "1.0.3", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "@firebase/webchannel-wrapper": "1.0.4", "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "node_modules/@firebase/firestore-compat": { - "version": "0.3.45", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.45.tgz", - "integrity": "sha512-uRvi7AYPmsDl7UZwPyV7jgDGYusEZ2+U2g7MndbQHKIA8fNHpYC6QrzMs58+/IjX+kF/lkUn67Vrr0AkVjlY+Q==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.0.tgz", + "integrity": "sha512-4O7v4VFeSEwAZtLjsaj33YrMHMRjplOIYC2CiYsF6o/MboOhrhe01VrTt8iY9Y5EwjRHuRz4pS6jMBT8LfQYJA==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/firestore": "4.7.10", + "@firebase/component": "0.7.0", + "@firebase/firestore": "4.9.0", "@firebase/firestore-types": "3.0.3", - "@firebase/util": "1.11.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, + "node_modules/@firebase/firestore-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/firestore-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@firebase/firestore-types": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3.tgz", @@ -2103,254 +2581,614 @@ "@firebase/util": "1.x" } }, - "node_modules/@firebase/functions": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.12.3.tgz", - "integrity": "sha512-Wv7JZMUkKLb1goOWRtsu3t7m97uK6XQvjQLPvn8rncY91+VgdU72crqnaYCDI/ophNuBEmuK8mn0/pAnjUeA6A==", + "node_modules/@firebase/firestore/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/firestore/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/firestore/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/functions": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.13.0.tgz", + "integrity": "sha512-2/LH5xIbD8aaLOWSFHAwwAybgSzHIM0dB5oVOL0zZnxFG1LctX2bc1NIAaPk1T+Zo9aVkLKUlB5fTXTkVUQprQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/messaging-interop-types": "0.2.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/functions-compat": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.4.0.tgz", + "integrity": "sha512-VPgtvoGFywWbQqtvgJnVWIDFSHV1WE6Hmyi5EGI+P+56EskiGkmnw6lEqc/MEUfGpPGdvmc4I9XMU81uj766/g==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/functions": "0.13.0", + "@firebase/functions-types": "0.6.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/functions-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/functions-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/functions-types": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz", + "integrity": "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/functions/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/functions/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/installations": { + "version": "0.6.19", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.19.tgz", + "integrity": "sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/installations-compat": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.19.tgz", + "integrity": "sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/installations-types": "0.5.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/installations-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/installations-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/installations-types": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz", + "integrity": "sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==", + "license": "Apache-2.0", + "peerDependencies": { + "@firebase/app-types": "0.x" + } + }, + "node_modules/@firebase/installations/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/installations/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/messaging": { + "version": "0.12.23", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.23.tgz", + "integrity": "sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/messaging-interop-types": "0.2.3", + "@firebase/util": "1.13.0", + "idb": "7.1.1", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/messaging-compat": { + "version": "0.2.23", + "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.23.tgz", + "integrity": "sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/messaging": "0.12.23", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/messaging-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/messaging-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/messaging-interop-types": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz", + "integrity": "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/messaging/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/messaging/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/performance": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.8.tgz", + "integrity": "sha512-k6xfNM/CdTl4RaV4gT/lH53NU+wP33JiN0pUeNBzGVNvfXZ3HbCkoISE3M/XaiOwHgded1l6XfLHa4zHgm0Wyg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0", + "web-vitals": "^4.2.4" + }, + "peerDependencies": { + "@firebase/app": "0.x" + } + }, + "node_modules/@firebase/performance-compat": { + "version": "0.2.21", + "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.21.tgz", + "integrity": "sha512-OQfYRsIQiEf9ez1SOMLb5TRevBHNIyA2x1GI1H10lZ432W96AK5r4LTM+SNApg84dxOuHt6RWSQWY7TPWffKXg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/performance": "0.7.8", + "@firebase/performance-types": "0.2.3", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@firebase/app-compat": "0.x" + } + }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/performance-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/performance-types": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3.tgz", + "integrity": "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==", + "license": "Apache-2.0" + }, + "node_modules/@firebase/performance/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/performance/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.6.13", - "@firebase/messaging-interop-types": "0.2.3", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" + "node": ">=20.0.0" } }, - "node_modules/@firebase/functions-compat": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.20.tgz", - "integrity": "sha512-iIudmYDAML6n3c7uXO2YTlzra2/J6lnMzmJTXNthvrKVMgNMaseNoQP1wKfchK84hMuSF8EkM4AvufwbJ+Juew==", + "node_modules/@firebase/performance/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/functions": "0.12.3", - "@firebase/functions-types": "0.6.3", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "node": ">=20.0.0" } }, - "node_modules/@firebase/functions-types": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz", - "integrity": "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==", - "license": "Apache-2.0" - }, - "node_modules/@firebase/installations": { - "version": "0.6.13", - "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.6.13.tgz", - "integrity": "sha512-6ZpkUiaygPFwgVneYxuuOuHnSPnTA4KefLEaw/sKk/rNYgC7X6twaGfYb0sYLpbi9xV4i5jXsqZ3WO+yaguNgg==", + "node_modules/@firebase/remote-config": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.6.6.tgz", + "integrity": "sha512-Yelp5xd8hM4NO1G1SuWrIk4h5K42mNwC98eWZ9YLVu6Z0S6hFk1mxotAdCRmH2luH8FASlYgLLq6OQLZ4nbnCA==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/util": "1.11.0", - "idb": "7.1.1", + "@firebase/component": "0.7.0", + "@firebase/installations": "0.6.19", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, - "node_modules/@firebase/installations-compat": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.13.tgz", - "integrity": "sha512-f/o6MqCI7LD/ulY9gvgkv6w5k6diaReD8BFHd/y/fEdpsXmFWYS/g28GXCB72bRVBOgPpkOUNl+VsMvDwlRKmw==", + "node_modules/@firebase/remote-config-compat": { + "version": "0.2.19", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.19.tgz", + "integrity": "sha512-y7PZAb0l5+5oIgLJr88TNSelxuASGlXyAKj+3pUc4fDuRIdPNBoONMHaIUa9rlffBR5dErmaD2wUBJ7Z1a513Q==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/installations": "0.6.13", - "@firebase/installations-types": "0.5.3", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/remote-config": "0.6.6", + "@firebase/remote-config-types": "0.4.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, - "node_modules/@firebase/installations-types": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz", - "integrity": "sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==", - "license": "Apache-2.0", - "peerDependencies": { - "@firebase/app-types": "0.x" - } - }, - "node_modules/@firebase/logger": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.4.tgz", - "integrity": "sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==", + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", "dependencies": { + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@firebase/messaging": { - "version": "0.12.17", - "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.17.tgz", - "integrity": "sha512-W3CnGhTm6Nx8XGb6E5/+jZTuxX/EK8Vur4QXvO1DwZta/t0xqWMRgO9vNsZFMYBqFV4o3j4F9qK/iddGYwWS6g==", + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/installations": "0.6.13", - "@firebase/messaging-interop-types": "0.2.3", - "@firebase/util": "1.11.0", - "idb": "7.1.1", "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/messaging-compat": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.17.tgz", - "integrity": "sha512-5Q+9IG7FuedusdWHVQRjpA3OVD9KUWp/IPegcv0s5qSqRLBjib7FlAeWxN+VL0Ew43tuPJBY2HKhEecuizmO1Q==", + "node_modules/@firebase/remote-config-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/messaging": "0.12.17", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/messaging-interop-types": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz", - "integrity": "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==", + "node_modules/@firebase/remote-config-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.4.0.tgz", + "integrity": "sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg==", "license": "Apache-2.0" }, - "node_modules/@firebase/performance": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.7.2.tgz", - "integrity": "sha512-DXLLp0R0jdxH/yTmv+WTkOzsLl8YYecXh4lGZE0dzqC0IV8k+AxpLSSWvOTCkAETze8yEU/iF+PtgYVlGjfMMQ==", + "node_modules/@firebase/remote-config/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/installations": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", - "tslib": "^2.1.0", - "web-vitals": "^4.2.4" + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/performance-compat": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.15.tgz", - "integrity": "sha512-wUxsw7hGBEMN6XfvYQqwPIQp5LcJXawWM5tmYp6L7ClCoTQuEiCKHWWVurJgN8Q1YHzoHVgjNfPQAOVu29iMVg==", + "node_modules/@firebase/remote-config/node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/performance": "0.7.2", - "@firebase/performance-types": "0.2.3", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/performance-types": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3.tgz", - "integrity": "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==", - "license": "Apache-2.0" - }, - "node_modules/@firebase/remote-config": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.6.0.tgz", - "integrity": "sha512-Yrk4l5+6FJLPHC6irNHMzgTtJ3NfHXlAXVChCBdNFtgmzyGmufNs/sr8oA0auEfIJ5VpXCaThRh3P4OdQxiAlQ==", + "node_modules/@firebase/remote-config/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/installations": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app": "0.x" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@firebase/remote-config-compat": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.13.tgz", - "integrity": "sha512-UmHoO7TxAEJPIZf8e1Hy6CeFGMeyjqSCpgoBkQZYXFI2JHhzxIyDpr8jVKJJN1dmAePKZ5EX7dC13CmcdTOl7Q==", + "node_modules/@firebase/storage": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.14.0.tgz", + "integrity": "sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/remote-config": "0.6.0", - "@firebase/remote-config-types": "0.4.0", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, + "engines": { + "node": ">=20.0.0" + }, "peerDependencies": { - "@firebase/app-compat": "0.x" + "@firebase/app": "0.x" } }, - "node_modules/@firebase/remote-config-types": { + "node_modules/@firebase/storage-compat": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.4.0.tgz", - "integrity": "sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg==", - "license": "Apache-2.0" - }, - "node_modules/@firebase/storage": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.13.7.tgz", - "integrity": "sha512-FkRyc24rK+Y6EaQ1tYFm3TevBnnfSNA0VyTfew2hrYyL/aYfatBg7HOgktUdB4kWMHNA9VoTotzZTGoLuK92wg==", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.4.0.tgz", + "integrity": "sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/util": "1.11.0", + "@firebase/component": "0.7.0", + "@firebase/storage": "0.14.0", + "@firebase/storage-types": "0.8.3", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "@firebase/app": "0.x" + "@firebase/app-compat": "0.x" } }, - "node_modules/@firebase/storage-compat": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.17.tgz", - "integrity": "sha512-CBlODWEZ5b6MJWVh21VZioxwxNwVfPA9CAdsk+ZgVocJQQbE2oDW1XJoRcgthRY1HOitgbn4cVrM+NlQtuUYhw==", + "node_modules/@firebase/storage-compat/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.13", - "@firebase/storage": "0.13.7", - "@firebase/storage-types": "0.8.3", - "@firebase/util": "1.11.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/storage-compat/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" }, - "peerDependencies": { - "@firebase/app-compat": "0.x" + "engines": { + "node": ">=20.0.0" } }, "node_modules/@firebase/storage-types": { @@ -2363,43 +3201,50 @@ "@firebase/util": "1.x" } }, - "node_modules/@firebase/util": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.11.0.tgz", - "integrity": "sha512-PzSrhIr++KI6y4P6C/IdgBNMkEx0Ex6554/cYd0Hm+ovyFSJtJXqb/3OSIdnBoa2cpwZT1/GW56EmRc5qEc5fQ==", + "node_modules/@firebase/storage/node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/storage/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/@firebase/vertexai": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@firebase/vertexai/-/vertexai-1.2.0.tgz", - "integrity": "sha512-WUYIzFpOipjFXT2i0hT26wivJoIximizQptVs3KAxFAqbVlO8sjKPsMkgz0bh+tdKlqP4SUDda71fMUZXUKHgA==", + "node_modules/@firebase/util": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.11.0.tgz", + "integrity": "sha512-PzSrhIr++KI6y4P6C/IdgBNMkEx0Ex6554/cYd0Hm+ovyFSJtJXqb/3OSIdnBoa2cpwZT1/GW56EmRc5qEc5fQ==", + "hasInstallScript": true, "license": "Apache-2.0", + "peer": true, "dependencies": { - "@firebase/app-check-interop-types": "0.3.3", - "@firebase/component": "0.6.13", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.11.0", "tslib": "^2.1.0" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@firebase/app-types": "0.x" } }, "node_modules/@firebase/webchannel-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.3.tgz", - "integrity": "sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.4.tgz", + "integrity": "sha512-6m8+P+dE/RPl4OPzjTxcTbQ0rGeRyeTvAi9KwIffBVCiAMKrfXfLZaqD1F+m8t4B5/Q5aHsMozOgirkH1F5oMQ==", "license": "Apache-2.0" }, "node_modules/@fortawesome/fontawesome-free": { @@ -3899,9 +4744,9 @@ } }, "node_modules/@npmcli/move-file/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -5329,15 +6174,16 @@ } }, "node_modules/@types/request/node_modules/form-data": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz", - "integrity": "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.35", "safe-buffer": "^5.2.1" }, @@ -6765,9 +7611,9 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -7749,16 +8595,16 @@ } }, "node_modules/compression": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", - "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", - "on-headers": "~1.0.2", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" }, @@ -9710,9 +10556,9 @@ } }, "node_modules/del/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -11273,39 +12119,39 @@ } }, "node_modules/firebase": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-11.5.0.tgz", - "integrity": "sha512-ZTpO/zD5nYqY02bGpXCg1dRNLggTXPQZdLQeSeur3jYH270p1QkAZZJsm/lrKZ2W4ZjBlafTxxs4OwN38Vyocw==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-12.0.0.tgz", + "integrity": "sha512-KV+OrMJpi2uXlqL2zaCcXb7YuQbY/gMIWT1hf8hKeTW1bSumWaHT5qfmn0WTpHwKQa3QEVOtZR2ta9EchcmYuw==", "license": "Apache-2.0", "dependencies": { - "@firebase/analytics": "0.10.12", - "@firebase/analytics-compat": "0.2.18", - "@firebase/app": "0.11.3", - "@firebase/app-check": "0.8.13", - "@firebase/app-check-compat": "0.3.20", - "@firebase/app-compat": "0.2.52", + "@firebase/ai": "2.0.0", + "@firebase/analytics": "0.10.18", + "@firebase/analytics-compat": "0.2.24", + "@firebase/app": "0.14.0", + "@firebase/app-check": "0.11.0", + "@firebase/app-check-compat": "0.4.0", + "@firebase/app-compat": "0.5.0", "@firebase/app-types": "0.9.3", - "@firebase/auth": "1.9.1", - "@firebase/auth-compat": "0.5.19", - "@firebase/data-connect": "0.3.2", - "@firebase/database": "1.0.14", - "@firebase/database-compat": "2.0.5", - "@firebase/firestore": "4.7.10", - "@firebase/firestore-compat": "0.3.45", - "@firebase/functions": "0.12.3", - "@firebase/functions-compat": "0.3.20", - "@firebase/installations": "0.6.13", - "@firebase/installations-compat": "0.2.13", - "@firebase/messaging": "0.12.17", - "@firebase/messaging-compat": "0.2.17", - "@firebase/performance": "0.7.2", - "@firebase/performance-compat": "0.2.15", - "@firebase/remote-config": "0.6.0", - "@firebase/remote-config-compat": "0.2.13", - "@firebase/storage": "0.13.7", - "@firebase/storage-compat": "0.3.17", - "@firebase/util": "1.11.0", - "@firebase/vertexai": "1.2.0" + "@firebase/auth": "1.11.0", + "@firebase/auth-compat": "0.6.0", + "@firebase/data-connect": "0.3.11", + "@firebase/database": "1.1.0", + "@firebase/database-compat": "2.1.0", + "@firebase/firestore": "4.9.0", + "@firebase/firestore-compat": "0.4.0", + "@firebase/functions": "0.13.0", + "@firebase/functions-compat": "0.4.0", + "@firebase/installations": "0.6.19", + "@firebase/installations-compat": "0.2.19", + "@firebase/messaging": "0.12.23", + "@firebase/messaging-compat": "0.2.23", + "@firebase/performance": "0.7.8", + "@firebase/performance-compat": "0.2.21", + "@firebase/remote-config": "0.6.6", + "@firebase/remote-config-compat": "0.2.19", + "@firebase/storage": "0.14.0", + "@firebase/storage-compat": "0.4.0", + "@firebase/util": "1.13.0" } }, "node_modules/firebase-tools": { @@ -11524,6 +12370,19 @@ "node": ">=8" } }, + "node_modules/firebase/node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -11604,15 +12463,16 @@ } }, "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -15201,9 +16061,9 @@ } }, "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -15488,9 +16348,9 @@ "license": "ISC" }, "node_modules/messageformat/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -15925,9 +16785,9 @@ "license": "BSD-3-Clause" }, "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", "dev": true, "license": "MIT", "dependencies": { @@ -15935,7 +16795,7 @@ "debug": "2.6.9", "depd": "~2.0.0", "on-finished": "~2.3.0", - "on-headers": "~1.0.2" + "on-headers": "~1.1.0" }, "engines": { "node": ">= 0.8.0" @@ -16197,9 +17057,9 @@ } }, "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -19536,9 +20396,9 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -20217,22 +21077,57 @@ } }, "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", "dev": true, "license": "MIT", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" }, "engines": { "node": ">=0.12" } }, + "node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, "node_modules/pdfjs-dist": { "version": "4.10.38", "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.10.38.tgz", @@ -21801,9 +22696,9 @@ } }, "node_modules/recursive-readdir/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -22193,9 +23088,9 @@ } }, "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -23365,9 +24260,9 @@ } }, "node_modules/simctl/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -24795,6 +25690,28 @@ "node": ">=14.14" } }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -25106,6 +26023,21 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", diff --git a/package.json b/package.json index 9e2c63a66..9189f4f6b 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "cordova-plugin-x-socialsharing": "6.0.4", "crypto-js": "4.2.0", "es6-promise-plugin": "4.2.2", - "firebase": "11.5.0", + "firebase": "12.0.0", "jquery": "3.7.1", "jquery.panzoom": "3.2.3", "marked": "15.0.12", From 31810ab75eea9cce6a299056568b0cd1dc9aded5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 09:51:00 -0400 Subject: [PATCH 33/36] fix(deps): update dependency @babel/runtime to v7.28.2 (#1412) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index a39a44f45..62f6f392a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "7.27.6", + "@babel/runtime": "7.28.2", "@fortawesome/fontawesome-free": "6.7.2", "@havesource/cordova-plugin-push": "6.0.1", "@zxcvbn-ts/core": "3.0.4", @@ -1688,9 +1688,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", "license": "MIT", "engines": { "node": ">=6.9.0" diff --git a/package.json b/package.json index 9189f4f6b..80547a822 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ }, "homepage": "https://github.com/opalmedapps/opal-app#readme", "dependencies": { - "@babel/runtime": "7.27.6", + "@babel/runtime": "7.28.2", "@fortawesome/fontawesome-free": "6.7.2", "@havesource/cordova-plugin-push": "6.0.1", "@zxcvbn-ts/core": "3.0.4", From 144067f31a8018b6ae07f74c350874ba4047ab65 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 10:28:51 -0400 Subject: [PATCH 34/36] fix(deps): update plotly packages to v3.0.3 (patch) (#1411) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 16 ++++++++-------- package.json | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 62f6f392a..13708389e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,8 +57,8 @@ "moment": "2.30.1", "onsenui": "1.3.17", "pdfjs-dist": "4.10.38", - "plotly.js-basic-dist-min": "3.0.2", - "plotly.js-locales": "3.0.2", + "plotly.js-basic-dist-min": "3.0.3", + "plotly.js-locales": "3.0.3", "python-struct": "1.1.3", "tweetnacl": "1.0.3", "tweetnacl-util": "0.15.1" @@ -21510,15 +21510,15 @@ } }, "node_modules/plotly.js-basic-dist-min": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/plotly.js-basic-dist-min/-/plotly.js-basic-dist-min-3.0.2.tgz", - "integrity": "sha512-eoZp/gmJ+o+dKENhQ2NGlipnnji72SAlWzy4knZHXpEj7ctTP/BJ1R1/9hPwsLeovmf5hfe2yRWck8gB902Bwg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/plotly.js-basic-dist-min/-/plotly.js-basic-dist-min-3.0.3.tgz", + "integrity": "sha512-ex9O6GS3aKfWvqkzqGFg+DEy/6AlZTnKfeCKbIr6lzzPbcXjgVGp15GT0JQEUQYlKL2o+7+vGqG2G20be9XrBg==", "license": "MIT" }, "node_modules/plotly.js-locales": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/plotly.js-locales/-/plotly.js-locales-3.0.2.tgz", - "integrity": "sha512-6IbkNI+qovvChyYWUCeHuBeYjl6SD0wegmucqIN/nJOtAmzgdUQnUpyi/CxBzGP4sHjJz36DqlQByyTswsUcEg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/plotly.js-locales/-/plotly.js-locales-3.0.3.tgz", + "integrity": "sha512-A55zIk4zNYP1//4o+pbyAezVPLY17lQHVZ6nI4V0bSdVwAqqPPj/8BgjZYH4tT4FmlCLBeJuP4KjHmRiz8bQgA==", "license": "MIT" }, "node_modules/portfinder": { diff --git a/package.json b/package.json index 80547a822..4d7de43b6 100644 --- a/package.json +++ b/package.json @@ -96,8 +96,8 @@ "moment": "2.30.1", "onsenui": "1.3.17", "pdfjs-dist": "4.10.38", - "plotly.js-basic-dist-min": "3.0.2", - "plotly.js-locales": "3.0.2", + "plotly.js-basic-dist-min": "3.0.3", + "plotly.js-locales": "3.0.3", "python-struct": "1.1.3", "tweetnacl": "1.0.3", "tweetnacl-util": "0.15.1" From f0b72c3698197d1d96f78f0f24ee1f5714de1779 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 11:22:46 -0400 Subject: [PATCH 35/36] chore(deps): update dependency webpack to v5.101.0 (#1415) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 13708389e..351ba9fcd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,7 +86,7 @@ "shelljs": "0.10.0", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "webpack": "5.100.2", + "webpack": "5.101.0", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.2", "webpack-manifest-plugin": "5.0.1", @@ -26544,9 +26544,9 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.100.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.2.tgz", - "integrity": "sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==", + "version": "5.101.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.0.tgz", + "integrity": "sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 4d7de43b6..41db21a71 100644 --- a/package.json +++ b/package.json @@ -125,7 +125,7 @@ "shelljs": "0.10.0", "style-loader": "4.0.0", "terser-webpack-plugin": "5.3.14", - "webpack": "5.100.2", + "webpack": "5.101.0", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.2", "webpack-manifest-plugin": "5.0.1", From 15b4ac21f7c1404d6c88922bb4412d76f27b69bd Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 30 Jul 2025 19:18:07 +0000 Subject: [PATCH 36/36] chore(release): version 2.2.7 ## [2.2.7](https://github.com/opalmedapps/opal-app/compare/v2.2.6...v2.2.7) (2025-07-30) ### Bug Fixes * add unilingual support ([#1395](https://github.com/opalmedapps/opal-app/issues/1395)) ([b722b3e](https://github.com/opalmedapps/opal-app/commit/b722b3e9db6ac2dd4ac10baf31d5a9d1d98eac84)) * clean up translations ([#1381](https://github.com/opalmedapps/opal-app/issues/1381)) ([72a8c2c](https://github.com/opalmedapps/opal-app/commit/72a8c2c7c080c9c44746a30e2621c826ffd7c399)) * **deps:** update babel monorepo (minor) ([#1392](https://github.com/opalmedapps/opal-app/issues/1392)) ([72bdd16](https://github.com/opalmedapps/opal-app/commit/72bdd163130be866eae55ea0fe64dae2afadcf5f)) * **deps:** update dependency @babel/runtime to v7.28.2 ([#1412](https://github.com/opalmedapps/opal-app/issues/1412)) ([31810ab](https://github.com/opalmedapps/opal-app/commit/31810ab75eea9cce6a299056568b0cd1dc9aded5)) * **deps:** update dependency @havesource/cordova-plugin-push to v6 ([#1408](https://github.com/opalmedapps/opal-app/issues/1408)) ([d2ec52e](https://github.com/opalmedapps/opal-app/commit/d2ec52e6b6ecfa5d7119eb36078cab2fca411a2e)) * **deps:** update dependency cordova-android to v14 ([#1403](https://github.com/opalmedapps/opal-app/issues/1403)) ([34902b1](https://github.com/opalmedapps/opal-app/commit/34902b12d315963f14ceb11085a0cc2157433e38)) * **deps:** update dependency firebase to v12 ([#1409](https://github.com/opalmedapps/opal-app/issues/1409)) ([fd8e559](https://github.com/opalmedapps/opal-app/commit/fd8e5592984d6dcdecd87d63a3119693d704cfba)) * **deps:** update dependency marked to v15.0.12 ([#1402](https://github.com/opalmedapps/opal-app/issues/1402)) ([fc58702](https://github.com/opalmedapps/opal-app/commit/fc58702e9ea63a38a78cbca2d6e0ec81775e236e)) * **deps:** update plotly packages to v3.0.2 (patch) ([#1406](https://github.com/opalmedapps/opal-app/issues/1406)) ([1ae73a0](https://github.com/opalmedapps/opal-app/commit/1ae73a0b9a2737cf0ce367e28c9b242f61472ff4)) * **deps:** update plotly packages to v3.0.3 (patch) ([#1411](https://github.com/opalmedapps/opal-app/issues/1411)) ([144067f](https://github.com/opalmedapps/opal-app/commit/144067f31a8018b6ae07f74c350874ba4047ab65)) * ensure that security answer input field can be selected on iOS ([#1378](https://github.com/opalmedapps/opal-app/issues/1378)) ([8c73ba6](https://github.com/opalmedapps/opal-app/commit/8c73ba661fcf249203d150922fb8dc8c38cd3c16)) * remove false untranslated string warnings from the init page ([#1376](https://github.com/opalmedapps/opal-app/issues/1376)) ([767b57c](https://github.com/opalmedapps/opal-app/commit/767b57c063c4448a29f99e9290a717107b689ce2)) --- CHANGELOG.md | 18 ++++++++++++++++++ env/config.xml | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd0eb047f..a3545450a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +## [2.2.7](https://github.com/opalmedapps/opal-app/compare/v2.2.6...v2.2.7) (2025-07-30) + + +### Bug Fixes + +* add unilingual support ([#1395](https://github.com/opalmedapps/opal-app/issues/1395)) ([b722b3e](https://github.com/opalmedapps/opal-app/commit/b722b3e9db6ac2dd4ac10baf31d5a9d1d98eac84)) +* clean up translations ([#1381](https://github.com/opalmedapps/opal-app/issues/1381)) ([72a8c2c](https://github.com/opalmedapps/opal-app/commit/72a8c2c7c080c9c44746a30e2621c826ffd7c399)) +* **deps:** update babel monorepo (minor) ([#1392](https://github.com/opalmedapps/opal-app/issues/1392)) ([72bdd16](https://github.com/opalmedapps/opal-app/commit/72bdd163130be866eae55ea0fe64dae2afadcf5f)) +* **deps:** update dependency @babel/runtime to v7.28.2 ([#1412](https://github.com/opalmedapps/opal-app/issues/1412)) ([31810ab](https://github.com/opalmedapps/opal-app/commit/31810ab75eea9cce6a299056568b0cd1dc9aded5)) +* **deps:** update dependency @havesource/cordova-plugin-push to v6 ([#1408](https://github.com/opalmedapps/opal-app/issues/1408)) ([d2ec52e](https://github.com/opalmedapps/opal-app/commit/d2ec52e6b6ecfa5d7119eb36078cab2fca411a2e)) +* **deps:** update dependency cordova-android to v14 ([#1403](https://github.com/opalmedapps/opal-app/issues/1403)) ([34902b1](https://github.com/opalmedapps/opal-app/commit/34902b12d315963f14ceb11085a0cc2157433e38)) +* **deps:** update dependency firebase to v12 ([#1409](https://github.com/opalmedapps/opal-app/issues/1409)) ([fd8e559](https://github.com/opalmedapps/opal-app/commit/fd8e5592984d6dcdecd87d63a3119693d704cfba)) +* **deps:** update dependency marked to v15.0.12 ([#1402](https://github.com/opalmedapps/opal-app/issues/1402)) ([fc58702](https://github.com/opalmedapps/opal-app/commit/fc58702e9ea63a38a78cbca2d6e0ec81775e236e)) +* **deps:** update plotly packages to v3.0.2 (patch) ([#1406](https://github.com/opalmedapps/opal-app/issues/1406)) ([1ae73a0](https://github.com/opalmedapps/opal-app/commit/1ae73a0b9a2737cf0ce367e28c9b242f61472ff4)) +* **deps:** update plotly packages to v3.0.3 (patch) ([#1411](https://github.com/opalmedapps/opal-app/issues/1411)) ([144067f](https://github.com/opalmedapps/opal-app/commit/144067f31a8018b6ae07f74c350874ba4047ab65)) +* ensure that security answer input field can be selected on iOS ([#1378](https://github.com/opalmedapps/opal-app/issues/1378)) ([8c73ba6](https://github.com/opalmedapps/opal-app/commit/8c73ba661fcf249203d150922fb8dc8c38cd3c16)) +* remove false untranslated string warnings from the init page ([#1376](https://github.com/opalmedapps/opal-app/issues/1376)) ([767b57c](https://github.com/opalmedapps/opal-app/commit/767b57c063c4448a29f99e9290a717107b689ce2)) + ## [2.2.6](https://github.com/opalmedapps/opal-app/compare/v2.2.5...v2.2.6) (2025-04-29) diff --git a/env/config.xml b/env/config.xml index a88c51fa2..e85de0df4 100644 --- a/env/config.xml +++ b/env/config.xml @@ -4,7 +4,7 @@ SPDX-FileCopyrightText: Copyright (C) 2020 Opal Health Informatics Group at the SPDX-License-Identifier: Apache-2.0 --> - + ${APP_NAME} Opal is a patient portal designed to empower patients with their medical information.