diff --git a/.github/actions/maven-job/action.yml b/.github/actions/maven-job/action.yml index 69240a861041..01cc05072608 100644 --- a/.github/actions/maven-job/action.yml +++ b/.github/actions/maven-job/action.yml @@ -99,43 +99,49 @@ runs: echo "${DOTCMS_LICENSE_KEY}" > ${DOTCMS_LICENSE_PATH}/license.dat echo "DOTCMS_LICENSE_FILE=${DOTCMS_LICENSE_PATH}/license.dat" >> "$GITHUB_ENV" - - id: get-maven-month-key - name: Get Maven Month Cache Key - shell: bash - run: | - echo "month-key=$(/bin/date -u "+%Y-%m")" >> $GITHUB_OUTPUT - - id: restore-cache-maven name: Restore Maven Repository Cache if: ${{ inputs.artifacts-from == '' }} uses: actions/cache/restore@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-mavencore-${{ steps.get-maven-month-key.outputs.month-key }} + key: ${{ runner.os }}-mavencore-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-mavencore- - id: restore-cache-node name: Restore Node Binary Cache if: ${{ inputs.requires-node == 'true' }} - uses: actions/cache@v4 + uses: actions/cache/restore@v4 with: path: installs key: node-binary-${{ hashFiles('core-web/.nvmrc') }} + - name: Get yarn cache directory path + id: yarn-info + if: ${{ inputs.requires-node == 'true' }} + shell: bash + run: | + echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT + echo "version=$(yarn -v)" >> $GITHUB_OUTPUT + + - id: restore-cache-yarn name: Restore Yarn Cache if: ${{ inputs.requires-node == 'true' }} uses: actions/cache/restore@v4 with: - path: ~/.cache/yarn - key: yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: yarn- + path: ${{ steps.yarn-info.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ steps.yarn-info.outputs.version }}-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn-${{ steps.yarn-info.outputs.version }} + ${{ runner.os }}-yarn- + - id: cache-sonar name: Cache SonarQube Packages if: ${{ inputs.cache-sonar == 'true' }} - uses: actions/cache@v4 + uses: actions/cache/restore@v4 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar @@ -177,7 +183,7 @@ runs: name: Run Maven Build shell: ${{ runner.os == 'Windows' && 'pwsh' || 'bash' }} run: | - DEFAULT_ARGS="-e -B --no-transfer-progress --show-version -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -Pprod" + DEFAULT_ARGS="-e -B --no-transfer-progress --show-version -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -Dprod=true" MAVEN_ARGS="${{ inputs.maven-args }}" if [[ "${{ inputs.generate-docker }}" == "true" ]]; then DEFAULT_ARGS="$DEFAULT_ARGS -Ddocker.buildArchiveOnly=dotCMS/target" @@ -250,7 +256,7 @@ runs: uses: actions/cache/save@v4 with: path: ~/.m2/repository - key: ${{ runner.os }}-mavencore-${{ steps.get-maven-month-key.outputs.month-key }} + key: ${{ steps.restore-cache-maven.outputs.cache-primary-key }} - id: save-cache-node name: Save Node Binary Cache @@ -258,15 +264,15 @@ runs: uses: actions/cache/save@v4 with: path: installs - key: node-binary-${{ hashFiles('core-web/.nvmrc') }} + key: ${{ steps.restore-cache-node.outputs.cache-primary-key }} - id: save-cache-yarn name: Save Yarn Cache if: ${{ inputs.generate-artifacts == 'true' && steps.restore-cache-yarn.outputs.cache-hit != 'true' }} uses: actions/cache/save@v4 with: - path: ~/.cache/yarn - key: yarn-${{ hashFiles('**/yarn.lock') }} + path: ${{ steps.yarn-info.outputs.dir }} + key: ${{ steps.restore-cache-yarn.outputs.cache-primary-key }} - id: save-cache-sonar name: Save SonarQube Cache @@ -274,7 +280,7 @@ runs: uses: actions/cache/save@v4 with: path: ~/.sonar/cache - key: ${{ runner.os }}-sonar + key: ${{ steps.cache-sonar.outputs.cache-primary-key }} # ---------------------------- Generate Reports Artifacts ---------------------------- - id: generate-build-reports-artifact diff --git a/.github/workflows/reusable-ci-build.yml b/.github/workflows/reusable-ci-build.yml index a43492cd1a63..d7319eea6117 100644 --- a/.github/workflows/reusable-ci-build.yml +++ b/.github/workflows/reusable-ci-build.yml @@ -77,7 +77,7 @@ jobs: - uses: ./.github/actions/maven-job with: stage-name: "Initial Artifact Build" - maven-args: "clean install ${{ env.VALIDATE_PROFILE }} -DskipTests=true -Dgithub.event.name=${{ github.event_name }}" + maven-args: "clean install ${{ env.VALIDATE_PROFILE }} -Dprod=true -DskipTests=true -Dgithub.event.name=${{ github.event_name }}" generate-artifacts: true require-master: ${{ inputs.version == '1.0.0-SNAPSHOT' }} github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/reusable-ci-test.yml b/.github/workflows/reusable-ci-test.yml index 6afc84dbe819..48be32bf0d45 100644 --- a/.github/workflows/reusable-ci-test.yml +++ b/.github/workflows/reusable-ci-test.yml @@ -159,7 +159,7 @@ jobs: maven-args: "-Pcoverage verify -pl :dotcms-postman -Dpostman.test.skip=false -Dpostman.collections=${{ matrix.collection_group }}" generates-test-results: true dotcms-license: ${{ secrets.DOTCMS_LICENSE }} - requires-node: false + requires-node: true needs-docker-image: true github-token: ${{ secrets.GITHUB_TOKEN }} artifacts-from: ${{ env.ARTIFACT_RUN_ID }} \ No newline at end of file diff --git a/core-web/.husky/pre-commit b/core-web/.husky/pre-commit index 1ae3e86b6e56..5c5aeb6fb40c 100755 --- a/core-web/.husky/pre-commit +++ b/core-web/.husky/pre-commit @@ -1,29 +1,80 @@ #!/usr/bin/env bash + +# Color definitions +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + # This script is used as a pre-commit hook for a Git repository. # It performs operations such as formatting and linting on staged files. -. "$(dirname "$0")/_/husky.sh" # Source the husky.sh script +# Source husky script +. "$(dirname "$0")/_/husky.sh" || { + echo "Failed to source husky.sh" + exit 1 +} + +check_sdkman() { + SDKMAN_INIT="$HOME/.sdkman/bin/sdkman-init.sh" + + # Check if sdkman-init.sh exists and is readable + if [[ -s "$SDKMAN_INIT" ]]; then + source "$SDKMAN_INIT" # Source sdkman to make sdk command available + echo "${GREEN}SDKMAN! sourced from $SDKMAN_INIT${NC}" + + # Optionally check if sdk command is available + if command -v sdk >/dev/null 2>&1; then + echo "${GREEN}SDKMAN! is installed and functional.${NC}" + else + echo "${RED}SDKMAN! command is not available. Please check the installation.${NC}" + exit 1 + fi + else + echo "${RED}SDKMAN! not found at $SDKMAN_INIT. Please install SDKMAN! first.${NC}" + echo "${RED}You can install this and other required utilities from${NC} https://github.com/dotCMS/dotcms-utilities" + exit 1 + fi +} -error_occurred=false +has_errors=false # Perform fix operations on the staged files -perform_fixes() { +perform_frontend_fixes() { local files="$1" local add_to_index="$2" local file - YARN_EXEC="${root_dir}/installs/node/yarn/dist/bin/yarn" - NODE_EXEC="${root_dir}/installs/node/node" + local YARN_EXEC="${root_dir}/installs/node/yarn/dist/bin/yarn" + local NODE_EXEC="${root_dir}/installs/node/node" + + # Check if Yarn and Node executables are present + if [[ ! -x "$YARN_EXEC" || ! -x "$NODE_EXEC" ]]; then + echo "Yarn or Node executables are missing." + exit 1 + fi echo "Yarn version: $($YARN_EXEC --version 2>/dev/null)" echo "Node version: $($NODE_EXEC --version)" + $YARN_EXEC config set registry https://dotcms-npm.b-cdn.net + # Check if yarn.lock is present + if ! $YARN_EXEC install; then + echo "Failed to install dependencies with yarn install" + echo "Please run 'yarn install' to update the lockfile and make sure you commit this with any package.json changes." + has_errors=true + return 1 + else + echo "Completed yarn install adding yarn.lock if it was modified" + git add "${root_dir}/core-web/yarn.lock" + fi if ! $YARN_EXEC nx affected -t lint --exclude='tag:skip:lint' --fix=true; then - error_occurred=true + has_errors=true fi if ! $YARN_EXEC nx format:write; then - error_occurred=true + has_errors=true fi if [ "$add_to_index" = "true" ]; then @@ -35,7 +86,7 @@ perform_fixes() { for file in $files; do if echo "$modified_files" | grep -Fxq "$file"; then if ! git add -- "${root_dir}/${file}"; then - error_occurred=true + has_errors=true fi else unmatched_files+=("$file") @@ -58,22 +109,46 @@ perform_fixes() { fi } -# Function to run yarn install with --frozen-lockfile and handle failure -run_yarn_install_frozen_lockfile() { - if ! yarn install --frozen-lockfile; then - echo "Failed to install dependencies with --frozen-lockfile." - echo "Please run 'yarn install' to update the lockfile and make sure you commit this with any package.json changes." - exit 1 +restore_untracked_files() { + if [ "$backup_untracked" = true ] && [ -n "${untracked_files}" ] && [ "$(ls -A "${temp_dir}")" ]; then + echo "Restoring untracked files..." + # Copy each file back from the temporary directory while maintaining the directory structure + find "${temp_dir}" -type f -exec sh -c ' + for file; do + temp_dir='"${temp_dir}"' + root_dir='"${root_dir}"' + rel_path="${file#${temp_dir}/}" # Extract the relative path by removing the temp directory prefix + dest_dir="$(dirname "${rel_path}")" # Determine the destination directory based on the relative path + full_dest_path="${root_dir}/${rel_path}" # Construct the full destination path + mkdir -p "${root_dir}/${dest_dir}" # Ensure the destination directory exists + cp "${file}" "${full_dest_path}" # Copy the file to the destination directory + done + ' sh {} + + + fi + + # Clean up temporary directory + if [ "$backup_untracked" = true ] && [ -n "${untracked_files}" ]; then + rm -rf "${temp_dir}" fi } original_pwd=${PWD} root_dir="$(git rev-parse --show-toplevel)" + + +# Check for sdkman before running other initializations + # This will ensure that the correct version of node and yarn is installed # from core-web/pom.xml and .nvmrc files are updated -cd "${root_dir}" || exit -echo "Initializing maven, node and yarn versions" +cd "${root_dir}" || exit 1 + +check_sdkman + +echo "Setting up Java" +sdk env install +echo "Initializing Maven, Node, and Yarn versions" if ! ./mvnw validate -pl :dotcms-core --am -q; then echo "Failed to run './mvnw validate -pl :dotcms-core --am'" echo "Please run the following command to see the detailed output:" @@ -85,85 +160,76 @@ fi core_web_dir="${root_dir}/core-web" -cd "${core_web_dir}" || exit - -yarn config set registry https://dotcms-npm.b-cdn.net -run_yarn_install_frozen_lockfile +cd "${core_web_dir}" || exit 1 staged_files=$(git diff --cached --name-only) modified_files=$(git diff --name-only) untracked_files=$(printf "%s\n%s" "$staged_files" "$modified_files" | sort | uniq -d) +if [ -n "${staged_files}" ]; then + # Check if there are any staged files in the core-web directory + core_web_files_staged=$(echo "$staged_files" | grep -E '^core-web/' || true ) + + # Determine if untracked files should be backed up + backup_untracked=true # Default to false if not set +fi +echo ${core_web_files_staged} -# Only create a temporary directory if there are untracked files -if [ -n "${untracked_files}" ]; then +# Only create a temporary directory if there are untracked files and backup_untracked is true +if [ "$backup_untracked" = true ] && [ -n "${untracked_files}" ]; then temp_dir=$(mktemp -d) if [ ! -d "${temp_dir}" ]; then echo "Failed to create temporary directory." exit 1 fi -fi + echo "Created temporary directory ${temp_dir}" -current_subdir=$(basename "$(pwd)") # Get the current subdirectory -# Convert paths if necessary (adjust this logic based on your exact directory structure) -for file in $untracked_files; do - relative_path="${file#${current_subdir}/}" # Construct the path relative to the current directory + for file in $untracked_files; do + if echo "${staged_files}" | grep -q "^${file}$"; then + mkdir -p "${temp_dir}/$(dirname "${file}")" # Ensure the directory structure exists in the temp directory + cp "${root_dir}/${file}" "${temp_dir}/${file}" # Copy the file to the temp directory, preserving the directory structure + echo "Backing up ${file} to ${temp_dir}/${file}" + # Restore the original file state in the repo, removing unstaged changes + git restore "${root_dir}/${file}" # Using relative path relative to current directory + fi + done - if echo "${staged_files}" | grep -q "^${file}$"; then - mkdir -p "${temp_dir}/$(dirname "${file}")" # Ensure the directory structure exists in the temp directory - cp "${root_dir}/${file}" "${temp_dir}/${file}" # Copy the file to the temp directory, preserving the directory structure - echo "Backing up ${file} to ${temp_dir}/${file}" - # Restore the original file state in the repo, removing unstaged changes - git checkout -- "${relative_path}" # Using relative path relative to current directory - fi -done + # Set trap to ensure restore_untracked_files is called on exit + trap restore_untracked_files EXIT -echo "Backed up workspace to ${temp_dir}" + for file in $untracked_files; do + if echo "${staged_files}" | grep -q "^${file}$"; then + git restore "${root_dir}/${file}" # Using relative path relative to current directory + fi + done -# Perform operations on staged files and capture the error count -if [ -n "${staged_files}" ]; then - perform_fixes "${staged_files}" true - errors=$? # Capture the return value from perform_fixes + echo "Backed up workspace to ${temp_dir}" fi - -# Check if the temporary directory is not empty -if [ -n "${untracked_files}" ] && [ "$(ls -A "${temp_dir}")" ]; then - echo "Restoring untracked files..." - # Copy each file back from the temporary directory while maintaining the directory structure - find "${temp_dir}" -type f -exec sh -c ' - for file; do - temp_dir='"${temp_dir}"' - root_dir='"${root_dir}"' - rel_path="${file#${temp_dir}/}" # Extract the relative path by removing the temp directory prefix - dest_dir="$(dirname "${rel_path}")" # Determine the destination directory based on the relative path - full_dest_path="${root_dir}/${rel_path}" # Construct the full destination path - mkdir -p "${root_dir}/${dest_dir}" # Ensure the destination directory exists - cp "${file}" "${full_dest_path}" # Copy the file to the destination directory - done - ' sh {} + - - # After restoring, perform actions like formatting on the originally staged files - if [ -n "${staged_files}" ]; then - perform_fixes "${untracked_files}" false - fi +# Run fixes on staged files +if [ -n "$core_web_files_staged" ]; then + perform_frontend_fixes "${core_web_files_staged}" true + errors=$? # Capture the return value from perform_frontend_fixes fi +# Restore untracked files if necessary +restore_untracked_files -# After restoring files and before exiting, check if there were any errors -if [ -n "${untracked_files}" ]; then - rm -r "${temp_dir}" +## Running fixes on untracked files +core_web_files_untracked=$(echo "untracked_files" | grep -E '^core-web/' || true ) +if [ -n "$core_web_files_untracked" ]; then + perform_frontend_fixes "${core_web_files_untracked}" false fi # Restore original working directory -cd "${original_pwd}" || exit # Exit if the directory does not exist +cd "${original_pwd}" || exit 1 # Exit if the directory does not exist # Final check before exiting -if [ "$error_occurred" = true ]; then - echo "Checks failed. force commit with --no-verify option if bypass required" +if [ "$has_errors" = true ]; then + echo "Checks failed. Force commit with --no-verify option if bypass required." exit 1 # Change the exit code to reflect that an error occurred else - echo "Commit checks completed OK" + echo "Commit checks completed successfully." exit 0 # No errors, exit normally fi diff --git a/core-web/.nxignore b/core-web/.nxignore index 462b1ba02576..8812a44d7b5f 100644 --- a/core-web/.nxignore +++ b/core-web/.nxignore @@ -1,3 +1,4 @@ .nx dist node_modules +target diff --git a/core-web/pom.xml b/core-web/pom.xml index 6099bd0d9663..126f83cee6c1 100644 --- a/core-web/pom.xml +++ b/core-web/pom.xml @@ -19,7 +19,7 @@ 9 8084 - install --frozen-lockfile + --frozen-lockfile false apps,libs **/node_modules/**,**/*.spec.ts @@ -80,6 +80,7 @@ + install @@ -96,6 +97,8 @@ + + lint-test @@ -132,7 +135,7 @@ compile - run nx build dotcms-ui ${nx.build.options} + run nx --verbose build dotcms-ui ${nx.build.options} @@ -277,7 +280,7 @@ --prod - --frozen-lockfile + --frozen-lockfile --prefer-offline diff --git a/core-web/yarn.lock b/core-web/yarn.lock index fb9eb00b9e27..7e9ffc2c1fdd 100644 --- a/core-web/yarn.lock +++ b/core-web/yarn.lock @@ -11057,7 +11057,7 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== @@ -14187,7 +14187,7 @@ import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== @@ -16287,11 +16287,6 @@ lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - integrity sha512-bSYo8Pc/f0qAkr8fPJydpJjtrHiSynYfYBjtANIgXv5xEf1WlTC63dIDlgu0s9dmTvzRu1+JJTxcIAHe+sH0FQ== - lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -16300,33 +16295,11 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ== - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - integrity sha512-S8dUjWr7SUT/X6TBIQ/OYoCHo1Stu1ZRy6uMUSKqzFnZp5G5RyQizSm6kvxD2Ewyy6AVfMg4AToeZzKfF99T5w== - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - integrity sha512-ev5SP+iFpZOugyab/DEUQxUeZP5qyciVTlgQ1f4Vlw7VUcCD8fVnyIqVUEIaoFH9zjAqdgi69KiofzvVmda/ZQ== - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA== -lodash._getnative@*, lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA== - lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -16402,11 +16375,6 @@ lodash.once@^4.0.0, lodash.once@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash.restparam@*: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - integrity sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw== - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -22158,7 +22126,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -22176,15 +22144,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -22281,7 +22240,7 @@ stringify-package@^1.0.0, stringify-package@^1.0.1: resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -22309,13 +22268,6 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -24315,7 +24267,7 @@ worker-farm@^1.6.0, worker-farm@^1.7.0: dependencies: errno "~0.1.7" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -24350,15 +24302,6 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"