From baa58ae2d1853c8a486937d896b805e0a7e8747c Mon Sep 17 00:00:00 2001 From: aku <62317096+thansetan@users.noreply.github.com> Date: Sat, 25 May 2024 18:37:44 +0700 Subject: [PATCH] fix(cz-git): incorrect maxSubjectLength on custom scope (#173) Co-authored-by: aku < thansetan@users.noreply.github.com> Co-authored-by: Zhengqbbb --- package.json | 4 +- packages/cz-git/__tests__/util.test.ts | 12 ++--- packages/cz-git/src/generator/message.ts | 4 +- packages/cz-git/src/generator/question.ts | 39 +++++++++------- packages/cz-git/src/shared/utils/util.ts | 55 ++++++++++++++++------- pnpm-lock.yaml | 54 ++++++++++++---------- 6 files changed, 103 insertions(+), 65 deletions(-) diff --git a/package.json b/package.json index b5b26adbe..b0aa55158 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "customizable", "cz-customizable" ], - "packageManager": "pnpm@9.0.0", + "packageManager": "pnpm@9.1.2", "scripts": { "x": "czg", "build": "pnpm clean && pnpm -r build", @@ -65,7 +65,7 @@ "node-fetch": "2.6.9", "ora": "^7.0.1", "pathe": "^1.1.1", - "pnpm": "9.0.0", + "pnpm": "^9.1.2", "rimraf": "3.0.2", "simple-git-hooks": "^2.9.0", "ts-json-schema-generator": "^1.3.0", diff --git a/packages/cz-git/__tests__/util.test.ts b/packages/cz-git/__tests__/util.test.ts index d4b3bfa63..6247803b6 100644 --- a/packages/cz-git/__tests__/util.test.ts +++ b/packages/cz-git/__tests__/util.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from 'vitest' -import { getCurrentScopes, getMaxSubjectLength, isSingleItem } from '../src/shared' +import { getMaxSubjectLength, getScopesList, isSingleItem } from '../src/shared' /** * @description: utils Test @@ -90,17 +90,17 @@ describe('isSingleItem()', () => { }) }) -describe('getCurrentScopes()', () => { +describe('getScopesList()', () => { test('no scopes should empty', () => { - expect(getCurrentScopes([], {}, 'feat')).toEqual([]) - expect(getCurrentScopes([], { test: [{ name: 'unitest' }] }, 'feat')).toEqual([]) + expect(getScopesList([], {}, 'feat')).toEqual([]) + expect(getScopesList([], { test: [{ name: 'unitest' }] }, 'feat')).toEqual([]) }) test('hit scopeOverrides should return', () => { const scopeOverrides = { test: [{ name: 'unitest' }] } - expect(getCurrentScopes(['feat'], scopeOverrides, 'test')).toEqual([{ name: 'unitest' }]) + expect(getScopesList(['feat'], scopeOverrides, 'test')).toEqual([{ name: 'unitest' }]) }) test('no hit scopeOverrides should return scopes', () => { const scopeOverrides = { test: [{ name: 'unitest' }] } - expect(getCurrentScopes(['feat', 'fix'], scopeOverrides, 'feat')).toEqual(['feat', 'fix']) + expect(getScopesList(['feat', 'fix'], scopeOverrides, 'feat')).toEqual(['feat', 'fix']) }) }) diff --git a/packages/cz-git/src/generator/message.ts b/packages/cz-git/src/generator/message.ts index 6b4db75b3..c1d2c35e5 100644 --- a/packages/cz-git/src/generator/message.ts +++ b/packages/cz-git/src/generator/message.ts @@ -6,8 +6,8 @@ import { spawnSync } from 'node:child_process' import { style } from '@cz-git/inquirer' import { - getCurrentScopes, getMaxSubjectLength, + getScopesList, isSingleItem, isString, parseStandardScopes, @@ -37,7 +37,7 @@ function getSingleParams(answers: Answers, options: CommitizenGitOptions) { singeIssuePrefix: '', } const scopeList = parseStandardScopes( - getCurrentScopes(options.scopes, options.scopeOverrides, answers.type), + getScopesList(options.scopes, options.scopeOverrides, answers.type), ) if (isSingleItem(options.allowCustomScopes, options.allowEmptyScopes, scopeList)) mapping.singleScope = scopeList[singleIndex].value diff --git a/packages/cz-git/src/generator/question.ts b/packages/cz-git/src/generator/question.ts index 21eba2386..72ae3063d 100644 --- a/packages/cz-git/src/generator/question.ts +++ b/packages/cz-git/src/generator/question.ts @@ -7,14 +7,15 @@ import { fuzzyFilter, style } from '@cz-git/inquirer' import type { Answers, CommitizenGitOptions, Option } from '../shared' import { - getCurrentScopes, + getAnswersScope, + getAnswersType, getMaxSubjectLength, getProcessSubject, + getScopesList, isSingleItem, isString, log, parseStandardScopes, - resolveDefaultType, resolveListItemPinTop, resovleCustomListTemplate, useThemeCode, @@ -53,9 +54,9 @@ export function generateQuestions(options: CommitizenGitOptions, cz: any) { initialCheckedValue: options.defaultScope, // checkbox mode source: (answer: Answers, input: string) => { let scopeSource: Option[] = [] - const _answerType = resolveDefaultType(options, answer) + const answerType = getAnswersType(options, answer) scopeSource = parseStandardScopes( - getCurrentScopes(options.scopes, options.scopeOverrides, _answerType), + getScopesList(options.scopes, options.scopeOverrides, answerType), ) scopeSource = resovleCustomListTemplate( scopeSource, @@ -83,12 +84,12 @@ export function generateQuestions(options: CommitizenGitOptions, cz: any) { return input.length !== 0 ? true : style.red('[ERROR] scope is required') }, when: (answer: Answers) => { - const _answerType = resolveDefaultType(options, answer) + const answerType = getAnswersType(options, answer) return !isSingleItem( options.allowCustomScopes, options.allowEmptyScopes, parseStandardScopes( - getCurrentScopes(options.scopes, options.scopeOverrides, _answerType), + getScopesList(options.scopes, options.scopeOverrides, answerType), ), ) }, @@ -111,8 +112,8 @@ export function generateQuestions(options: CommitizenGitOptions, cz: any) { return input.length !== 0 ? true : style.red('[ERROR] scope is required') }, when: (answers: Answers) => { - return answers.scope === '___CUSTOM___' - || (isString(options.defaultScope) && (options.defaultScope as string).startsWith('___CUSTOM___:')) + const { isCustomScope, isInputMode } = getAnswersScope(options, answers) + return isCustomScope || isInputMode }, transformer: (input: string) => useThemeCode(input, options.themeColorCode), }, @@ -125,12 +126,15 @@ export function generateQuestions(options: CommitizenGitOptions, cz: any) { const processedSubject = getProcessSubject(subject) if (processedSubject.length === 0) return style.red('[ERROR] subject is required') + if (!options.minSubjectLength && !options.maxSubjectLength) { log('err', 'Error [Subject Length] Option') return false } - const _answerType = resolveDefaultType(options, answers) - const maxSubjectLength = getMaxSubjectLength(_answerType, answers.scope, options) + + const answerType = getAnswersType(options, answers) + const { answerScope } = getAnswersScope(options, answers) + const maxSubjectLength = getMaxSubjectLength(answerType, answerScope, options) if (options.minSubjectLength && processedSubject.length < options.minSubjectLength) { return style.red( `[ERROR]subject length must be greater than or equal to ${options.minSubjectLength} characters`, @@ -148,8 +152,9 @@ export function generateQuestions(options: CommitizenGitOptions, cz: any) { transformer: (subject: string, answers: Answers) => { const { minSubjectLength, isIgnoreCheckMaxSubjectLength } = options const subjectLength = subject.length - const _answerType = resolveDefaultType(options, answers) - const maxSubjectLength = getMaxSubjectLength(_answerType, answers.scope, options) + const answerType = getAnswersType(options, answers) + const { answerScope } = getAnswersScope(options, answers) + const maxSubjectLength = getMaxSubjectLength(answerType, answerScope, options) let tooltip let isWarning = false if (typeof minSubjectLength === 'number' && subjectLength < minSubjectLength) { @@ -160,7 +165,9 @@ export function generateQuestions(options: CommitizenGitOptions, cz: any) { tooltip = `${subjectLength - maxSubjectLength} chars over the expected` isWarning = true } - else { tooltip = `${subjectLength - maxSubjectLength} chars over the limit` } + else { + tooltip = `${subjectLength - maxSubjectLength} chars over the limit` + } } else { tooltip = `${maxSubjectLength - subjectLength} more chars allowed` @@ -218,11 +225,11 @@ export function generateQuestions(options: CommitizenGitOptions, cz: any) { message: options.messages?.breaking, completeValue: options.defaultBody || undefined, when: (answers: Answers) => { - const _answerType = resolveDefaultType(options, answers) + const answerType = getAnswersType(options, answers) if ( options.allowBreakingChanges - && _answerType - && options.allowBreakingChanges.includes(_answerType) + && answerType + && options.allowBreakingChanges.includes(answerType) ) return true diff --git a/packages/cz-git/src/shared/utils/util.ts b/packages/cz-git/src/shared/utils/util.ts index ec84ea5ea..5eca81de9 100644 --- a/packages/cz-git/src/shared/utils/util.ts +++ b/packages/cz-git/src/shared/utils/util.ts @@ -60,9 +60,12 @@ export function isSingleItem(allowCustom = true, allowEmpty = true, list: Array< } /** - * @description: resolve AI modify mode and normal answer type and default type + * @description make sure can get answers type + * 1. normal answer type + * 2. resolve AI direct output mode + * 3. output default type */ -export function resolveDefaultType(options: CommitizenGitOptions, answer: Answers) { +export function getAnswersType(options: CommitizenGitOptions, answer: Answers) { if (!answer.type && options.useAI) return options.defaultType @@ -81,10 +84,16 @@ export function parseStandardScopes(scopes: ScopesType): Option[] { : { value: scope.value, name: scope.name } }) } - -export function getCurrentScopes(scopes?: any[], +/** + * @description To get a list of scopes + * 1. If have overrides by answerType, return the override list + * 2. If have scopes is empty, return empty array + */ +export function getScopesList( + scopes?: any[], scopeOverrides?: { [x: string]: any[] }, - answerType?: string) { + answerType?: string, +) { let result = [] if (scopeOverrides && answerType && scopeOverrides[answerType]) result = scopeOverrides[answerType] @@ -95,20 +104,21 @@ export function getCurrentScopes(scopes?: any[], return result } -function filterCustomEmptyByOption(target: { - name: string - value: any -}[], -allowCustom = true, -allowEmpty = true) { +function filterCustomEmptyByOption( + target: { + name: string + value: any + }[], + allowCustom = true, + allowEmpty = true, +) { target = allowCustom ? target : target.filter(i => i.value !== '___CUSTOM___') return allowEmpty ? target : target.filter(i => i.value !== false) } /** - * @description - * Handle custom list template (types, scopes) - * - * Add separator custom empty + * @description Handle custom list template (types, scopes) + * 1. Add separator, custom, empty + * 2. Sort target, empty and custom position */ export function resovleCustomListTemplate( target: Array<{ name: string; value: string }>, @@ -163,6 +173,18 @@ export function resovleCustomListTemplate( ) } +/** + * @description To get the scope of the answer + * 1. If scope is custom mode, return the input custom scope + * 2. If scope is input mode flag, return the input scope + */ +export function getAnswersScope(options: CommitizenGitOptions, answers: Answers) { + const isCustomScope = answers.scope === '___CUSTOM___' + const isInputMode = isString(options.defaultScope) && (options.defaultScope as string).startsWith('___CUSTOM___:') + const answerScope = (isCustomScope || isInputMode) ? answers.customScope : answers.scope + return { isCustomScope, isInputMode, answerScope } +} + /** * @description: get subject word */ @@ -180,7 +202,7 @@ function getEmojiStrLength(options: CommitizenGitOptions, type?: string): number * @description: get max subject length */ export function getMaxSubjectLength(type: Answers['type'], - scope: Answers['scope'], + scope: Answers['scope'] | Answers['customScope'], options: CommitizenGitOptions) { let optionMaxLength = Infinity if (Array.isArray(scope)) @@ -190,6 +212,7 @@ export function getMaxSubjectLength(type: Answers['type'], const emojiLength = options.useEmoji ? getEmojiStrLength(options, type) : 0 const maxHeaderLength = options?.maxHeaderLength ? options?.maxHeaderLength : Infinity const maxSubjectLength = options?.maxSubjectLength ? options?.maxSubjectLength : Infinity + if (options?.maxHeaderLength === 0 || options?.maxSubjectLength === 0) { return 0 } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index daddd8690..ef0bf7161 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,8 +73,8 @@ importers: specifier: ^1.1.1 version: 1.1.1 pnpm: - specifier: 9.0.0 - version: 9.0.0 + specifier: ^9.1.2 + version: 9.1.2 rimraf: specifier: 3.0.2 version: 3.0.2 @@ -144,10 +144,10 @@ importers: version: 7.1.1 unocss: specifier: ^0.56.1 - version: 0.56.4(postcss@8.4.30)(rollup@3.29.3)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4)) + version: 0.56.4(postcss@8.4.30)(rollup@2.79.1)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4)) unplugin-vue-components: specifier: ^0.25.2 - version: 0.25.2(@babel/parser@7.21.8)(rollup@3.29.3)(vue@3.3.4) + version: 0.25.2(@babel/parser@7.21.8)(rollup@2.79.1)(vue@3.3.4) vite: specifier: ^4.4.9 version: 4.4.9(@types/node@20.7.0)(terser@5.16.4) @@ -1795,6 +1795,7 @@ packages: acorn@8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} engines: {node: '>=0.4.0'} + hasBin: true add-stream@1.0.0: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} @@ -1971,6 +1972,7 @@ packages: bumpp@7.2.0: resolution: {integrity: sha512-vQxdpWe7VzdpV4dVjpWoGwTDrKZn4eqKVmjIYUlDgrmjesXAqJnWhu+VFxazoE4pLs1q5NwDhgzK1xAFL0K+Jg==} engines: {node: '>=10'} + hasBin: true bundle-require@4.0.1: resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} @@ -3071,6 +3073,7 @@ packages: js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} @@ -3569,8 +3572,8 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - pnpm@9.0.0: - resolution: {integrity: sha512-tBBnB8ciWxdIthWVlTzL6/+XtUrQXQAqo2NfYzucU81mb3zpuLxEcE8foEi5pJtVNxqy2enWZ9Hv4u8VFLzVEw==} + pnpm@9.1.2: + resolution: {integrity: sha512-En3IO56hDDK+ZdIqjvtKZfuVLo/vvf3tOb3DyX78MtMbSLAEIN8sEYes4oySHJAvDLWhNKTQMri1KVy/osaB4g==} engines: {node: '>=18.12'} hasBin: true @@ -3731,6 +3734,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true rollup-plugin-terser@7.0.2: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} @@ -3803,6 +3807,7 @@ packages: semver@7.3.7: resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} engines: {node: '>=10'} + hasBin: true semver@7.5.2: resolution: {integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==} @@ -3855,6 +3860,7 @@ packages: sitemap@7.1.1: resolution: {integrity: sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==} engines: {node: '>=12.0.0', npm: '>=5.6.0'} + hasBin: true slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} @@ -4446,6 +4452,7 @@ packages: which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} + hasBin: true why-is-node-running@2.2.2: resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} @@ -4476,6 +4483,7 @@ packages: workbox-google-analytics@7.0.0: resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} + deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained workbox-navigation-preload@7.0.0: resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} @@ -5930,21 +5938,21 @@ snapshots: picomatch: 2.3.1 rollup: 2.79.1 - '@rollup/pluginutils@5.0.2(rollup@3.29.3)': + '@rollup/pluginutils@5.0.2(rollup@2.79.1)': dependencies: '@types/estree': 1.0.0 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 3.29.3 + rollup: 2.79.1 - '@rollup/pluginutils@5.0.4(rollup@3.29.3)': + '@rollup/pluginutils@5.0.4(rollup@2.79.1)': dependencies: '@types/estree': 1.0.0 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 3.29.3 + rollup: 2.79.1 '@sinclair/typebox@0.27.8': {} @@ -6133,20 +6141,20 @@ snapshots: '@typescript-eslint/types': 5.59.6 eslint-visitor-keys: 3.4.1 - '@unocss/astro@0.56.4(rollup@3.29.3)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4))': + '@unocss/astro@0.56.4(rollup@2.79.1)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4))': dependencies: '@unocss/core': 0.56.4 '@unocss/reset': 0.56.4 - '@unocss/vite': 0.56.4(rollup@3.29.3)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4)) + '@unocss/vite': 0.56.4(rollup@2.79.1)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4)) optionalDependencies: vite: 4.4.9(@types/node@20.7.0)(terser@5.16.4) transitivePeerDependencies: - rollup - '@unocss/cli@0.56.4(rollup@3.29.3)': + '@unocss/cli@0.56.4(rollup@2.79.1)': dependencies: '@ampproject/remapping': 2.2.1 - '@rollup/pluginutils': 5.0.4(rollup@3.29.3) + '@rollup/pluginutils': 5.0.4(rollup@2.79.1) '@unocss/config': 0.56.4 '@unocss/core': 0.56.4 '@unocss/preset-uno': 0.56.4 @@ -6263,10 +6271,10 @@ snapshots: dependencies: '@unocss/core': 0.56.4 - '@unocss/vite@0.56.4(rollup@3.29.3)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4))': + '@unocss/vite@0.56.4(rollup@2.79.1)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4))': dependencies: '@ampproject/remapping': 2.2.1 - '@rollup/pluginutils': 5.0.4(rollup@3.29.3) + '@rollup/pluginutils': 5.0.4(rollup@2.79.1) '@unocss/config': 0.56.4 '@unocss/core': 0.56.4 '@unocss/inspector': 0.56.4 @@ -8361,7 +8369,7 @@ snapshots: pluralize@8.0.0: {} - pnpm@9.0.0: {} + pnpm@9.1.2: {} postcss-load-config@4.0.1(postcss@8.4.30)(ts-node@10.9.1(@types/node@20.7.0)(typescript@5.2.2)): dependencies: @@ -9019,10 +9027,10 @@ snapshots: universalify@2.0.0: {} - unocss@0.56.4(postcss@8.4.30)(rollup@3.29.3)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4)): + unocss@0.56.4(postcss@8.4.30)(rollup@2.79.1)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4)): dependencies: - '@unocss/astro': 0.56.4(rollup@3.29.3)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4)) - '@unocss/cli': 0.56.4(rollup@3.29.3) + '@unocss/astro': 0.56.4(rollup@2.79.1)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4)) + '@unocss/cli': 0.56.4(rollup@2.79.1) '@unocss/core': 0.56.4 '@unocss/extractor-arbitrary-variants': 0.56.4 '@unocss/postcss': 0.56.4(postcss@8.4.30) @@ -9040,7 +9048,7 @@ snapshots: '@unocss/transformer-compile-class': 0.56.4 '@unocss/transformer-directives': 0.56.4 '@unocss/transformer-variant-group': 0.56.4 - '@unocss/vite': 0.56.4(rollup@3.29.3)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4)) + '@unocss/vite': 0.56.4(rollup@2.79.1)(vite@4.4.9(@types/node@20.7.0)(terser@5.16.4)) optionalDependencies: vite: 4.4.9(@types/node@20.7.0)(terser@5.16.4) transitivePeerDependencies: @@ -9048,10 +9056,10 @@ snapshots: - rollup - supports-color - unplugin-vue-components@0.25.2(@babel/parser@7.21.8)(rollup@3.29.3)(vue@3.3.4): + unplugin-vue-components@0.25.2(@babel/parser@7.21.8)(rollup@2.79.1)(vue@3.3.4): dependencies: '@antfu/utils': 0.7.6 - '@rollup/pluginutils': 5.0.2(rollup@3.29.3) + '@rollup/pluginutils': 5.0.2(rollup@2.79.1) chokidar: 3.5.3 debug: 4.3.4 fast-glob: 3.3.1