diff --git a/packages/applet/src/modules/pinia/components/Navbar.vue b/packages/applet/src/components/basic/Navbar.vue similarity index 100% rename from packages/applet/src/modules/pinia/components/Navbar.vue rename to packages/applet/src/components/basic/Navbar.vue diff --git a/packages/applet/src/modules/pinia/components/timeline/EventList.vue b/packages/applet/src/components/timeline/EventList.vue similarity index 100% rename from packages/applet/src/modules/pinia/components/timeline/EventList.vue rename to packages/applet/src/components/timeline/EventList.vue diff --git a/packages/applet/src/components/timeline/index.vue b/packages/applet/src/components/timeline/index.vue new file mode 100644 index 000000000..ca418019c --- /dev/null +++ b/packages/applet/src/components/timeline/index.vue @@ -0,0 +1,114 @@ + + + diff --git a/packages/applet/src/components/tree/TreeViewer.vue b/packages/applet/src/components/tree/TreeViewer.vue index 023d5275f..62c9d0539 100644 --- a/packages/applet/src/components/tree/TreeViewer.vue +++ b/packages/applet/src/components/tree/TreeViewer.vue @@ -1,5 +1,5 @@ diff --git a/packages/applet/src/modules/router/components/Navbar.vue b/packages/applet/src/modules/router/components/Navbar.vue deleted file mode 100644 index ca682b72d..000000000 --- a/packages/applet/src/modules/router/components/Navbar.vue +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/packages/applet/src/modules/router/components/routes/Index.vue b/packages/applet/src/modules/router/components/routes/Index.vue index 63e889b47..d0a01b3da 100644 --- a/packages/applet/src/modules/router/components/routes/Index.vue +++ b/packages/applet/src/modules/router/components/routes/Index.vue @@ -4,7 +4,7 @@ import { Pane, Splitpanes } from 'splitpanes' import { getInspectorState, getInspectorTree, onInspectorStateUpdated, onInspectorTreeUpdated } from '@vue/devtools-core' import { parse } from '@vue/devtools-kit' import type { InspectorNodeTag, InspectorState } from '@vue/devtools-kit' -import Navbar from '../Navbar.vue' +import Navbar from '~/components/basic/Navbar.vue' import SelectiveList from '~/components/basic/SelectiveList.vue' import DevToolsHeader from '~/components/basic/DevToolsHeader.vue' import Empty from '~/components/basic/Empty.vue' diff --git a/packages/applet/src/modules/router/components/timeline/EventList.vue b/packages/applet/src/modules/router/components/timeline/EventList.vue deleted file mode 100644 index 2e6204ad3..000000000 --- a/packages/applet/src/modules/router/components/timeline/EventList.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - diff --git a/packages/applet/src/modules/router/components/timeline/Index.vue b/packages/applet/src/modules/router/components/timeline/Index.vue index 11024f7c5..d0703ebcd 100644 --- a/packages/applet/src/modules/router/components/timeline/Index.vue +++ b/packages/applet/src/modules/router/components/timeline/Index.vue @@ -1,109 +1,9 @@ diff --git a/packages/applet/src/modules/vuex/components/DevToolsLogo.vue b/packages/applet/src/modules/vuex/components/DevToolsLogo.vue new file mode 100644 index 000000000..56d619261 --- /dev/null +++ b/packages/applet/src/modules/vuex/components/DevToolsLogo.vue @@ -0,0 +1,6 @@ + diff --git a/packages/applet/src/modules/vuex/components/Home.vue b/packages/applet/src/modules/vuex/components/Home.vue new file mode 100644 index 000000000..485d12aa1 --- /dev/null +++ b/packages/applet/src/modules/vuex/components/Home.vue @@ -0,0 +1,52 @@ + + + diff --git a/packages/applet/src/modules/vuex/components/store/Index.vue b/packages/applet/src/modules/vuex/components/store/Index.vue new file mode 100644 index 000000000..9c8a88712 --- /dev/null +++ b/packages/applet/src/modules/vuex/components/store/Index.vue @@ -0,0 +1,104 @@ + + + diff --git a/packages/applet/src/modules/vuex/components/timeline/Index.vue b/packages/applet/src/modules/vuex/components/timeline/Index.vue new file mode 100644 index 000000000..9eef0d567 --- /dev/null +++ b/packages/applet/src/modules/vuex/components/timeline/Index.vue @@ -0,0 +1,9 @@ + + + diff --git a/packages/applet/src/modules/vuex/index.ts b/packages/applet/src/modules/vuex/index.ts new file mode 100644 index 000000000..3f17c4d20 --- /dev/null +++ b/packages/applet/src/modules/vuex/index.ts @@ -0,0 +1,5 @@ +import Vuex from './index.vue' + +export { + Vuex, +} diff --git a/packages/applet/src/modules/vuex/index.vue b/packages/applet/src/modules/vuex/index.vue new file mode 100644 index 000000000..de428e526 --- /dev/null +++ b/packages/applet/src/modules/vuex/index.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/client/src/constants/tab.ts b/packages/client/src/constants/tab.ts index 43deedd5a..4cf4ea75b 100644 --- a/packages/client/src/constants/tab.ts +++ b/packages/client/src/constants/tab.ts @@ -49,7 +49,13 @@ export const builtinTab: [string, ModuleBuiltinTab[]][] = [ path: 'pinia', title: 'Pinia', }, - + { + icon: 'i-ic-baseline-storage', + name: 'vuex', + order: -100, + path: 'vuex', + title: 'vuex', + }, { icon: 'i-carbon-language', name: 'i18n', @@ -79,6 +85,7 @@ type Detective = NonNullable const moduleDetectivesMapping = { pinia: 'pinia', + vuex: 'vuex', router: 'vueRouter', i18n: 'vueI18n', } satisfies Record diff --git a/packages/client/src/main.ts b/packages/client/src/main.ts index c012b13e1..cc9969eb9 100644 --- a/packages/client/src/main.ts +++ b/packages/client/src/main.ts @@ -11,6 +11,7 @@ import App from './App.vue' import Components from '~/pages/components.vue' import Overview from '~/pages/overview.vue' import PiniaPage from '~/pages/pinia.vue' +import VuexPage from '~/pages/vuex.vue' import RouterPage from '~/pages/router.vue' import I18nPage from '~/pages/i18n.vue' import Pages from '~/pages/pages.vue' @@ -29,6 +30,7 @@ const routes = [ { path: '/overview', component: Overview }, { path: '/components', component: Components }, { path: '/pinia', component: PiniaPage }, + { path: '/vuex', component: VuexPage }, { path: '/router', component: RouterPage }, { path: '/i18n', component: I18nPage }, { path: '/pages', component: Pages }, diff --git a/packages/client/src/pages/vuex.vue b/packages/client/src/pages/vuex.vue new file mode 100644 index 000000000..428f7a8b0 --- /dev/null +++ b/packages/client/src/pages/vuex.vue @@ -0,0 +1,8 @@ + + + diff --git a/packages/core/src/bridge-events/devtools-listeners.ts b/packages/core/src/bridge-events/devtools-listeners.ts index a9376ed50..bed3f6b30 100644 --- a/packages/core/src/bridge-events/devtools-listeners.ts +++ b/packages/core/src/bridge-events/devtools-listeners.ts @@ -64,6 +64,18 @@ export const onInspectorStateUpdated = defineDevToolsListener<{ inspectorId: str }) }) +export const onComponentUpdated = defineDevToolsListener<{ inspectorId: string, state?: InspectorState[], getters?: InspectorState[] }>('devtools:on-component-updated', (devtools, callback) => { + devtools.api.on.componentUpdated(() => { + callback() + }) +}) + +export const onEditInspectorState = defineDevToolsListener<{ inspectorId: string, state?: InspectorState[], getters?: InspectorState[] }>('devtools:on-edit-inspector-state', (devtools, callback) => { + devtools.api.on.editInspectorState(async (payload) => { + await callback(payload) + }) +}) + export const onRouterInfoUpdated = defineDevToolsListener('devtools:on-router-info-updated', (devtools, callback) => { devtools.api.on.routerInfoUpdated((payload) => { callback(payload) diff --git a/packages/devtools-kit/src/api/plugin.ts b/packages/devtools-kit/src/api/plugin.ts index b237ee309..75779b5c4 100644 --- a/packages/devtools-kit/src/api/plugin.ts +++ b/packages/devtools-kit/src/api/plugin.ts @@ -53,6 +53,7 @@ export function registerPlugin(app: App, api: DevToolsPluginApi) { vueRouter: !!globalProperties.$router, pinia: !!globalProperties.$pinia, vueI18n: !!globalProperties.$i18n, + vuex: !!globalProperties.$store, }, } }) diff --git a/packages/devtools-kit/src/core/component/types/state.ts b/packages/devtools-kit/src/core/component/types/state.ts index def1d55e0..c3a260f04 100644 --- a/packages/devtools-kit/src/core/component/types/state.ts +++ b/packages/devtools-kit/src/core/component/types/state.ts @@ -17,7 +17,7 @@ export interface InspectorState { key: string value: string | number | boolean | null | Record | InspectorCustomState | Array type: string - path: string[] + path?: string[] stateType?: string stateTypeName?: string meta?: Record diff --git a/packages/devtools-kit/src/core/component/types/tree.ts b/packages/devtools-kit/src/core/component/types/tree.ts index d649a3c1c..0ad4da2ed 100644 --- a/packages/devtools-kit/src/core/component/types/tree.ts +++ b/packages/devtools-kit/src/core/component/types/tree.ts @@ -28,3 +28,10 @@ export interface InspectorTreeApiPayload { instanceId?: string rootNodes?: ComponentTreeNode[] } + +export interface InspectorTree { + id: string + label: string + tags?: InspectorNodeTag[] + children?: InspectorTree[] +} diff --git a/packages/devtools-kit/src/types/app.ts b/packages/devtools-kit/src/types/app.ts index 0acb925c6..0fd02408f 100644 --- a/packages/devtools-kit/src/types/app.ts +++ b/packages/devtools-kit/src/types/app.ts @@ -96,6 +96,7 @@ export interface AppRecord { moduleDetectives?: { vueRouter: boolean pinia: boolean + vuex: boolean vueI18n: boolean } } diff --git a/packages/playground/basic/package.json b/packages/playground/basic/package.json index c8676c513..59462c836 100644 --- a/packages/playground/basic/package.json +++ b/packages/playground/basic/package.json @@ -11,7 +11,8 @@ "pinia": "^2.1.7", "unplugin-auto-import": "^0.17.5", "vue": "^3.4.26", - "vue-router": "^4.3.2" + "vue-router": "^4.3.2", + "vuex": "^4.1.0" }, "devDependencies": { "@vitejs/plugin-vue": "^5.0.4", diff --git a/packages/playground/basic/src/main.ts b/packages/playground/basic/src/main.ts index 5de0b4d05..e21dc1138 100644 --- a/packages/playground/basic/src/main.ts +++ b/packages/playground/basic/src/main.ts @@ -1,6 +1,7 @@ import { createPinia } from 'pinia' import type { RouteRecordRaw } from 'vue-router' import { createRouter, createWebHistory } from 'vue-router' +import store from './stores/vuexStore' import App from './App.vue' @@ -43,6 +44,8 @@ const router = createRouter({ // setTimeout(() => { app.use(router) app.use(pinia) +app.use(store) + app.mount('#app') // }, 2000) diff --git a/packages/playground/basic/src/pages/Hey.vue b/packages/playground/basic/src/pages/Hey.vue index ccdfed58c..0e239f951 100644 --- a/packages/playground/basic/src/pages/Hey.vue +++ b/packages/playground/basic/src/pages/Hey.vue @@ -1,8 +1,10 @@ diff --git a/packages/playground/basic/src/stores/vuexStore.ts b/packages/playground/basic/src/stores/vuexStore.ts new file mode 100644 index 000000000..3a70a643a --- /dev/null +++ b/packages/playground/basic/src/stores/vuexStore.ts @@ -0,0 +1,38 @@ +import { createStore } from 'vuex' + +export default createStore({ + state: { + counter: 0, + }, + mutations: { + increment(state) { + state.counter++ + }, + }, + actions: { + doubleIncrement({ commit }) { + commit('increment') + commit('increment') + }, + }, + modules: { + namespacedModule: { + namespaced: true, + state: () => ({ + value: 'Hello, Vuex', + }), + getters: { + exclamation(state) { + return `${state.value}!!!!!!!` + }, + }, + modules: { + unnamespacedModule: { + state: () => ({ + value: 'unnamespacedModule', + }), + }, + }, + }, + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4ec4bcb8c..8494417b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -547,6 +547,9 @@ importers: vue-router: specifier: ^4.3.2 version: 4.3.2(vue@3.4.26(typescript@5.4.5)) + vuex: + specifier: ^4.1.0 + version: 4.1.0(vue@3.4.26(typescript@5.4.5)) devDependencies: '@vitejs/plugin-vue': specifier: ^5.0.4 @@ -8239,6 +8242,11 @@ packages: typescript: optional: true + vuex@4.1.0: + resolution: {integrity: sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==} + peerDependencies: + vue: ^3.2.0 + w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -17012,6 +17020,11 @@ snapshots: optionalDependencies: typescript: 5.4.5 + vuex@4.1.0(vue@3.4.26(typescript@5.4.5)): + dependencies: + '@vue/devtools-api': 6.5.1 + vue: 3.4.26(typescript@5.4.5) + w3c-keyname@2.2.8: {} w3c-xmlserializer@4.0.0: