{"_id":"@c-a-f/infrastructure-vue","_rev":"2-be2f8daddfd02d930fe9bb1c8ffaab59","name":"@c-a-f/infrastructure-vue","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@c-a-f/infrastructure-vue","version":"1.0.0","keywords":["clean-architecture-frontend","clean-architecture","caf","infrastructure","vue","routing"],"author":{"name":"ali aslani","email":"aliaslani.mm@gmail.com"},"license":"MIT","_id":"@c-a-f/infrastructure-vue@1.0.0","maintainers":[{"name":"ialiaslani","email":"aliaslani.mm@gmail.com"}],"homepage":"https://github.com/ialiaslani/caf#readme","bugs":{"url":"https://github.com/ialiaslani/caf/issues"},"dist":{"shasum":"149913f779b15d7307cec30badd1bf8e920217f3","tarball":"https://registry.npmjs.org/@c-a-f/infrastructure-vue/-/infrastructure-vue-1.0.0.tgz","fileCount":42,"integrity":"sha512-ncLO4upA1JdpR5KkM95RHRnwfkS2278QAyLcvFyQZDGiyNPhM9WofFgOjLvjqHMESl0KP9BVILLM/Qc89cVkcg==","signatures":[{"sig":"MEUCIHILbHW+po+AYvOTL8sMZTl8gpYAY01JZQXMUglzUaQ/AiEA4Qrudd/BCQvINzRMGrRwSxF5IdTDLrf34Zk6S4zG/ig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32129},"main":"./.build/index.js","type":"module","types":"./.build/index.d.ts","module":"./.build/index.js","exports":{".":{"node":"./.build/index.js","types":"./.build/index.d.ts","import":"./.build/index.js","default":"./.build/index.js"}},"gitHead":"ca2feba4757534a4a130717ea50c4df2e2ff01e6","scripts":{"test":"vitest run","build":"tsc --build","start":"tsc --watch","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"ialiaslani","email":"aliaslani.mm@gmail.com"},"repository":{"url":"git+https://github.com/ialiaslani/caf.git","type":"git"},"_npmVersion":"10.9.2","description":"Vue-specific infrastructure adapters for CAF (routing, usePloc, useUseCase, CAFProvider, CAFErrorBoundary, DevTools).","directories":{},"_nodeVersion":"22.13.0","dependencies":{"vue-router":"^4.4.3","@c-a-f/core":"1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.1.0","happy-dom":"^15.11.7"},"peerDependencies":{"vue":">=3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/infrastructure-vue_1.0.0_1771671172868_0.8098357626219814","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@c-a-f/infrastructure-vue","type":"module","version":"1.0.1","description":"Vue-specific infrastructure adapters for CAF (routing, usePloc, useUseCase, CAFProvider, CAFErrorBoundary, DevTools).","keywords":["clean-architecture-frontend","clean-architecture","caf","infrastructure","vue","routing"],"author":{"name":"ali aslani","email":"aliaslani.mm@gmail.com"},"license":"MIT","homepage":"https://docs-caf.vercel.app/docs/packages/infrastructure-vue","repository":{"type":"git","url":"git+https://github.com/ialiaslani/caf.git"},"main":"./.build/index.js","module":"./.build/index.js","types":"./.build/index.d.ts","exports":{".":{"types":"./.build/index.d.ts","import":"./.build/index.js","node":"./.build/index.js","default":"./.build/index.js"}},"scripts":{"build":"tsc --build","start":"tsc --watch","prepublishOnly":"npm run build","test":"vitest run","test:watch":"vitest"},"dependencies":{"@c-a-f/core":"1.0.3","vue-router":"^4.4.3"},"peerDependencies":{"vue":">=3.0.0"},"devDependencies":{"happy-dom":"^15.11.7","vitest":"^2.1.0"},"_id":"@c-a-f/infrastructure-vue@1.0.1","gitHead":"c754b6d68b1a5b1196bb202e70c962ea7c3de87e","bugs":{"url":"https://github.com/ialiaslani/caf/issues"},"_nodeVersion":"22.13.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-L6yhj9W3QZQE9UPMGsd0vy2gBLP8T+NUfxHhnRXqjZ7494sPxA07oyaxU5wFlE6LvrLjXj80Cy7G0vzXGLyViA==","shasum":"e7107440d7d28bf617d64ccc187766f6660b54e0","tarball":"https://registry.npmjs.org/@c-a-f/infrastructure-vue/-/infrastructure-vue-1.0.1.tgz","fileCount":42,"unpackedSize":32306,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCFTzkIw2VmargVqEe07oCRNVobSqb+M5r3sZ9DEff/mQIgQKZdtLhZVj2wIGSduWXKrsjdNy6JO32CDQ74lVhREVE="}]},"_npmUser":{"name":"ialiaslani","email":"aliaslani.mm@gmail.com"},"directories":{},"maintainers":[{"name":"ialiaslani","email":"aliaslani.mm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/infrastructure-vue_1.0.1_1771679962131_0.20786004582484252"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-21T10:52:52.780Z","modified":"2026-02-21T13:19:22.413Z","1.0.0":"2026-02-21T10:52:53.001Z","1.0.1":"2026-02-21T13:19:22.287Z"},"bugs":{"url":"https://github.com/ialiaslani/caf/issues"},"author":{"name":"ali aslani","email":"aliaslani.mm@gmail.com"},"license":"MIT","homepage":"https://docs-caf.vercel.app/docs/packages/infrastructure-vue","keywords":["clean-architecture-frontend","clean-architecture","caf","infrastructure","vue","routing"],"repository":{"type":"git","url":"git+https://github.com/ialiaslani/caf.git"},"description":"Vue-specific infrastructure adapters for CAF (routing, usePloc, useUseCase, CAFProvider, CAFErrorBoundary, DevTools).","maintainers":[{"name":"ialiaslani","email":"aliaslani.mm@gmail.com"}],"readme":"# @c-a-f/infrastructure-vue\r\n\r\nVue-specific infrastructure adapters for CAF (Clean Architecture Frontend).\r\n\r\n**Documentation:** [@c-a-f/infrastructure-vue docs](https://docs-caf.vercel.app/docs/packages/infrastructure-vue)\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @c-a-f/infrastructure-vue vue vue-router\r\n```\r\n\r\n## Usage\r\n\r\n### usePloc\r\n\r\nComposable that subscribes to a Ploc and returns reactive state and the Ploc instance:\r\n\r\n```vue\r\n<script setup lang=\"ts\">\r\nimport { usePloc } from '@c-a-f/infrastructure-vue';\r\n\r\nconst [state, userPloc] = usePloc(userPloc);\r\nawait userPloc.loadUsers();\r\n</script>\r\n<template>\r\n  <span>{{ state.users?.length }}</span>\r\n</template>\r\n```\r\n\r\n### useUseCase\r\n\r\nComposable that wraps a UseCase with loading/error/data refs:\r\n\r\n```vue\r\n<script setup lang=\"ts\">\r\nimport { useUseCase } from '@c-a-f/infrastructure-vue';\r\n\r\nconst { execute, loading, error, data } = useUseCase(createUserUseCase);\r\nconst handleCreate = async () => {\r\n  const result = await execute({ name: 'John' });\r\n  if (result) console.log(result);\r\n};\r\n</script>\r\n```\r\n\r\n### CAFProvider and context\r\n\r\nRegister Plocs/UseCases at the root and access them by key:\r\n\r\n```vue\r\n<!-- main.ts or root component -->\r\nimport { CAFProvider, CAFErrorBoundary } from '@c-a-f/infrastructure-vue';\r\n\r\nh(CAFErrorBoundary, null, {\r\n  default: () => h(CAFProvider, { plocs: { users: usersPloc } }, { default: () => h(App) })\r\n});\r\n```\r\n\r\n```vue\r\n<script setup lang=\"ts\">\r\nimport { usePlocFromContext, usePloc } from '@c-a-f/infrastructure-vue';\r\n\r\nconst usersPloc = usePlocFromContext('users');\r\nconst [state, ploc] = usePloc(usersPloc);\r\n</script>\r\n```\r\n\r\n### CAFErrorBoundary\r\n\r\nCatches errors from child components and shows a fallback or default UI:\r\n\r\n```vue\r\n<CAFErrorBoundary :fallback=\"({ error, resetError }) => h('div', [error.message, h('button', { onClick: resetError }, 'Try again')])\">\r\n  <App />\r\n</CAFErrorBoundary>\r\n```\r\n\r\n### useRouteManager / useRouteRepository\r\n\r\nComposables for routing with `@c-a-f/core` RouteManager:\r\n\r\n```typescript\r\nimport { useRouteManager } from '@c-a-f/infrastructure-vue';\r\n\r\nconst routeManager = useRouteManager({\r\n  loginPath: '/login',\r\n  isLoggedIn: () => !!localStorage.getItem('token'),\r\n});\r\nrouteManager.checkForLoginRoute();\r\n```\r\n\r\n### DevTools\r\n\r\n```typescript\r\nimport { useCAFDevTools, useTrackPloc } from '@c-a-f/infrastructure-vue';\r\n\r\nconst devTools = useCAFDevTools({ enabled: import.meta.env.DEV });\r\nuseTrackPloc(userPloc, 'UserPloc');\r\n// In console: window.__CAF_DEVTOOLS__\r\n```\r\n\r\n## Exports\r\n\r\n- `usePloc` — Subscribe to a Ploc, return [stateRef, ploc]\r\n- `useUseCase` — Execute a UseCase with loading/error/data refs\r\n- `CAFProvider` — Provide Plocs/UseCases by key\r\n- `useCAFContext` / `usePlocFromContext` / `useUseCaseFromContext` — Consume from provider\r\n- `CAFErrorBoundary` / `useCAFError` — Error boundary and error context\r\n- `useCAFDevTools` / `useTrackPloc` — DevTools toggle and Ploc tracking\r\n- `useRouteManager` / `useRouteRepository` — Routing with Vue Router\r\n\r\n## Dependencies\r\n\r\n- `@c-a-f/core` — Core primitives (Ploc, UseCase, RouteManager, etc.)\r\n- `vue-router` — Vue Router (for route composables)\r\n\r\n## Peer Dependencies\r\n\r\n- `vue` >= 3.0.0\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}