{"_id":"@composy/logger-vue","name":"@composy/logger-vue","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@composy/logger-vue","type":"module","version":"0.0.1","description":"Vue 3 bindings for @composy/logger-core","author":{"name":"LDesign Team"},"license":"MIT","keywords":["ldesign","logger","vue","vue3","engine","error-tracking"],"sideEffects":false,"exports":{".":{"types":"./es/index.d.ts","import":"./es/index.js","require":"./lib/index.cjs","default":"./es/index.js"},"./components":{"types":"./es/components/index.d.ts","import":"./es/components/index.js","require":"./lib/components/index.cjs","default":"./es/components/index.js"},"./components/ErrorBoundary":{"types":"./es/components/errorBoundary.d.ts","import":"./es/components/errorBoundary.js","require":"./lib/components/errorBoundary.cjs","default":"./es/components/errorBoundary.js"},"./components/LogViewer":{"types":"./es/components/logViewer.d.ts","import":"./es/components/logViewer.js","require":"./lib/components/logViewer.cjs","default":"./es/components/logViewer.js"},"./components/error-boundary":{"types":"./es/components/errorBoundary.d.ts","import":"./es/components/errorBoundary.js","require":"./lib/components/errorBoundary.cjs","default":"./es/components/errorBoundary.js"},"./components/log-viewer":{"types":"./es/components/logViewer.d.ts","import":"./es/components/logViewer.js","require":"./lib/components/logViewer.cjs","default":"./es/components/logViewer.js"},"./components/*":{"types":"./es/components/*.d.ts","import":"./es/components/*.js","require":"./lib/components/*.cjs","default":"./es/components/*.js"},"./composables":{"types":"./es/composables/index.d.ts","import":"./es/composables/index.js","require":"./lib/composables/index.cjs","default":"./es/composables/index.js"},"./composables/use-error-tracking":{"types":"./es/composables/useErrorTracking.d.ts","import":"./es/composables/useErrorTracking.js","require":"./lib/composables/useErrorTracking.cjs","default":"./es/composables/useErrorTracking.js"},"./composables/use-logger":{"types":"./es/composables/useLogger.d.ts","import":"./es/composables/useLogger.js","require":"./lib/composables/useLogger.cjs","default":"./es/composables/useLogger.js"},"./composables/use-performance":{"types":"./es/composables/usePerformance.d.ts","import":"./es/composables/usePerformance.js","require":"./lib/composables/usePerformance.cjs","default":"./es/composables/usePerformance.js"},"./composables/*":{"types":"./es/composables/*.d.ts","import":"./es/composables/*.js","require":"./lib/composables/*.cjs","default":"./es/composables/*.js"},"./context":{"types":"./es/context/index.d.ts","import":"./es/context/index.js","require":"./lib/context/index.cjs","default":"./es/context/index.js"},"./context/*":{"types":"./es/context/*.d.ts","import":"./es/context/*.js","require":"./lib/context/*.cjs","default":"./es/context/*.js"},"./plugin":{"types":"./es/plugin/index.d.ts","import":"./es/plugin/index.js","require":"./lib/plugin/index.cjs","default":"./es/plugin/index.js"},"./plugin/create-logger":{"types":"./es/plugin/createLogger.d.ts","import":"./es/plugin/createLogger.js","require":"./lib/plugin/createLogger.cjs","default":"./es/plugin/createLogger.js"},"./plugin/create-logger-runtime":{"types":"./es/runtime/createLoggerRuntime.d.ts","import":"./es/runtime/createLoggerRuntime.js","require":"./lib/runtime/createLoggerRuntime.cjs","default":"./es/runtime/createLoggerRuntime.js"},"./plugin/install-logger-app":{"types":"./es/runtime/installLoggerApp.d.ts","import":"./es/runtime/installLoggerApp.js","require":"./lib/runtime/installLoggerApp.cjs","default":"./es/runtime/installLoggerApp.js"},"./plugin/native-plugin":{"types":"./es/plugin/nativePlugin.d.ts","import":"./es/plugin/nativePlugin.js","require":"./lib/plugin/nativePlugin.cjs","default":"./es/plugin/nativePlugin.js"},"./plugin/vue-plugin":{"types":"./es/plugin/nativePlugin.d.ts","import":"./es/plugin/nativePlugin.js","require":"./lib/plugin/nativePlugin.cjs","default":"./es/plugin/nativePlugin.js"},"./plugin/*":{"types":"./es/plugin/*.d.ts","import":"./es/plugin/*.js","require":"./lib/plugin/*.cjs","default":"./es/plugin/*.js"},"./plugins":{"types":"./es/plugins/index.d.ts","import":"./es/plugins/index.js","require":"./lib/plugins/index.cjs","default":"./es/plugins/index.js"},"./plugins/engine-plugin":{"types":"./es/plugins/enginePlugin.d.ts","import":"./es/plugins/enginePlugin.js","require":"./lib/plugins/enginePlugin.cjs","default":"./es/plugins/enginePlugin.js"},"./plugins/*":{"types":"./es/plugins/*.d.ts","import":"./es/plugins/*.js","require":"./lib/plugins/*.cjs","default":"./es/plugins/*.js"},"./runtime":{"types":"./es/runtime/index.d.ts","import":"./es/runtime/index.js","require":"./lib/runtime/index.cjs","default":"./es/runtime/index.js"},"./runtime/*":{"types":"./es/runtime/*.d.ts","import":"./es/runtime/*.js","require":"./lib/runtime/*.cjs","default":"./es/runtime/*.js"},"./types":{"types":"./es/types/index.d.ts","import":"./es/types/index.js","require":"./lib/types/index.cjs","default":"./es/types/index.js"},"./types/*":{"types":"./es/types/*.d.ts","import":"./es/types/*.js","require":"./lib/types/*.cjs","default":"./es/types/*.js"},"./package.json":"./package.json"},"main":"./lib/index.cjs","module":"./es/index.js","unpkg":"./dist/index.min.js","jsdelivr":"./dist/index.min.js","types":"./es/index.d.ts","scripts":{"build":"ldesign-builder build","postbuild":"node --experimental-strip-types ../../../../scripts/index.ts workspace:ensure-package-outputs --cwd .. --target vue","clean":"node -e \"const fs=require('fs'); ['es','esm','lib','dist','.tsbuildinfo'].forEach(d=>{try{fs.rmSync(d,{recursive:true,force:true})}catch{}})\"","lint":"eslint . --cache","lint:check":"eslint . --cache --max-warnings 0","lint:fix":"eslint . --cache --fix","test":"ltesting run:unit","test:run":"ltesting run:unit","test:watch":"ltesting run:unit --watch","test:coverage":"ltesting run:unit --coverage","test:changed":"ltesting run:unit --changed","test:failed":"ltesting run:unit --failed","test:ui":"ltesting dashboard","type-check":"tsc -p tsconfig.typecheck.json --noEmit"},"peerDependencies":{"vue":"^3.5.32","vue-router":">=4.0.0"},"peerDependenciesMeta":{"vue-router":{"optional":true}},"dependencies":{"@composy/logger-core":"^0.0.1"},"devDependencies":{"@antfu/eslint-config":"9.1.0","@composy/builder":"^0.0.1","@composy/testing":"^0.0.1","eslint":"10.7.0","typescript":"5.9.3","vue":"3.5.39"},"typings":"./es/index.d.ts","browser":"./dist/index.js","_id":"@composy/logger-vue@0.0.1","_nodeVersion":"23.11.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-436fdNXaNGvioX6ylpjyJuhmvV0qaNXueNZ8J4hEBepveUir3Y5w6mBsEe8siHh0tJt1NhSZ8zmhw34WVpKjDg==","shasum":"7bff7bd0cd4379cc2fef76ac922ed36dd7a38d0e","tarball":"https://registry.npmjs.org/@composy/logger-vue/-/logger-vue-0.0.1.tgz","fileCount":220,"unpackedSize":663225,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG0WJzisXNWS8SeDgEOWQi9JweLdPh2TTT4w5DJbMtAOAiEA2LDXIf9dmB+Z2tbS60qpoobk9A8w7dXMv0wqTnZIEW0="}]},"_npmUser":{"name":"swimly","email":"979741120@qq.com"},"directories":{},"maintainers":[{"name":"swimly","email":"979741120@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/logger-vue_0.0.1_1786948864293_0.2956619172323227"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-17T06:41:04.064Z","0.0.1":"2026-08-17T06:41:04.457Z","modified":"2026-08-17T06:41:04.758Z"},"maintainers":[{"name":"swimly","email":"979741120@qq.com"}],"description":"Vue 3 bindings for @composy/logger-core","keywords":["ldesign","logger","vue","vue3","engine","error-tracking"],"author":{"name":"LDesign Team"},"license":"MIT","readme":"# `@composy/logger-vue`\n\n`@composy/logger-vue` 是 `@composy/logger-core` 的 Vue 3 适配层，提供：\n\n- 原生 Vue Plugin 接入\n- `packages/engine` plugin 接入\n- `useLogger` / `useErrorTracking` / `usePerformance` 等 composables\n- `ErrorBoundary` / `LogViewer` 组件\n\n## 目录约定\n\n```text\nsrc\n├─ components       # Vue 组件\n├─ composables      # 组合式 API\n├─ plugin           # 原生 Vue 插件与统一安装器\n├─ plugins          # engine 插件\n└─ runtime          # Vue app 绑定、router 结构类型与运行时清理\n```\n\n## 设计说明\n\n- 原生 Vue Plugin 与 engine plugin 共用同一份 logger runtime。\n- app 安装逻辑统一收口在 `install-logger-app.ts`，避免重复维护\n  `provide`、`globalProperties`、错误处理器和路由接入。\n- 如果 engine 比 Vue app 更早创建，插件会在后续 `app:created` 时自动完成注入。\n- 如果 app 已经通过原生 Vue\n  Plugin 安装了 logger，engine 插件会复用已有 binding，而不是再创建第二套实例。\n- engine API 注册与 state 同步复用 `@composy/logger-core/engine`，Vue 层只补充\n  `errorTracker`、`performanceMonitor` 与 app 生命周期。\n- Router 接入使用 `LoggerRouterLike` 结构类型，因此 `vue-router` 是可选 peer；传入真实 Vue\n  Router 实例即可启用导航 breadcrumb 与路由错误追踪。\n\n## 原生 Vue Plugin 用法\n\n```ts\nimport { createConsoleTransport, createLoggerPlugin, LogLevel } from '@composy/logger-vue'\nimport { createApp } from 'vue'\nimport App from './App.vue'\n\nconst app = createApp(App)\n\napp.use(\n  createLoggerPlugin({\n    name: 'demo-app',\n    level: LogLevel.INFO,\n    enableVueErrorHandler: true,\n    enablePerformanceMonitoring: true,\n    transports: [createConsoleTransport({ level: LogLevel.DEBUG })],\n  })\n)\n\napp.mount('#app')\n```\n\n带路由追踪时直接传入真实 router：\n\n```ts\napp.use(\n  createLoggerPlugin({\n    router,\n    enableRouterTracking: true,\n  })\n)\n```\n\n## Engine Plugin 用法\n\n```ts\nimport { createLoggerEnginePlugin } from '@composy/logger-vue'\n\nengine.use(\n  createLoggerEnginePlugin({\n    name: 'logger',\n    registerApi: true,\n    enableRouterTracking: true,\n  })\n)\n```\n\n安装后可通过 engine state 获取：\n\n- `logger:instance`\n- `logger:config`\n- `logger:error-tracker`\n- `logger:performance-monitor`\n\n## Composables\n\n```ts\nimport {\n  useComponentLogger,\n  useErrorTracking,\n  useLogger,\n  usePerformance,\n} from '@composy/logger-vue'\n\nconst { info } = useLogger()\nconst componentLogger = useComponentLogger()\nconst { captureError } = useErrorTracking()\nconst { startTimer } = usePerformance()\n\ninfo('page mounted')\ncomponentLogger.warn('component warning')\n\nconst timer = startTimer('load-data')\nawait loadData()\ntimer.end()\n\ncaptureError(new Error('manual capture'))\n```\n\n## 组件\n\n```vue\n<script setup lang=\"ts\">\nimport { ErrorBoundary, LogViewer } from '@composy/logger-vue'\nimport { ref } from 'vue'\n\nconst logs = ref([])\n</script>\n\n<template>\n  <ErrorBoundary>\n    <SomeView />\n  </ErrorBoundary>\n\n  <LogViewer :logs=\"logs\" height=\"320px\" :show-export=\"true\" />\n</template>\n```\n\n## 开发命令\n\n```bash\npnpm --filter @composy/logger-vue type-check\npnpm --filter @composy/logger-vue lint:check\npnpm --filter @composy/logger-vue build\n```\n","readmeFilename":"README.md","_rev":"1-3b78e5d014ed5ef8b7d3c660508ed585"}