{"_id":"@bemedev/interval2-vitest","_rev":"3-1eb1cd623530f3d200c77cd739a36e9c","name":"@bemedev/interval2-vitest","dist-tags":{"latest":"1.2.1"},"versions":{"0.0.1":{"name":"@bemedev/interval2-vitest","version":"0.0.1","keywords":["timer","interval","timeout","vitest","testing"],"author":{"url":"https://bemedev.vercel.app","name":"chlbri","email":"bri_lvi@icloud.com"},"_id":"@bemedev/interval2-vitest@0.0.1","maintainers":[{"name":"bemedev","email":"bri_lvi@icloud.com"}],"contributors":[{"url":"https://bemedev.vercel.app","name":"chlbri","email":"bri_lvi@icloud.com"}],"homepage":"https://github.com/chlbri/interval2/blob/master/packages/interval2-vitest/README.md","dist":{"shasum":"0e7a7fe5c4f94e5f7ce9125d857fec1a41eee580","tarball":"https://registry.npmjs.org/@bemedev/interval2-vitest/-/interval2-vitest-0.0.1.tgz","fileCount":17,"integrity":"sha512-sFIiS+2ga78QJag6LS+1YDZbZgKkKNzdjIC0pei4uDt8+r98UUY8OuZ0z/sdr+Cxw18loX/MB/+m8Vip76QwRA==","signatures":[{"sig":"MEQCIEzz4UmOTn9jiMa+1u1mwXXvvKM0mhXsv7+O+b0VsfwCAiATBB4dMe60N+VB+SgSpyKAfxShSyoogADFAaLGsEExqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73393},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","require":"./lib/index.cjs"},"./timeout":{"types":"./lib/timeout.d.ts","import":"./lib/timeout.js","require":"./lib/timeout.cjs"},"./interval":{"types":"./lib/interval.d.ts","import":"./lib/interval.js","require":"./lib/interval.cjs"}},"scripts":{"_ci":"pnpm run lint && pnpm run test","fmt":"oxfmt","lint":"oxlint --fix && pnpm run fmt","size":"size-limit","test":"exit 0","build":"pnpm run rm:lib && pnpm run rolldown","rm:lib":"pnpx rimraf ./lib","pretest":"pnpm run build && pnpm run size","posttest":"exit 0","rolldown":"rolldown -c","test:only":"pnpm run test --no-coverage"},"_npmUser":{"name":"bemedev","email":"bri_lvi@icloud.com"},"repository":{"url":"https://github.com/chlbri/interval2","type":"git"},"size-limit":[{"path":"lib/**/*.js","limit":"10kb"},{"path":"lib/**/*.d.ts","limit":"10kb"},{"path":"lib/**/*.cjs","limit":"10 kb"}],"description":"Vitest test utilities for @bemedev/interval2.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@bemedev/interval2":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"4.1.10","rolldown":"^1.2.3","typescript":"^7.0.2","@bemedev/dev-utils":"^1.1.1"},"peerDependencies":{"vitest":">=4.1.10"},"_npmOperationalInternal":{"tmp":"tmp/interval2-vitest_0.0.1_1786064097662_0.37668243738890617","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bemedev/interval2-vitest","version":"1.2.0","keywords":["timer","interval","timeout","vitest","testing"],"author":{"url":"https://bemedev.vercel.app","name":"chlbri","email":"bri_lvi@icloud.com"},"_id":"@bemedev/interval2-vitest@1.2.0","maintainers":[{"name":"bemedev","email":"bri_lvi@icloud.com"}],"contributors":[{"url":"https://bemedev.vercel.app","name":"chlbri","email":"bri_lvi@icloud.com"}],"homepage":"https://github.com/chlbri/interval2/blob/master/packages/interval2-vitest/README.md","dist":{"shasum":"348c59dc9cf06324d502713f02dd61eab8e98142","tarball":"https://registry.npmjs.org/@bemedev/interval2-vitest/-/interval2-vitest-1.2.0.tgz","fileCount":17,"integrity":"sha512-dDc/4VGztC6gV+6tskrnt3agU3Yge9+ztSQvASl3tlOiWAPu3j7tDdO8l8MD9i/sfcfPk31Ti60UdQ5UWobDVA==","signatures":[{"sig":"MEYCIQDCAfFIXj5QcEL3aPUNLQdV4EdaFjvfn3mTikhV6Wx9xAIhAM5q4k2Tw1zWeIENo5hSaBtZJxOI2fCIWBBVLdvw3/Ba","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bemedev%2finterval2-vitest@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":73393},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","module":"lib/index.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","require":"./lib/index.cjs"},"./timeout":{"types":"./lib/timeout.d.ts","import":"./lib/timeout.js","require":"./lib/timeout.cjs"},"./interval":{"types":"./lib/interval.d.ts","import":"./lib/interval.js","require":"./lib/interval.cjs"}},"scripts":{"_ci":"pnpm run lint && pnpm run test","fmt":"oxfmt","lint":"oxlint --fix && pnpm run fmt","size":"size-limit","test":"exit 0","build":"pnpm run rm:lib && pnpm run rolldown","rm:lib":"pnpx rimraf ./lib","pretest":"pnpm run build && pnpm run size","posttest":"exit 0","rolldown":"rolldown -c","test:only":"pnpm run test --no-coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8ae61348-e131-4fcf-b416-f93b421a0ace"}},"repository":{"url":"https://github.com/chlbri/interval2","type":"git"},"size-limit":[{"path":"lib/**/*.js","limit":"10kb"},{"path":"lib/**/*.d.ts","limit":"10kb"},{"path":"lib/**/*.cjs","limit":"10 kb"}],"description":"Vitest test utilities for @bemedev/interval2.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@bemedev/interval2":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.8.1","vitest":"4.1.10","rolldown":"^1.2.3","typescript":"^7.0.2","@bemedev/dev-utils":"^1.1.1"},"peerDependencies":{"vitest":">=4.1.10"},"_npmOperationalInternal":{"tmp":"tmp/interval2-vitest_1.2.0_1786064327679_0.279915401420745","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@bemedev/interval2-vitest","version":"1.2.1","description":"Vitest test utilities for @bemedev/interval2.","type":"module","main":"lib/index.js","types":"lib/index.d.ts","module":"lib/index.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","require":"./lib/index.cjs"},"./interval":{"types":"./lib/interval.d.ts","import":"./lib/interval.js","require":"./lib/interval.cjs"},"./timeout":{"types":"./lib/timeout.d.ts","import":"./lib/timeout.js","require":"./lib/timeout.cjs"}},"author":{"email":"bri_lvi@icloud.com","name":"chlbri","url":"https://bemedev.vercel.app"},"homepage":"https://github.com/chlbri/interval2/blob/master/packages/vitest/README.md","repository":{"type":"git","url":"https://github.com/chlbri/interval2/tree/master/packages/vitest"},"maintainers":[{"name":"bemedev","email":"bri_lvi@icloud.com"}],"contributors":[{"email":"bri_lvi@icloud.com","name":"chlbri","url":"https://bemedev.vercel.app"}],"keywords":["timer","interval","timeout","vitest","testing"],"dependencies":{"@bemedev/interval2":"^1.2.1"},"peerDependencies":{"vitest":">=4.1.10"},"devDependencies":{"@bemedev/dev-utils":"^1.1.1","rolldown":"^1.2.3","tslib":"^2.8.1","typescript":"^7.0.2","vitest":"4.1.10"},"size-limit":[{"path":"lib/**/*.js","limit":"10kb"},{"path":"lib/**/*.d.ts","limit":"10kb"},{"path":"lib/**/*.cjs","limit":"10 kb"}],"scripts":{"build":"pnpm run rm:lib && pnpm run rolldown","rm:lib":"pnpx rimraf ./lib","test":"exit 0","fmt":"oxfmt","lint":"oxlint --fix && pnpm run fmt","pretest":"pnpm run build && pnpm run size","posttest":"exit 0","test:only":"pnpm run test --no-coverage","_ci":"pnpm run lint && pnpm run test","size":"size-limit","rolldown":"rolldown -c"},"_nodeVersion":"24.18.0","_id":"@bemedev/interval2-vitest@1.2.1","dist":{"integrity":"sha512-l7kte12kn/dF3Bh4DwLwkpa320ZezKkPz66IhdCX5QE9jxRINrgOra/VSqL6ZESMUEPC5srlJoAEtW0sRNpQww==","shasum":"c23a1ea42ffef96654171f6e25134108c789ade0","tarball":"https://registry.npmjs.org/@bemedev/interval2-vitest/-/interval2-vitest-1.2.1.tgz","fileCount":17,"unpackedSize":79269,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bemedev%2finterval2-vitest@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCQhj48yUeHo9Dvqz6lhM8wy6xHeNb4bPURZ3O0PNYbjgIhAOuWuWqUOvombiOXqvyw4n4IzeiHbHp4oLOcZXJUooG0"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8ae61348-e131-4fcf-b416-f93b421a0ace"}},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/interval2-vitest_1.2.1_1786065061473_0.14625689342240422"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-07T00:54:57.419Z","modified":"2026-08-07T01:11:01.986Z","0.0.1":"2026-08-07T00:54:57.804Z","1.2.0":"2026-08-07T00:58:47.810Z","1.2.1":"2026-08-07T01:11:01.637Z"},"author":{"email":"bri_lvi@icloud.com","name":"chlbri","url":"https://bemedev.vercel.app"},"homepage":"https://github.com/chlbri/interval2/blob/master/packages/vitest/README.md","keywords":["timer","interval","timeout","vitest","testing"],"repository":{"type":"git","url":"https://github.com/chlbri/interval2/tree/master/packages/vitest"},"description":"Vitest test utilities for @bemedev/interval2.","contributors":[{"email":"bri_lvi@icloud.com","name":"chlbri","url":"https://bemedev.vercel.app"}],"maintainers":[{"name":"bemedev","email":"bri_lvi@icloud.com"}],"readme":"# `@bemedev/interval2-vitest`\n\nVitest testing utilities and fixtures for `@bemedev/interval2`.\n\n## Installation\n\n```bash\npnpm add -D @bemedev/interval2-vitest\n```\n\n## Package Exports\n\nThis package provides multiple export subpaths configured in\n`package.json`:\n\n| Export Subpath | Import Path                          | Description                                                                               |\n| -------------- | ------------------------------------ | ----------------------------------------------------------------------------------------- |\n| `.`            | `@bemedev/interval2-vitest`          | Main entry point exporting all interval & timeout test helpers                            |\n| `./interval`   | `@bemedev/interval2-vitest/interval` | Vitest test utilities specifically for `Interval2` (`createIntervalTests`, `createTests`) |\n| `./timeout`    | `@bemedev/interval2-vitest/timeout`  | Vitest test utilities specifically for `Timeout2` (`createTimeoutTests`, `createTests`)   |\n\n<br/>\n\n## Detailed Function Reference\n\n### 1. Interval Testing (`createIntervalTests` / `createTests`)\n\nImported from `@bemedev/interval2-vitest/interval` or\n`@bemedev/interval2-vitest`.\n\n```ts\nconst {\n  interval2,\n  start,\n  pause,\n  resume,\n  ticks,\n  checkInterval,\n  advanceTimes,\n  advance,\n  advanceIndex,\n  subscribe,\n  unSubscribe,\n  subscribed,\n  callback,\n} = createIntervalTests(intervalInstance);\n```\n\n#### Functions Explained\n\n- **`start()`**: Returns `[title, startFn]` tuple. Starts the interval\n  execution. Spread directly into a Vitest step: `test(...start())`.\n- **`pause()`**: Returns `[title, pauseFn]` tuple. Pauses the running\n  interval. Spread directly into a Vitest step: `test(...pause())`.\n- **`resume()`**: Returns `[title, resumeFn]` tuple. Alias for `start()`,\n  resumes a paused interval. Spread into `test(...resume())`.\n- **`ticks(times = 1)`**: Returns `[title, assertionFn]` tuple. Asserts\n  that `interval2.ticks` equals `times`. Usage: `test(...ticks(3))`.\n- **`checkInterval(options: IntervalParamTests)`**: Returns\n  `[title, suiteFn]` tuple. Executes a group of Vitest assertions checking:\n  - `id`: Unique identifier string match (`expect(interval2.id).toBe(id)`)\n  - `state`: Current timer state (`expect(interval2.state).toBe(state)`)\n  - `interval`: Milliseconds interval\n    (`expect(interval2.interval).toBe(interval)`)\n  - `exact`: Exact timing boolean flag\n    (`expect(interval2.exact).toBe(exact)`)\n  - `callTimes`: Total callback invocations count\n    (`expect(callback).toHaveBeenCalledTimes(callTimes)`) Spread into\n    `describe(...checkInterval({ state: 'active', callTimes: 2 }))`.\n- **`advanceTimes(times = 1)`**: Returns `[title, advanceFn]` tuple.\n  Advances Vitest fake timers by `interval2.interval * times`. Usage:\n  `test(...advanceTimes(2))`.\n- **`advance(ms: number)`**: Returns `[title, advanceFn]` tuple. Advances\n  Vitest fake timers by `ms` milliseconds. Usage: `test(...advance(500))`.\n- **`advanceIndex()`**: Returns `[title, emptyFn]` tuple. Increments the\n  step description index number without running any assertion.\n- **`subscribe(listener: IntervalListener, id: string)`**: Returns\n  `[title, subFn]` tuple. Attaches a state listener with identifier `id`.\n  Usage: `test(...subscribe(fn, 'listener-1'))`.\n- **`unSubscribe(id: string)`**: Returns `[title, unsubFn]` tuple. Removes\n  the state listener associated with identifier `id`. Usage:\n  `test(...unSubscribe('listener-1'))`.\n- **`subscribed(value: boolean)`**: Returns `[title, assertionFn]` tuple.\n  Asserts subscription status (`expect(interval2.subscribed).toBe(value)`).\n  Usage: `test(...subscribed(true))`.\n- **`callback`**: A Vitest mock function `vi.fn()` wrapping the original\n  interval callback, allowing custom assertion queries\n  (`expect(callback)...`).\n- **`interval2`**: The active renewed instance of `Interval2`.\n\n---\n\n### 2. Timeout Testing (`createTimeoutTests` / `createTests`)\n\nImported from `@bemedev/interval2-vitest/timeout` or\n`@bemedev/interval2-vitest`.\n\n```ts\nconst {\n  timeout,\n  start,\n  pause,\n  resume,\n  dispose,\n  checkTimeout,\n  advance,\n  runAllTimers,\n  advanceIndex,\n  subscribe,\n  unSubscribe,\n  subscribed,\n} = createTimeoutTests(timeoutInstance);\n```\n\n#### Functions Explained\n\n- **`start()`**: Returns `[title, startFn]` tuple. Starts the timeout\n  timer. Spread directly into a Vitest step: `test(...start())`.\n- **`pause()`**: Returns `[title, pauseFn]` tuple. Pauses the active\n  timeout while preserving remaining execution time. Spread into\n  `test(...pause())`.\n- **`resume()`**: Returns `[title, resumeFn]` tuple. Resumes the paused\n  timeout using remaining duration. Spread into `test(...resume())`.\n- **`dispose()`**: Returns `[title, disposeFn]` tuple. Disposes the timeout\n  instance and clears timers/subscribers. Spread into `test(...dispose())`.\n- **`checkTimeout(options: TimeoutParamTests)`**: Returns\n  `[title, suiteFn]` tuple. Executes a group of Vitest assertions checking:\n  - `id`: Unique identifier string match (`expect(timeout.id).toBe(id)`)\n  - `state`: Current timer state (`expect(timeout.state).toBe(state)`)\n  - `timeout`: Timeout duration in milliseconds\n    (`expect(timeout.timeout).toBe(timeoutVal)`) Spread into\n    `describe(...checkTimeout({ state: 'idle', timeout: 1000 }))`.\n- **`advance(ms: number)`**: Returns `[title, advanceFn]` tuple. Advances\n  Vitest fake timers by `ms` milliseconds. Usage: `test(...advance(1000))`.\n- **`runAllTimers()`**: Returns `[title, runFn]` tuple. Runs all pending\n  fake timers via `vitest.runAllTimers()`. Usage:\n  `test(...runAllTimers())`.\n- **`advanceIndex()`**: Returns `[title, emptyFn]` tuple. Increments step\n  index formatting without executing assertions.\n- **`subscribe(listener: TimeoutListener, id: string)`**: Returns\n  `[title, subFn]` tuple. Attaches a timeout state listener with identifier\n  `id`. Usage: `test(...subscribe(fn, 'sub-1'))`.\n- **`unSubscribe(id: string)`**: Returns `[title, unsubFn]` tuple. Removes\n  the timeout state listener associated with identifier `id`. Usage:\n  `test(...unSubscribe('sub-1'))`.\n- **`subscribed(value: boolean)`**: Returns `[title, assertionFn]` tuple.\n  Asserts subscription presence (`expect(timeout.subscribed).toBe(value)`).\n  Usage: `test(...subscribed(false))`.\n- **`timeout`**: The active renewed instance of `Timeout2`.\n\n<br/>\n\n## Usage Examples\n\n### 1. Main Entry Point (`@bemedev/interval2-vitest`)\n\n```ts\nimport { createInterval, createTimeout } from '@bemedev/interval2';\nimport {\n  createIntervalTests,\n  createTimeoutTests,\n} from '@bemedev/interval2-vitest';\nimport { describe, test } from 'vitest';\n\ndescribe('Interval Test', () => {\n  const { start, checkInterval, advanceTimes, pause } =\n    createIntervalTests(\n      createInterval({ id: 'test-interval', interval: 100, exact: true }),\n    );\n\n  describe(...checkInterval({ exact: true }));\n  test(...start());\n  test(...advanceTimes(1));\n  test(...pause());\n});\n\ndescribe('Timeout Test', () => {\n  const { start, checkTimeout, advance, pause } = createTimeoutTests(\n    createTimeout({ id: 'test-timeout', timeout: 1000 }),\n  );\n\n  describe(...checkTimeout({ timeout: 1000, state: 'idle' }));\n  test(...start());\n  test(...advance(1000));\n  test(...pause());\n});\n```\n\n### 2. Interval Subpath (`@bemedev/interval2-vitest/interval`)\n\n```ts\nimport { createInterval } from '@bemedev/interval2';\nimport {\n  createIntervalTests, // or createTests (same function)\n  type IntervalParamTests,\n} from '@bemedev/interval2-vitest/interval';\nimport { describe, test } from 'vitest';\n\nconst interval = createInterval({ id: 'interval-1', interval: 100 });\nconst { start, checkInterval, advanceTimes, pause } =\n  createIntervalTests(interval);\n\nconst params: IntervalParamTests = {\n  id: 'interval-1',\n  state: 'idle',\n  interval: 100,\n};\ndescribe(...checkInterval(params));\ntest(...start());\ntest(...advanceTimes(2));\ntest(...pause());\n```\n\n### 3. Timeout Subpath (`@bemedev/interval2-vitest/timeout`)\n\n```ts\nimport { createTimeout } from '@bemedev/interval2';\nimport {\n  createTimeoutTests, // or createTests (same function)\n  type TimeoutParamTests,\n} from '@bemedev/interval2-vitest/timeout';\nimport { describe, test } from 'vitest';\n\nconst timeout = createTimeout({ id: 'timeout-1', timeout: 500 });\nconst { start, checkTimeout, advance, pause } =\n  createTimeoutTests(timeout);\n\nconst params: TimeoutParamTests = {\n  id: 'timeout-1',\n  state: 'idle',\n  timeout: 500,\n};\ndescribe(...checkTimeout(params));\ntest(...start());\ntest(...advance(500));\ntest(...pause());\n```\n\n## License\n\nMIT\n","readmeFilename":""}