{"_id":"@amaoaaaaa/safe-poll","_rev":"8-41d1baa78aa14c1a8b93a0c340a5a4d8","name":"@amaoaaaaa/safe-poll","dist-tags":{"latest":"2.0.2"},"versions":{"1.0.2":{"name":"@amaoaaaaa/safe-poll","version":"1.0.2","keywords":["vue3","hooks","poll","dashboard","safe"],"author":{"name":"amao"},"license":"MIT","_id":"@amaoaaaaa/safe-poll@1.0.2","maintainers":[{"name":"amaoaaaaa","email":"z.d.mao@qq.com"}],"dist":{"shasum":"f6858cac178c3e8b36f24c50e5f5f2f5f323f887","tarball":"https://registry.npmjs.org/@amaoaaaaa/safe-poll/-/safe-poll-1.0.2.tgz","fileCount":8,"integrity":"sha512-+52+1WgtUy+8nJp6CtBUcCc/n/TZ/cap5qr7YR+DuadR9DhZsiw79k94epGUpAOXsdoYzHwgXp9siNlol7xZTQ==","signatures":[{"sig":"MEQCIBGAm/A6Pz9omNXqZojlvdKUcHaBKewYIPbDz3hHouXsAiBSVmdvPi+dHbkg0of2aWgJ0RyL11ZFYcWqNtYPWaPmmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11426},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"4d1b7f360247670d162a70227bd825d3819a85c8","scripts":{"build":"tsup","publish!":"npm publish --access public","publish!:major":"npm run build && npm version major && npm run publish!","publish!:minor":"npm run build && npm version minor && npm run publish!","publish!:patch":"npm run build && npm version patch && npm run publish!"},"_npmUser":{"name":"amaoaaaaa","email":"z.d.mao@qq.com"},"_npmVersion":"10.9.2","description":"A safe polling hook for Vue 3 dashboards. Polling will never stop because of async errors.","directories":{},"_nodeVersion":"20.18.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.0.0","typescript":"^5.0.0","@types/lodash-es":"^4.17.12"},"peerDependencies":{"vue":"^3.2.0","lodash-es":"^4.17.21","@vueuse/core":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-poll_1.0.2_1768980457456_0.8979003452216092","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@amaoaaaaa/safe-poll","version":"2.0.0","keywords":["vue3","hooks","poll","dashboard","safe"],"author":{"name":"amao"},"license":"MIT","_id":"@amaoaaaaa/safe-poll@2.0.0","maintainers":[{"name":"amaoaaaaa","email":"z.d.mao@qq.com"}],"dist":{"shasum":"daffa6c3bd5ec0ed7e188e71974648163f10bebd","tarball":"https://registry.npmjs.org/@amaoaaaaa/safe-poll/-/safe-poll-2.0.0.tgz","fileCount":8,"integrity":"sha512-IkjcmUU+XJxonaSmj37ztKDxelngugtuWrOOy+v7qA2qHVCzW5X47gdr0HIUJAhb/E8EtmwDLNORsYtqT8ksSA==","signatures":[{"sig":"MEYCIQCt1hgsNxTcVR8F9EvuIrFH/LKfopRN7GjqkFGK7vua4gIhAICsQJLXPVJu32Pzxjmye3YC6/beXFe8M7ZFOfxz6Bag","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11585},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"4e319655fa912b483e1e8ca797a8d2c8c261636e","scripts":{"build":"tsup","publish!":"npm publish --access public","publish!:major":"npm run build && npm version major && npm run publish!","publish!:minor":"npm run build && npm version minor && npm run publish!","publish!:patch":"npm run build && npm version patch && npm run publish!"},"_npmUser":{"name":"amaoaaaaa","email":"z.d.mao@qq.com"},"_npmVersion":"10.9.2","description":"A safe polling hook for Vue 3 dashboards. Polling will never stop because of async errors.","directories":{},"_nodeVersion":"20.18.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.0.0","typescript":"^5.0.0","@types/lodash-es":"^4.17.12"},"peerDependencies":{"vue":"^3.2.0","lodash-es":"^4.17.21","@vueuse/core":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-poll_2.0.0_1768985386628_0.9792845546073132","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@amaoaaaaa/safe-poll","version":"2.0.1","keywords":["vue3","hooks","poll","dashboard","safe"],"author":{"name":"amao"},"license":"MIT","_id":"@amaoaaaaa/safe-poll@2.0.1","maintainers":[{"name":"amaoaaaaa","email":"z.d.mao@qq.com"}],"dist":{"shasum":"dfa0f389742aafe3bfff6de9992321c719ace3e1","tarball":"https://registry.npmjs.org/@amaoaaaaa/safe-poll/-/safe-poll-2.0.1.tgz","fileCount":8,"integrity":"sha512-brzXmhFSyqrsAFRReDmacolPqPGTVjePtJDxuoXxfqappe+1JWzxkq4FWjyHAsZH9dE8BEo1bST6a54Dj4HC7g==","signatures":[{"sig":"MEUCIAp0bK5ESWnw2gbyetNhW72iu6xh93UkvDRPpWRLKeL7AiEA1bg1kP1HGFioW2DRx2Bk4xMPP+rvfjjO3t3+2yYUYvo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11512},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"f52b0985fe43f1babd4bb64ef4d818e4dd72daa9","scripts":{"build":"tsup","publish!":"npm publish --access public","publish!:major":"npm run build && npm version major && npm run publish!","publish!:minor":"npm run build && npm version minor && npm run publish!","publish!:patch":"npm run build && npm version patch && npm run publish!"},"_npmUser":{"name":"amaoaaaaa","email":"z.d.mao@qq.com"},"_npmVersion":"10.9.2","description":"A safe polling hook for Vue 3 dashboards. Polling will never stop because of async errors.","directories":{},"_nodeVersion":"20.18.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^7.0.0","typescript":"^5.0.0"},"peerDependencies":{"vue":"^3.2.0","@vueuse/core":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/safe-poll_2.0.1_1768985697512_0.347024968866509","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@amaoaaaaa/safe-poll","version":"2.0.2","description":"A safe polling hook for Vue 3 dashboards. Polling will never stop because of async errors.","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","scripts":{"build":"tsup","publish!":"npm publish --access public","publish!:patch":"npm run build && npm version patch && npm run publish!","publish!:minor":"npm run build && npm version minor && npm run publish!","publish!:major":"npm run build && npm version major && npm run publish!"},"keywords":["vue3","hooks","poll","dashboard","safe"],"author":{"name":"amao"},"license":"MIT","peerDependencies":{"@vueuse/core":"^12.0.0","vue":"^3.2.0"},"devDependencies":{"tsup":"^7.0.0","typescript":"^5.0.0"},"_id":"@amaoaaaaa/safe-poll@2.0.2","gitHead":"9dd9fcd94e5e9398d5fcca5b3cd80c6c1ff0a1f0","_nodeVersion":"20.18.2","_npmVersion":"10.9.2","dist":{"integrity":"sha512-6/Erq0q3ll18q1wVgNDSNoCIj6R/w7gLnVgdx+cVETAnGZsqD0qFf5fKvmLZu6xT+pAQaZKUQvxfR7tE8gVWkw==","shasum":"7867f8e7d68335354f8f22eebed9617ed8ec5f71","tarball":"https://registry.npmjs.org/@amaoaaaaa/safe-poll/-/safe-poll-2.0.2.tgz","fileCount":8,"unpackedSize":11520,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDHkNynu12JXT4Jps5cubtWrTrHogQir6i9ow7ayfMc0AiEAp4nb/oHycSPAdz2qvGfsKfdRsUXttKgV5boyoH+/hek="}]},"_npmUser":{"name":"amaoaaaaa","email":"z.d.mao@qq.com"},"directories":{},"maintainers":[{"name":"amaoaaaaa","email":"z.d.mao@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/safe-poll_2.0.2_1768986039911_0.7864092772514928"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-21T06:58:43.042Z","modified":"2026-01-21T09:00:40.139Z","1.0.0":"2026-01-21T06:58:43.248Z","1.0.1":"2026-01-21T07:18:37.322Z","1.0.2":"2026-01-21T07:27:37.621Z","2.0.0":"2026-01-21T08:49:46.896Z","2.0.1":"2026-01-21T08:54:57.632Z","2.0.2":"2026-01-21T09:00:40.043Z"},"author":{"name":"amao"},"license":"MIT","keywords":["vue3","hooks","poll","dashboard","safe"],"description":"A safe polling hook for Vue 3 dashboards. Polling will never stop because of async errors.","maintainers":[{"name":"amaoaaaaa","email":"z.d.mao@qq.com"}],"readme":"# @amaoaaaaa/safe-poll\r\n\r\n安全轮询 Hook，保证异步函数抛出错误不会中断轮询。\r\n\r\n基于 VueUse 的 `useTimeoutPoll` 封装，提供自动启动、立即回调、错误处理等功能。\r\n\r\n## 安装\r\n\r\n```bash\r\nnpm install @amaoaaaaa/safe-poll\r\n```\r\n\r\n## 使用\r\n\r\n```ts\r\nimport { usePoll } from \"@amaoaaaaa/safe-poll\";\r\n\r\nconst { pause, resume } = usePoll(\r\n    async () => {\r\n        const res = await fetchData(); // 这里报错也没事\r\n        console.log(res);\r\n    },\r\n    3000,\r\n    {\r\n        onError(err) {\r\n            console.error(\"poll failed\", err);\r\n        },\r\n    },\r\n);\r\n```\r\n\r\n## API\r\n\r\n### `usePoll(fn, interval, options?)`\r\n\r\n注册一个安全轮询任务。\r\n\r\n#### 参数\r\n\r\n| 参数         | 类型                      | 默认值                                            | 说明               |\r\n| ---------- | ----------------------- | ---------------------------------------------- | ---------------- |\r\n| `fn`       | `() => Awaitable<void>` | —                                              | 轮询函数，每次轮询执行的操作 |\r\n| `interval` | `number`                | —                                              | 轮询间隔，单位毫秒        |\r\n| `options`  | `UsePollOptions`        | `{ immediate: true, immediateCallback: true }` | 配置项              |\r\n\r\n---\r\n\r\n### `UsePollOptions`\r\n\r\n| 属性                  | 类型                       | 默认值    | 说明                                                      |\r\n| ------------------- | ------------------------ | ------ | ------------------------------------------------------- |\r\n| `immediate`         | `boolean`                | `true` | 是否在 hook 创建时立即启动轮询。如果为 `false`，需要手动调用 `resume()` 才会开始   |\r\n| `immediateCallback` | `boolean`                | `true` | 是否在启动轮询时立即执行一次回调。配合 `immediate` 使用，决定是否在初始化时立刻调用 `fn()` |\r\n| `onError`           | `(err: unknown) => void` | —      | 当轮询函数抛出错误时的回调，用于统一处理异常，保证轮询不会中断                         |\r\n\r\n---\r\n\r\n### 返回值\r\n\r\n* 返回 `Pausable` 对象（来自 VueUse）：\r\n\r\n```ts\r\ninterface Pausable {\r\n    /**\r\n     * 当前实例是否处于激活状态\r\n     * - true：轮询或定时器正在运行\r\n     * - false：已暂停\r\n     */\r\n    isActive: Readonly<ShallowRef<boolean>>;\r\n\r\n    /**\r\n     * 暂停轮询 / 定时器\r\n     * 调用后 effect 将停止执行，直到 resume() 被调用\r\n     */\r\n    pause: Fn;\r\n\r\n    /**\r\n     * 恢复轮询 / 定时器\r\n     * 调用后 effect 将继续按原间隔执行\r\n     */\r\n    resume: Fn;\r\n}\r\n```\r\n\r\n* 可通过 `pause()` 暂停轮询，通过 `resume()` 恢复轮询。\r\n","readmeFilename":"README.md"}