From 7a457b1df17281af6f70c5e970704695135c5357 Mon Sep 17 00:00:00 2001 From: arlo Date: Tue, 18 Jun 2024 12:45:00 +0800 Subject: [PATCH] fix(kit): prevent duplicate registration of devtool plugin --- packages/devtools-kit/src/core/index.ts | 6 +- .../devtools-kit/src/core/plugin/index.ts | 18 +- packages/devtools-kit/src/ctx/api.ts | 2 + packages/playground/basic/package.json | 1 + packages/playground/basic/src/main.ts | 5 +- packages/playground/basic/vite.config.ts | 3 +- pnpm-lock.yaml | 198 +++++++++++++++++- 7 files changed, 217 insertions(+), 16 deletions(-) diff --git a/packages/devtools-kit/src/core/index.ts b/packages/devtools-kit/src/core/index.ts index 3913e3bb..9bde0f87 100644 --- a/packages/devtools-kit/src/core/index.ts +++ b/packages/devtools-kit/src/core/index.ts @@ -18,7 +18,7 @@ import { import { onLegacyDevToolsPluginApiAvailable } from '../compat' import { DevToolsHooks } from '../types' import { createAppRecord, removeAppRecordId } from './app' -import { callDevToolsPluginSetupFn, createComponentsDevToolsPlugin, registerDevToolsPlugin, setupDevToolsPlugin } from './plugin' +import { callDevToolsPluginSetupFn, createComponentsDevToolsPlugin, registerDevToolsPlugin, removeRegisteredPluginApp, setupDevToolsPlugin } from './plugin' import { normalizeRouterInfo } from './router' export function initDevTools() { @@ -74,10 +74,9 @@ export function initDevTools() { setActiveAppRecord(normalizedAppRecord) setActiveAppRecordId(normalizedAppRecord.id) normalizeRouterInfo(normalizedAppRecord, activeAppRecord) + registerDevToolsPlugin(normalizedAppRecord.app) } - setupDevToolsPlugin(...createComponentsDevToolsPlugin(normalizedAppRecord.app)) - registerDevToolsPlugin(normalizedAppRecord.app) updateDevToolsState({ connected: true, @@ -104,6 +103,7 @@ export function initDevTools() { devtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT) } target.__VUE_DEVTOOLS_GLOBAL_HOOK__.apps.splice(target.__VUE_DEVTOOLS_GLOBAL_HOOK__.apps.indexOf(app), 1) + removeRegisteredPluginApp(app) }) subscribeDevToolsHook() diff --git a/packages/devtools-kit/src/core/plugin/index.ts b/packages/devtools-kit/src/core/plugin/index.ts index b5ec8f40..3c1d5177 100644 --- a/packages/devtools-kit/src/core/plugin/index.ts +++ b/packages/devtools-kit/src/core/plugin/index.ts @@ -1,3 +1,4 @@ +import { target } from '@vue/devtools-shared' import { App, PluginDescriptor, PluginSetupFunction } from '../../types' import { hook } from '../../hook' import { devtoolsContext, devtoolsPluginBuffer } from '../../ctx' @@ -5,15 +6,16 @@ import { DevToolsPluginAPI } from '../../api' export * from './components' +target.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__ ??= new Set() + export function setupDevToolsPlugin(pluginDescriptor: PluginDescriptor, setupFn: PluginSetupFunction) { return hook.setupDevToolsPlugin(pluginDescriptor, setupFn) } export function callDevToolsPluginSetupFn(plugin: [PluginDescriptor, PluginSetupFunction], app: App) { const [pluginDescriptor, setupFn] = plugin - // @TODO: need check - // if (pluginDescriptor.app !== app) - // return + if (pluginDescriptor.app !== app) + return const api = new DevToolsPluginAPI({ plugin: { @@ -32,7 +34,17 @@ export function callDevToolsPluginSetupFn(plugin: [PluginDescriptor, PluginSetup setupFn(api) } + +export function removeRegisteredPluginApp(app: App) { + target.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.delete(app) +} + export function registerDevToolsPlugin(app: App) { + if (target.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.has(app)) + return + + target.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.add(app) + devtoolsPluginBuffer.forEach((plugin) => { callDevToolsPluginSetupFn(plugin, app) }) diff --git a/packages/devtools-kit/src/ctx/api.ts b/packages/devtools-kit/src/ctx/api.ts index b431af99..da9276e7 100644 --- a/packages/devtools-kit/src/ctx/api.ts +++ b/packages/devtools-kit/src/ctx/api.ts @@ -8,6 +8,7 @@ import { getRootElementsFromComponentInstance } from '../core/component/tree/el' import { openInEditor } from '../core/open-in-editor' import { normalizeRouterInfo } from '../core/router' import { getComponentInspector } from '../core/component-inspector' +import { registerDevToolsPlugin } from '../core/plugin' import type { DevToolsContextHooks, DevToolsMessagingHooks, DevToolsV6PluginAPIHookPayloads } from './hook' import { DevToolsContextHookKeys, DevToolsV6PluginAPIHookKeys } from './hook' import { activeAppRecord, devtoolsAppRecords, setActiveAppRecord, setActiveAppRecordId } from './state' @@ -108,6 +109,7 @@ export function createDevToolsApi(hooks: Hookable=0.1.90'} + '@ctrl/tinycolor@3.6.1': + resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==} + engines: {node: '>=10'} + '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} @@ -1728,6 +1735,11 @@ packages: resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} + '@element-plus/icons-vue@2.3.1': + resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} + peerDependencies: + vue: ^3.2.0 + '@es-joy/jsdoccomment@0.43.1': resolution: {integrity: sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==} engines: {node: '>=16'} @@ -2758,6 +2770,9 @@ packages: '@swc/types@0.1.8': resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==} + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -2975,6 +2990,9 @@ packages: '@types/unist@2.0.10': resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} @@ -3381,6 +3399,9 @@ packages: '@vueuse/core@10.10.0': resolution: {integrity: sha512-vexJ/YXYs2S42B783rI95lMt3GzEwkxzC8Hb0Ndpd8rD+p+Lk/Za4bd797Ym7yq4jXqdSyj3JLChunF/vyYjUw==} + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + '@vueuse/integrations@10.10.0': resolution: {integrity: sha512-vHGeK7X6mkdkpcm1eE9t3Cpm21pNVfZRwrjwwbrEs9XftnSgszF4831G2rei8Dt9cIYJIfFV+iyx/29muimJPQ==} peerDependencies: @@ -3425,9 +3446,15 @@ packages: '@vueuse/metadata@10.10.0': resolution: {integrity: sha512-UNAo2sTCAW5ge6OErPEHb5z7NEAg3XcO9Cj7OK45aZXfLLH1QkexDcZD77HBi5zvEiLOm1An+p/4b5K3Worpug==} + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + '@vueuse/shared@10.10.0': resolution: {integrity: sha512-2aW33Ac0Uk0U+9yo3Ypg9s5KcR42cuehRWl7vnUHadQyFvCktseyxxEPBi1Eiq4D2yBGACOnqLZpx1eMc7g5Og==} + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + '@webassemblyjs/ast@1.11.6': resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} @@ -3647,6 +3674,9 @@ packages: assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} @@ -4666,6 +4696,11 @@ packages: engines: {node: '>= 12.20.55'} hasBin: true + element-plus@2.7.5: + resolution: {integrity: sha512-e4oqhfRGBpdblgsjEBK+tA2+fg1H1KZ2Qinty1SaJl0X49FrMLK0lpXQNheWyBqI4V/pyjVOF9sRjz2hfyoctw==} + peerDependencies: + vue: ^3.2.0 + emoji-regex@10.3.0: resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} @@ -6000,6 +6035,13 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -6140,6 +6182,9 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} @@ -6405,6 +6450,9 @@ packages: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + npm-bundled@2.0.1: resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -9666,6 +9714,8 @@ snapshots: '@colors/colors@1.5.0': optional: true + '@ctrl/tinycolor@3.6.1': {} + '@discoveryjs/json-ext@0.5.7': {} '@docsearch/css@3.6.0': {} @@ -9716,6 +9766,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@element-plus/icons-vue@2.3.1(vue@3.4.27(typescript@5.4.5))': + dependencies: + vue: 3.4.27(typescript@5.4.5) + '@es-joy/jsdoccomment@0.43.1': dependencies: '@types/eslint': 8.56.10 @@ -10553,6 +10607,8 @@ snapshots: '@swc/counter': 0.1.3 optional: true + '@sxzz/popperjs-es@2.11.7': {} + '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 @@ -10793,6 +10849,8 @@ snapshots: '@types/unist@2.0.10': {} + '@types/web-bluetooth@0.0.16': {} + '@types/web-bluetooth@0.0.20': {} '@types/webxr@0.5.16': {} @@ -10889,6 +10947,16 @@ snapshots: '@ungap/structured-clone@1.2.0': {} + '@unocss/astro@0.60.4(rollup@3.28.1)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0))': + dependencies: + '@unocss/core': 0.60.4 + '@unocss/reset': 0.60.4 + '@unocss/vite': 0.60.4(rollup@3.28.1)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0)) + optionalDependencies: + vite: 5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0) + transitivePeerDependencies: + - rollup + '@unocss/astro@0.60.4(rollup@4.13.0)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0))': dependencies: '@unocss/core': 0.60.4 @@ -10899,6 +10967,24 @@ snapshots: transitivePeerDependencies: - rollup + '@unocss/cli@0.60.4(rollup@3.28.1)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@rollup/pluginutils': 5.1.0(rollup@3.28.1) + '@unocss/config': 0.60.4 + '@unocss/core': 0.60.4 + '@unocss/preset-uno': 0.60.4 + cac: 6.7.14 + chokidar: 3.6.0 + colorette: 2.0.20 + consola: 3.2.3 + fast-glob: 3.3.2 + magic-string: 0.30.10 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + transitivePeerDependencies: + - rollup + '@unocss/cli@0.60.4(rollup@4.13.0)': dependencies: '@ampproject/remapping': 2.3.0 @@ -11044,6 +11130,22 @@ snapshots: dependencies: '@unocss/core': 0.60.4 + '@unocss/vite@0.60.4(rollup@3.28.1)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@rollup/pluginutils': 5.1.0(rollup@3.28.1) + '@unocss/config': 0.60.4 + '@unocss/core': 0.60.4 + '@unocss/inspector': 0.60.4 + '@unocss/scope': 0.60.4 + '@unocss/transformer-directives': 0.60.4 + chokidar: 3.6.0 + fast-glob: 3.3.2 + magic-string: 0.30.10 + vite: 5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0) + transitivePeerDependencies: + - rollup + '@unocss/vite@0.60.4(rollup@4.13.0)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0))': dependencies: '@ampproject/remapping': 2.3.0 @@ -11622,12 +11724,23 @@ snapshots: - '@vue/composition-api' - vue - '@vueuse/integrations@10.10.0(change-case@4.1.2)(focus-trap@7.5.4)(fuse.js@7.0.0)(vue@3.4.27(typescript@5.4.5))': + '@vueuse/core@9.13.0(vue@3.4.27(typescript@5.4.5))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.4.27(typescript@5.4.5)) + vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/integrations@10.10.0(async-validator@4.2.5)(change-case@4.1.2)(focus-trap@7.5.4)(fuse.js@7.0.0)(vue@3.4.27(typescript@5.4.5))': dependencies: '@vueuse/core': 10.10.0(vue@3.4.27(typescript@5.4.5)) '@vueuse/shared': 10.10.0(vue@3.4.27(typescript@5.4.5)) vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5)) optionalDependencies: + async-validator: 4.2.5 change-case: 4.1.2 focus-trap: 7.5.4 fuse.js: 7.0.0 @@ -11637,6 +11750,8 @@ snapshots: '@vueuse/metadata@10.10.0': {} + '@vueuse/metadata@9.13.0': {} + '@vueuse/shared@10.10.0(vue@3.4.27(typescript@5.4.5))': dependencies: vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5)) @@ -11644,6 +11759,13 @@ snapshots: - '@vue/composition-api' - vue + '@vueuse/shared@9.13.0(vue@3.4.27(typescript@5.4.5))': + dependencies: + vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + '@webassemblyjs/ast@1.11.6': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 @@ -11891,6 +12013,8 @@ snapshots: assertion-error@1.1.0: {} + async-validator@4.2.5: {} + async@2.6.4: dependencies: lodash: 4.17.21 @@ -12795,6 +12919,27 @@ snapshots: transitivePeerDependencies: - supports-color + element-plus@2.7.5(vue@3.4.27(typescript@5.4.5)): + dependencies: + '@ctrl/tinycolor': 3.6.1 + '@element-plus/icons-vue': 2.3.1(vue@3.4.27(typescript@5.4.5)) + '@floating-ui/dom': 1.1.1 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.0 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.4.27(typescript@5.4.5)) + async-validator: 4.2.5 + dayjs: 1.11.11 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.4.27(typescript@5.4.5) + transitivePeerDependencies: + - '@vue/composition-api' + emoji-regex@10.3.0: {} emoji-regex@8.0.0: {} @@ -14513,6 +14658,12 @@ snapshots: lodash-es@4.17.21: {} + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash.debounce@4.0.8: {} lodash.defaultsdeep@4.6.1: {} @@ -14653,6 +14804,8 @@ snapshots: dependencies: fs-monkey: 1.0.5 + memoize-one@6.0.0: {} + memorystream@0.3.1: {} merge-descriptors@1.0.1: {} @@ -14865,6 +15018,8 @@ snapshots: normalize-url@6.1.0: {} + normalize-wheel-es@1.2.0: {} + npm-bundled@2.0.1: dependencies: npm-normalize-package-bin: 2.0.0 @@ -16527,6 +16682,35 @@ snapshots: universalify@2.0.1: {} + unocss@0.60.4(postcss@8.4.38)(rollup@3.28.1)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0)): + dependencies: + '@unocss/astro': 0.60.4(rollup@3.28.1)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0)) + '@unocss/cli': 0.60.4(rollup@3.28.1) + '@unocss/core': 0.60.4 + '@unocss/extractor-arbitrary-variants': 0.60.4 + '@unocss/postcss': 0.60.4(postcss@8.4.38) + '@unocss/preset-attributify': 0.60.4 + '@unocss/preset-icons': 0.60.4 + '@unocss/preset-mini': 0.60.4 + '@unocss/preset-tagify': 0.60.4 + '@unocss/preset-typography': 0.60.4 + '@unocss/preset-uno': 0.60.4 + '@unocss/preset-web-fonts': 0.60.4 + '@unocss/preset-wind': 0.60.4 + '@unocss/reset': 0.60.4 + '@unocss/transformer-attributify-jsx': 0.60.4 + '@unocss/transformer-attributify-jsx-babel': 0.60.4 + '@unocss/transformer-compile-class': 0.60.4 + '@unocss/transformer-directives': 0.60.4 + '@unocss/transformer-variant-group': 0.60.4 + '@unocss/vite': 0.60.4(rollup@3.28.1)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0)) + optionalDependencies: + vite: 5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0) + transitivePeerDependencies: + - postcss + - rollup + - supports-color + unocss@0.60.4(postcss@8.4.38)(rollup@4.13.0)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0)): dependencies: '@unocss/astro': 0.60.4(rollup@4.13.0)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)(terser@5.26.0)) @@ -16809,7 +16993,7 @@ snapshots: sass: 1.77.4 terser: 5.26.0 - vitepress@1.2.3(@algolia/client-search@4.22.0)(@types/node@20.14.2)(change-case@4.1.2)(fuse.js@7.0.0)(postcss@8.4.38)(sass@1.77.4)(search-insights@2.13.0)(terser@5.26.0)(typescript@5.4.5): + vitepress@1.2.3(@algolia/client-search@4.22.0)(@types/node@20.14.2)(async-validator@4.2.5)(change-case@4.1.2)(fuse.js@7.0.0)(postcss@8.4.38)(sass@1.77.4)(search-insights@2.13.0)(terser@5.26.0)(typescript@5.4.5): dependencies: '@docsearch/css': 3.6.0 '@docsearch/js': 3.6.0(@algolia/client-search@4.22.0)(search-insights@2.13.0) @@ -16820,7 +17004,7 @@ snapshots: '@vue/devtools-api': 7.2.1(vue@3.4.27(typescript@5.4.5)) '@vue/shared': 3.4.27 '@vueuse/core': 10.10.0(vue@3.4.27(typescript@5.4.5)) - '@vueuse/integrations': 10.10.0(change-case@4.1.2)(focus-trap@7.5.4)(fuse.js@7.0.0)(vue@3.4.27(typescript@5.4.5)) + '@vueuse/integrations': 10.10.0(async-validator@4.2.5)(change-case@4.1.2)(focus-trap@7.5.4)(fuse.js@7.0.0)(vue@3.4.27(typescript@5.4.5)) focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.3.0