{"_id":"@test-effective/fakes","_rev":"9-05565d0aec0d14a5388cfb3a5e9ba2b1","name":"@test-effective/fakes","dist-tags":{"latest":"0.4.0"},"versions":{"0.0.0":{"name":"@test-effective/fakes","version":"0.0.0","keywords":["fakes","faketory","fakepoints","msw","standard-schema","testing","test-effective"],"author":{"url":"HiRez.io","name":"Shai Reznik"},"license":"MIT","_id":"@test-effective/fakes@0.0.0","maintainers":[{"name":"shairez","email":"shai@hirez.io"},{"name":"hirez.io","email":"opensource@hirez.io"}],"homepage":"https://github.com/test-effective/fakes","bugs":{"url":"https://github.com/test-effective/fakes/issues"},"dist":{"shasum":"88046108f05025a8e525ed7925a0049bad77b20e","tarball":"https://registry.npmjs.org/@test-effective/fakes/-/fakes-0.0.0.tgz","fileCount":6,"integrity":"sha512-8xAPhhOlCpjozDcx40cmU2oATz15owKKmb3eOeQ7A645U6ifv/U7HXGTY2G+N/tAipfO8b/bC4bECy/URXxKhA==","signatures":[{"sig":"MEYCIQCBsCmLFWFSBrtodsmiOTZJfHLxymUsb6RaUnL/Mc96uAIhAIDZ8N7Hot149ST+BEcHF9dlC3elW3SEcpCmwq1Lz+nb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21541},"main":"./dist/index.mjs","pnpm":{"onlyBuiltDependencies":["simple-git-hooks"]},"type":"module","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":"^18.0.0 || ^20.0.0 || >=22.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"gitHead":"e0e153dd6c167b56b5aa77a626ce7b0023c43f26","scripts":{"dev":"tsdown --watch --sourcemap","fmt":"prettier --write .","lint":"eslint --cache .","test":"vitest","build":"tsdown","change":"changeset","release":"changeset publish","lint:fix":"pnpm lint --fix","fmt.check":"prettier --check .","fmt.staged":"pretty-quick --staged","release.pkg-pr-new":"pnpm dlx pkg-pr-new publish"},"_npmUser":{"name":"hirez.io","email":"opensource@hirez.io"},"repository":{"url":"git+https://github.com/test-effective/fakes.git","type":"git"},"_npmVersion":"10.9.2","description":"Test Effective Fakes","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@standard-schema/spec":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","dotenv":"^17.2.3","eslint":"^9.8.0","tsdown":"^0.16.2","vitest":"^4.0.0","valibot":"^1.1.0","prettier":"^3.6.2","@msw/data":"^1.0.0","@eslint/js":"^9.35.0","typescript":"^5.5.4","@types/node":"^24.10.1","pretty-quick":"^4.2.2","@changesets/cli":"^2.29.6","@faker-js/faker":"^10.1.0","@vitest/browser":"^3.2.0","simple-git-hooks":"^2.13.1","@changesets/types":"^6.1.0","typescript-eslint":"^8.42.0","eslint-config-prettier":"^10.1.8","@vitest/browser-playwright":"^4.0.0","@changesets/get-github-info":"^0.6.0"},"peerDependencies":{"vite":">=5.0.0","@msw/data":"^1.0.0"},"simple-git-hooks":{"pre-commit":"pnpm fmt.staged && pnpm lint"},"_npmOperationalInternal":{"tmp":"tmp/fakes_0.0.0_1763739076744_0.2873443361137413","host":"s3://npm-registry-packages-npm-production"}},"0.0.1":{"name":"@test-effective/fakes","version":"0.0.1","keywords":["fakes","faketory","fakepoints","msw","standard-schema","testing","test-effective"],"author":{"url":"HiRez.io","name":"Shai Reznik"},"license":"MIT","_id":"@test-effective/fakes@0.0.1","maintainers":[{"name":"shairez","email":"shai@hirez.io"},{"name":"hirez.io","email":"opensource@hirez.io"}],"homepage":"https://github.com/test-effective/fakes","bugs":{"url":"https://github.com/test-effective/fakes/issues"},"dist":{"shasum":"25ef1f8acaf6028999e1687a3c485e61ac2250c6","tarball":"https://registry.npmjs.org/@test-effective/fakes/-/fakes-0.0.1.tgz","fileCount":6,"integrity":"sha512-V38Ftmax/fI+GENRf4Zgx/WVxAwywDc/VN0Q3rxhFe/9Cj+zuOq4xzuR5iuDZ2PMQW2eGsv9aFPGERFqMwvcvw==","signatures":[{"sig":"MEUCIQD1VxE04CJvll1bSFoBiVLZ9txXxJtsLgLdZpt7YMbqUgIgHPjnjVSRMmmpIr9NgAdL/Zb1tveM2RdxeOPIC6FjOUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@test-effective%2ffakes@0.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21461},"main":"./dist/index.mjs","type":"module","_from":"file:test-effective-fakes-0.0.1.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":"^18.0.0 || ^20.0.0 || >=22.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"dev":"tsdown --watch --sourcemap","fmt":"prettier --write .","lint":"eslint --cache .","test":"vitest","build":"tsdown","change":"changeset","release":"changeset publish","lint:fix":"pnpm lint --fix","fmt.check":"prettier --check .","fmt.staged":"pretty-quick --staged","release.pkg-pr-new":"pnpm dlx pkg-pr-new publish"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ddf09193-45c7-4ded-aaea-0b3b05861130"}},"_resolved":"/tmp/970527f74d9925c1442028c314530be8/test-effective-fakes-0.0.1.tgz","_integrity":"sha512-V38Ftmax/fI+GENRf4Zgx/WVxAwywDc/VN0Q3rxhFe/9Cj+zuOq4xzuR5iuDZ2PMQW2eGsv9aFPGERFqMwvcvw==","repository":{"url":"git+https://github.com/test-effective/fakes.git","type":"git"},"_npmVersion":"11.6.2","description":"Test Effective Fakes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@standard-schema/spec":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","dotenv":"^17.2.3","eslint":"^9.8.0","tsdown":"^0.16.2","vitest":"^4.0.0","valibot":"^1.1.0","prettier":"^3.6.2","@msw/data":"^1.0.0","@eslint/js":"^9.35.0","typescript":"^5.5.4","@types/node":"^24.10.1","pretty-quick":"^4.2.2","@changesets/cli":"^2.29.6","@faker-js/faker":"^10.1.0","@vitest/browser":"^3.2.0","simple-git-hooks":"^2.13.1","@changesets/types":"^6.1.0","typescript-eslint":"^8.42.0","eslint-config-prettier":"^10.1.8","@vitest/browser-playwright":"^4.0.0","@changesets/get-github-info":"^0.6.0"},"peerDependencies":{"vite":">=5.0.0","@msw/data":"^1.0.0"},"simple-git-hooks":{"pre-commit":"pnpm fmt.staged && pnpm lint"},"_npmOperationalInternal":{"tmp":"tmp/fakes_0.0.1_1763751945737_0.7635830481659451","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@test-effective/fakes","version":"0.0.2","keywords":["fakes","faketory","fakepoints","msw","standard-schema","testing","test-effective"],"author":{"url":"HiRez.io","name":"Shai Reznik"},"license":"MIT","_id":"@test-effective/fakes@0.0.2","maintainers":[{"name":"shairez","email":"shai@hirez.io"},{"name":"hirez.io","email":"opensource@hirez.io"}],"homepage":"https://github.com/test-effective/fakes","bugs":{"url":"https://github.com/test-effective/fakes/issues"},"dist":{"shasum":"799dfe3a8a70da250aa9aa29e266c463517c03d5","tarball":"https://registry.npmjs.org/@test-effective/fakes/-/fakes-0.0.2.tgz","fileCount":6,"integrity":"sha512-LlFW5TUWF2SSVp0EDCIO6RU1qAoXhQbTKxT/zQVRSnAzf2eH/wCFKly7zZUfrhvSWNRHhVsCkAUL9mYxTYqzYw==","signatures":[{"sig":"MEUCIQDwBMHpib0fL4Opf8P7+Vw3GSg71UF5Zx5uAoa3Z130UgIgevFRiJvTZvbRFKQea+f7XVsTo/SVKNr+M961sphVBcc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@test-effective%2ffakes@0.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21472},"main":"./dist/index.mjs","type":"module","_from":"file:test-effective-fakes-0.0.2.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":"^18.0.0 || ^20.0.0 || >=22.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"dev":"tsdown --watch --sourcemap","fmt":"prettier --write .","lint":"eslint --cache .","test":"vitest","build":"tsdown","change":"changeset","release":"changeset publish","lint:fix":"pnpm lint --fix","fmt.check":"prettier --check .","fmt.staged":"pretty-quick --staged","release.pkg-pr-new":"pnpm dlx pkg-pr-new publish"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ddf09193-45c7-4ded-aaea-0b3b05861130"}},"_resolved":"/tmp/84568557bd9bc551bff956ea533549c1/test-effective-fakes-0.0.2.tgz","_integrity":"sha512-LlFW5TUWF2SSVp0EDCIO6RU1qAoXhQbTKxT/zQVRSnAzf2eH/wCFKly7zZUfrhvSWNRHhVsCkAUL9mYxTYqzYw==","repository":{"url":"git+https://github.com/test-effective/fakes.git","type":"git"},"_npmVersion":"11.6.2","description":"Test Effective Fakes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@standard-schema/spec":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","dotenv":"^17.2.3","eslint":"^9.8.0","tsdown":"^0.16.2","vitest":"^4.0.0","valibot":"^1.1.0","prettier":"^3.6.2","@msw/data":"^1.0.0","@eslint/js":"^9.35.0","typescript":"^5.5.4","@types/node":"^24.10.1","pretty-quick":"^4.2.2","@changesets/cli":"^2.29.6","@faker-js/faker":"^10.1.0","@vitest/browser":"^3.2.0","simple-git-hooks":"^2.13.1","@changesets/types":"^6.1.0","typescript-eslint":"^8.42.0","eslint-config-prettier":"^10.1.8","@vitest/browser-playwright":"^4.0.0","@changesets/get-github-info":"^0.6.0"},"peerDependencies":{"vite":">=5.0.0","@msw/data":"^1.0.0"},"simple-git-hooks":{"pre-commit":"pnpm fmt.staged && pnpm lint"},"_npmOperationalInternal":{"tmp":"tmp/fakes_0.0.2_1763764659861_0.9592682884657358","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@test-effective/fakes","version":"0.0.3","keywords":["fakes","faketory","fakepoints","msw","standard-schema","testing","test-effective"],"author":{"url":"HiRez.io","name":"Shai Reznik"},"license":"MIT","_id":"@test-effective/fakes@0.0.3","maintainers":[{"name":"shairez","email":"shai@hirez.io"},{"name":"hirez.io","email":"opensource@hirez.io"}],"homepage":"https://github.com/test-effective/fakes","bugs":{"url":"https://github.com/test-effective/fakes/issues"},"dist":{"shasum":"24738c1695c49f893af669638c9d3942cec1216e","tarball":"https://registry.npmjs.org/@test-effective/fakes/-/fakes-0.0.3.tgz","fileCount":6,"integrity":"sha512-cylfVTlepwLGJg1QaESXUI0HUCOWPo/Gukg7IUqu5svswierA0KW96d7Bu+Z/+EgCOCVGQUafHEGvxMvoDVNtg==","signatures":[{"sig":"MEUCIHv9dF3qfDGqyGAJ4ZQa/rn5eZk0YDR6rniRhFF0pkrGAiEA1ngGTNwVz16UGdbpOKEgRqac62MFizr6Z+zfy0K1p1I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@test-effective%2ffakes@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":21697},"main":"./dist/index.mjs","type":"module","_from":"file:test-effective-fakes-0.0.3.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":"^18.0.0 || ^20.0.0 || >=22.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"dev":"tsdown --watch --sourcemap","fmt":"prettier --write .","lint":"eslint --cache .","test":"vitest","build":"tsdown","change":"changeset","release":"changeset publish","lint:fix":"pnpm lint --fix","fmt.check":"prettier --check .","fmt.staged":"pretty-quick --staged","release.pkg-pr-new":"pnpm dlx pkg-pr-new publish"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ddf09193-45c7-4ded-aaea-0b3b05861130"}},"_resolved":"/tmp/088ec8792e43a537f627dcd143751808/test-effective-fakes-0.0.3.tgz","_integrity":"sha512-cylfVTlepwLGJg1QaESXUI0HUCOWPo/Gukg7IUqu5svswierA0KW96d7Bu+Z/+EgCOCVGQUafHEGvxMvoDVNtg==","repository":{"url":"git+https://github.com/test-effective/fakes.git","type":"git"},"_npmVersion":"11.6.2","description":"Test Effective Fakes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@standard-schema/spec":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","dotenv":"^17.2.3","eslint":"^9.8.0","tsdown":"^0.16.2","vitest":"^4.0.0","valibot":"^1.1.0","prettier":"^3.6.2","@msw/data":"^1.0.0","@eslint/js":"^9.35.0","typescript":"^5.5.4","@types/node":"^24.10.1","pretty-quick":"^4.2.2","@changesets/cli":"^2.29.6","@faker-js/faker":"^10.1.0","@vitest/browser":"^3.2.0","simple-git-hooks":"^2.13.1","@changesets/types":"^6.1.0","typescript-eslint":"^8.42.0","eslint-config-prettier":"^10.1.8","@vitest/browser-playwright":"^4.0.0","@changesets/get-github-info":"^0.6.0"},"peerDependencies":{"vite":">=5.0.0","@msw/data":"^1.0.0"},"simple-git-hooks":{"pre-commit":"pnpm fmt.staged && pnpm lint"},"_npmOperationalInternal":{"tmp":"tmp/fakes_0.0.3_1764082228746_0.6044143233216817","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@test-effective/fakes","version":"0.0.4","keywords":["fakes","faketory","fakepoints","msw","standard-schema","testing","test-effective"],"author":{"url":"HiRez.io","name":"Shai Reznik"},"license":"MIT","_id":"@test-effective/fakes@0.0.4","maintainers":[{"name":"shairez","email":"shai@hirez.io"},{"name":"hirez.io","email":"opensource@hirez.io"}],"homepage":"https://github.com/test-effective/fakes","bugs":{"url":"https://github.com/test-effective/fakes/issues"},"dist":{"shasum":"f297b787530b53d02b89792c202bb4d8d0010032","tarball":"https://registry.npmjs.org/@test-effective/fakes/-/fakes-0.0.4.tgz","fileCount":6,"integrity":"sha512-5Vl1kw3k5smIh9qkAzAf38NPW75nQyWROFbPddifoK/tH/DZ+9McT1f4MSDerUytEBDf/+uZJ6mHDqtwk8QhaA==","signatures":[{"sig":"MEUCIQDlYtMdRhmqyop1+JSeARQ+rYQujFLQOBM2AD3GTOo58AIgQtyq4N0rzKESkF5fI/2VjW2KGQQVgU+pYJvHW9/pYck=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@test-effective%2ffakes@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":26005},"main":"./dist/index.mjs","type":"module","_from":"file:test-effective-fakes-0.0.4.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":"^18.0.0 || ^20.0.0 || >=22.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"dev":"tsdown --watch --sourcemap","fmt":"prettier --write .","lint":"eslint --cache .","test":"vitest","build":"tsdown","change":"changeset","release":"changeset publish","lint:fix":"pnpm lint --fix","fmt.check":"prettier --check .","fmt.staged":"pretty-quick --staged","release.pkg-pr-new":"pnpm dlx pkg-pr-new publish"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ddf09193-45c7-4ded-aaea-0b3b05861130"}},"_resolved":"/tmp/7eac1b5531352380ef4ba7121db4b85f/test-effective-fakes-0.0.4.tgz","_integrity":"sha512-5Vl1kw3k5smIh9qkAzAf38NPW75nQyWROFbPddifoK/tH/DZ+9McT1f4MSDerUytEBDf/+uZJ6mHDqtwk8QhaA==","repository":{"url":"git+https://github.com/test-effective/fakes.git","type":"git"},"_npmVersion":"11.6.2","description":"Test Effective Fakes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@standard-schema/spec":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","dotenv":"^17.2.3","eslint":"^9.8.0","tsdown":"^0.16.2","vitest":"^4.0.0","valibot":"^1.1.0","prettier":"^3.6.2","@msw/data":"^1.0.0","@eslint/js":"^9.35.0","typescript":"^5.5.4","@types/node":"^24.10.1","pretty-quick":"^4.2.2","@changesets/cli":"^2.29.6","@faker-js/faker":"^10.1.0","@vitest/browser":"^3.2.0","simple-git-hooks":"^2.13.1","@changesets/types":"^6.1.0","typescript-eslint":"^8.42.0","eslint-config-prettier":"^10.1.8","@vitest/browser-playwright":"^4.0.0","@changesets/get-github-info":"^0.6.0"},"peerDependencies":{"vite":">=5.0.0","@msw/data":"^1.0.0"},"simple-git-hooks":{"pre-commit":"pnpm fmt.staged && pnpm lint"},"_npmOperationalInternal":{"tmp":"tmp/fakes_0.0.4_1764279343523_0.5081010157851413","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@test-effective/fakes","version":"0.1.0","keywords":["fakes","faketory","fakepoints","msw","standard-schema","testing","test-effective"],"author":{"url":"HiRez.io","name":"Shai Reznik"},"license":"MIT","_id":"@test-effective/fakes@0.1.0","maintainers":[{"name":"shairez","email":"shai@hirez.io"},{"name":"hirez.io","email":"opensource@hirez.io"}],"homepage":"https://github.com/test-effective/fakes","bugs":{"url":"https://github.com/test-effective/fakes/issues"},"dist":{"shasum":"1b65e618cbc85c5dd252c4e3989701f38fa78ade","tarball":"https://registry.npmjs.org/@test-effective/fakes/-/fakes-0.1.0.tgz","fileCount":6,"integrity":"sha512-C3LsYBUWzkX2ahNU9oQuOXdXthEYv5PqcyaG4Zx8H/53DHM0YkcRfg5H1AV9kk+EkAZ0qrdXkl9KRfkbKfNAnA==","signatures":[{"sig":"MEUCIQCvgULK4GKAjeWMmkIrn/JeGJcXhwXRmlvdPfDJmTzBsAIgWRiTuZh70Ar0N6DsuTIITx0mlqQNkd5QlQqAQsOLntA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@test-effective%2ffakes@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":27630},"main":"./dist/index.mjs","type":"module","_from":"file:test-effective-fakes-0.1.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":"^18.0.0 || ^20.0.0 || >=22.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"dev":"tsdown --watch --sourcemap","fmt":"prettier --write .","lint":"eslint --cache .","test":"vitest","build":"tsdown","change":"changeset","release":"changeset publish","lint:fix":"pnpm lint --fix","fmt.check":"prettier --check .","fmt.staged":"pretty-quick --staged","release.pkg-pr-new":"pnpm dlx pkg-pr-new publish"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ddf09193-45c7-4ded-aaea-0b3b05861130"}},"_resolved":"/tmp/b67fc583ccf247a32b9ac6037229a5ba/test-effective-fakes-0.1.0.tgz","_integrity":"sha512-C3LsYBUWzkX2ahNU9oQuOXdXthEYv5PqcyaG4Zx8H/53DHM0YkcRfg5H1AV9kk+EkAZ0qrdXkl9KRfkbKfNAnA==","repository":{"url":"git+https://github.com/test-effective/fakes.git","type":"git"},"_npmVersion":"11.6.2","description":"Test Effective Fakes","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@standard-schema/spec":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","dotenv":"^17.2.3","eslint":"^9.8.0","tsdown":"^0.16.2","vitest":"^4.0.0","valibot":"^1.1.0","prettier":"^3.6.2","@msw/data":"^1.0.0","@eslint/js":"^9.35.0","typescript":"^5.5.4","@types/node":"^24.10.1","pretty-quick":"^4.2.2","@changesets/cli":"^2.29.6","@faker-js/faker":"^10.1.0","@vitest/browser":"^3.2.0","simple-git-hooks":"^2.13.1","@changesets/types":"^6.1.0","typescript-eslint":"^8.42.0","eslint-config-prettier":"^10.1.8","@vitest/browser-playwright":"^4.0.0","@changesets/get-github-info":"^0.6.0"},"peerDependencies":{"vite":">=5.0.0","@msw/data":"^1.0.0"},"simple-git-hooks":{"pre-commit":"pnpm fmt.staged && pnpm lint"},"_npmOperationalInternal":{"tmp":"tmp/fakes_0.1.0_1766751108237_0.795967581669301","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@test-effective/fakes","version":"0.2.0","keywords":["fakes","faketory","fakepoints","msw","standard-schema","testing","test-effective"],"author":{"url":"HiRez.io","name":"Shai Reznik"},"license":"MIT","_id":"@test-effective/fakes@0.2.0","maintainers":[{"name":"shairez","email":"shai@hirez.io"},{"name":"hirez.io","email":"opensource@hirez.io"}],"homepage":"https://github.com/test-effective/fakes","bugs":{"url":"https://github.com/test-effective/fakes/issues"},"dist":{"shasum":"ecb223d7538079a5c556089cb0b1507ff11aafee","tarball":"https://registry.npmjs.org/@test-effective/fakes/-/fakes-0.2.0.tgz","fileCount":6,"integrity":"sha512-NhcGaK+mSIxcS7n9J0HJBxJL4wHQyAm9a6OkALLIBHU/cOj1i94lCRC1aMKOSTGvT8+iHR5K3tQ6s0CpwWeRdw==","signatures":[{"sig":"MEUCIE9PQCb+R6iWpRK+2YLjTdQllrNXNUxEHqtu/OfuaT4EAiEA9Q2aBstGe0ObflzWfYNZCGCTxQibxHiZl9uHaPei2xo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@test-effective%2ffakes@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31253},"main":"./dist/index.mjs","type":"module","_from":"file:test-effective-fakes-0.2.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":"^18.0.0 || ^20.0.0 || >=22.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"dev":"tsdown --watch --sourcemap","fmt":"prettier --write .","lint":"eslint --cache .","test":"vitest","build":"tsdown","change":"changeset","release":"changeset publish","lint:fix":"pnpm lint --fix","fmt.check":"prettier --check .","fmt.staged":"pretty-quick --staged","release.pkg-pr-new":"pnpm dlx pkg-pr-new publish"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ddf09193-45c7-4ded-aaea-0b3b05861130"}},"_resolved":"/tmp/4b8ec5329645541d874081b0d245caa4/test-effective-fakes-0.2.0.tgz","_integrity":"sha512-NhcGaK+mSIxcS7n9J0HJBxJL4wHQyAm9a6OkALLIBHU/cOj1i94lCRC1aMKOSTGvT8+iHR5K3tQ6s0CpwWeRdw==","repository":{"url":"git+https://github.com/test-effective/fakes.git","type":"git"},"_npmVersion":"11.6.2","description":"Test Effective Fakes","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@standard-schema/spec":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","dotenv":"^17.2.3","eslint":"^9.8.0","tsdown":"^0.16.2","vitest":"^4.0.0","valibot":"^1.1.0","prettier":"^3.6.2","@msw/data":"^1.0.0","@eslint/js":"^9.35.0","typescript":"^5.5.4","@types/node":"^24.10.1","pretty-quick":"^4.2.2","@changesets/cli":"^2.29.6","@faker-js/faker":"^10.1.0","@vitest/browser":"^3.2.0","simple-git-hooks":"^2.13.1","@changesets/types":"^6.1.0","typescript-eslint":"^8.42.0","eslint-config-prettier":"^10.1.8","@vitest/browser-playwright":"^4.0.0","@changesets/get-github-info":"^0.6.0"},"peerDependencies":{"vite":">=5.0.0","@msw/data":"^1.0.0"},"simple-git-hooks":{"pre-commit":"pnpm fmt.staged && pnpm lint"},"_npmOperationalInternal":{"tmp":"tmp/fakes_0.2.0_1767745568830_0.2788619103079888","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@test-effective/fakes","version":"0.3.0","keywords":["fakes","faketory","fakepoints","msw","standard-schema","testing","test-effective"],"author":{"url":"HiRez.io","name":"Shai Reznik"},"license":"MIT","_id":"@test-effective/fakes@0.3.0","maintainers":[{"name":"shairez","email":"shai@hirez.io"},{"name":"hirez.io","email":"opensource@hirez.io"}],"homepage":"https://github.com/test-effective/fakes","bugs":{"url":"https://github.com/test-effective/fakes/issues"},"dist":{"shasum":"ae05d7eb96ef9882b76419741eeefd935e8f2e4d","tarball":"https://registry.npmjs.org/@test-effective/fakes/-/fakes-0.3.0.tgz","fileCount":6,"integrity":"sha512-UgCzmivp1vidr2YYqT/uBxIG2Zz6/uLlor1ZDwA/ZGTf7GMRGrFdooa8EB9lkuxqnCQk2ZKgKLZIjsXIOYq+cA==","signatures":[{"sig":"MEQCIAk584MXLr3vIpWYpwCHuE69S1uHt+TYqvcwmIaFzM89AiAitAiZ1MIVB1M/kLicJtjTxNT2R/vmmP4GOGN1pnqgmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@test-effective%2ffakes@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":36888},"main":"./dist/index.mjs","type":"module","_from":"file:test-effective-fakes-0.3.0.tgz","types":"./dist/index.d.mts","module":"./dist/index.mjs","engines":{"node":"^18.0.0 || ^20.0.0 || >=22.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"scripts":{"dev":"tsdown --watch --sourcemap","fmt":"prettier --write .","lint":"eslint --cache .","test":"vitest","build":"tsdown","change":"changeset","release":"changeset publish","lint:fix":"pnpm lint --fix","fmt.check":"prettier --check .","fmt.staged":"pretty-quick --staged","release.pkg-pr-new":"pnpm dlx pkg-pr-new publish"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ddf09193-45c7-4ded-aaea-0b3b05861130"}},"_resolved":"/tmp/f521166cde22c287c4abc52464f1b4ab/test-effective-fakes-0.3.0.tgz","_integrity":"sha512-UgCzmivp1vidr2YYqT/uBxIG2Zz6/uLlor1ZDwA/ZGTf7GMRGrFdooa8EB9lkuxqnCQk2ZKgKLZIjsXIOYq+cA==","repository":{"url":"git+https://github.com/test-effective/fakes.git","type":"git"},"_npmVersion":"11.6.2","description":"Test Effective Fakes","directories":{},"_nodeVersion":"24.12.0","dependencies":{"@standard-schema/spec":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","dotenv":"^17.2.3","eslint":"^9.8.0","tsdown":"^0.16.2","vitest":"^4.0.0","valibot":"^1.1.0","prettier":"^3.6.2","@msw/data":"^1.0.0","@eslint/js":"^9.35.0","typescript":"^5.5.4","@types/node":"^24.10.1","pretty-quick":"^4.2.2","@changesets/cli":"^2.29.6","@faker-js/faker":"^10.1.0","@vitest/browser":"^3.2.0","simple-git-hooks":"^2.13.1","@changesets/types":"^6.1.0","typescript-eslint":"^8.42.0","eslint-config-prettier":"^10.1.8","@vitest/browser-playwright":"^4.0.0","@changesets/get-github-info":"^0.6.0"},"peerDependencies":{"vite":">=5.0.0","@msw/data":"^1.0.0"},"simple-git-hooks":{"pre-commit":"pnpm fmt.staged && pnpm lint"},"_npmOperationalInternal":{"tmp":"tmp/fakes_0.3.0_1768002765292_0.8228181380607862","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@test-effective/fakes","version":"0.4.0","description":"Test Effective Fakes","author":{"name":"Shai Reznik","url":"HiRez.io"},"repository":{"type":"git","url":"git+https://github.com/test-effective/fakes.git"},"bugs":{"url":"https://github.com/test-effective/fakes/issues"},"homepage":"https://github.com/test-effective/fakes","license":"MIT","keywords":["fakes","faketory","fakepoints","msw","standard-schema","testing","test-effective"],"type":"module","exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}},"main":"./dist/index.mjs","module":"./dist/index.mjs","types":"./dist/index.d.mts","publishConfig":{"access":"public"},"engines":{"node":"^18.0.0 || ^20.0.0 || >=22.0.0"},"peerDependencies":{"@msw/data":"^1.0.0","vite":">=5.0.0"},"dependencies":{"@standard-schema/spec":"^1.0.0"},"devDependencies":{"@changesets/cli":"^2.29.6","@changesets/get-github-info":"^0.6.0","@changesets/types":"^6.1.0","@eslint/js":"^9.35.0","@faker-js/faker":"^10.1.0","@msw/data":"^1.0.0","@types/node":"^24.10.1","@vitest/browser":"^3.2.0","@vitest/browser-playwright":"^4.0.0","dotenv":"^17.2.3","eslint":"^9.8.0","eslint-config-prettier":"^10.1.8","prettier":"^3.6.2","pretty-quick":"^4.2.2","simple-git-hooks":"^2.13.1","tsdown":"^0.16.2","typescript":"^5.5.4","typescript-eslint":"^8.42.0","valibot":"^1.1.0","vite":"^7.2.4","vitest":"^4.0.0"},"simple-git-hooks":{"pre-commit":"pnpm fmt.staged && pnpm lint"},"scripts":{"build":"tsdown","change":"changeset","dev":"tsdown --watch --sourcemap","fmt":"prettier --write .","fmt.check":"prettier --check .","fmt.staged":"pretty-quick --staged","lint":"eslint --cache .","lint:fix":"pnpm lint --fix","release":"changeset publish","release.pkg-pr-new":"pnpm dlx pkg-pr-new publish","test":"vitest"},"_id":"@test-effective/fakes@0.4.0","_integrity":"sha512-VgrbUfqEaiuN+KNI1Kiasge34559LRquqmve7lT08vC7EL4u/9xZrDshsqVmuuaWJ62aybiRBvtT5G6gcbhO8g==","_resolved":"/tmp/0bc57d352d5d977ceb59dc93c2b2b2ce/test-effective-fakes-0.4.0.tgz","_from":"file:test-effective-fakes-0.4.0.tgz","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-VgrbUfqEaiuN+KNI1Kiasge34559LRquqmve7lT08vC7EL4u/9xZrDshsqVmuuaWJ62aybiRBvtT5G6gcbhO8g==","shasum":"1ff68767380eb486fbc6db1db4dd81c2e244204f","tarball":"https://registry.npmjs.org/@test-effective/fakes/-/fakes-0.4.0.tgz","fileCount":6,"unpackedSize":39895,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@test-effective%2ffakes@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCnLU1lP5qr+iOH1Uc/O2+E7xCjXP78g8HlvpCj27GFegIgLK+GsDIUDoVuMlnKGepMtfs3RKi1AGXruwj7Ly66zns="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ddf09193-45c7-4ded-aaea-0b3b05861130"}},"directories":{},"maintainers":[{"name":"shairez","email":"shai@hirez.io"},{"name":"hirez.io","email":"opensource@hirez.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fakes_0.4.0_1774609440019_0.8256179475806982"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-21T15:31:16.659Z","modified":"2026-03-27T11:04:00.606Z","0.0.0":"2025-11-21T15:31:16.932Z","0.0.1":"2025-11-21T19:05:45.957Z","0.0.2":"2025-11-21T22:37:40.074Z","0.0.3":"2025-11-25T14:50:28.951Z","0.0.4":"2025-11-27T21:35:43.708Z","0.1.0":"2025-12-26T12:11:48.430Z","0.2.0":"2026-01-07T00:26:08.969Z","0.3.0":"2026-01-09T23:52:45.433Z","0.4.0":"2026-03-27T11:04:00.269Z"},"bugs":{"url":"https://github.com/test-effective/fakes/issues"},"author":{"name":"Shai Reznik","url":"HiRez.io"},"license":"MIT","homepage":"https://github.com/test-effective/fakes","keywords":["fakes","faketory","fakepoints","msw","standard-schema","testing","test-effective"],"repository":{"type":"git","url":"git+https://github.com/test-effective/fakes.git"},"description":"Test Effective Fakes","maintainers":[{"name":"shairez","email":"shai@hirez.io"},{"name":"hirez.io","email":"opensource@hirez.io"}],"readme":"<div align=\"center\">\n<h1>Test Effective Fakes</h1>\n\n**Fake Server Utils for UI Component Tests** 🎭\n\n</div>\n\nA powerful testing utility library designed to simplify creating and managing a fake server layer for UI component tests.\n\n> (No real data was harmed in the making of this library... 😉)\n\n## What's a fake server layer?\n\nA fake server layer needs two things to successfully simulate a real server:\n\n1. A way to store and manipulate **data** the same way the real server would.\n2. A way to react to **http requests** the way a real server would.\n\nTest Effective Fakes provides two powerful features to help you create and manage a fake server layer:\n\n### Faketories\n\nA util on top of [MSW Data](https://github.com/mswjs/data) for making it easier to seed or generate fake test data with automatic partial merging, relational seeding and more.\n\n### Fakepoints\n\nAuto-discovery system for organizing test setup code. Instead of manually importing MSW handlers across test files, fakepoints automatically discover and register your fake endpoints at a predictable time.\n\n## Table of Contents\n\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [1. Faketories](#1-faketories)\n  - [1.1 Create a Faketory](#11-create-a-faketory)\n  - [1.2 The `generateOne()` Method](#12-the-generateone-method)\n  - [1.3 The `generateMany()` Method](#13-the-generatemany-method)\n  - [1.4 The `seedOne()` Method](#14-the-seedone-method)\n  - [1.5 The `seedMany()` Method](#15-the-seedmany-method)\n  - [1.6 Direct Store Access](#16-direct-store-access)\n  - [1.7 Resetting Data](#17-resetting-data)\n  - [1.8 ⚠️ IMPORTANT: Preventing Stale Data](#18-️-important-preventing-stale-data)\n- [2. Fakepoints](#2-fakepoints)\n  - [2.1 How It Works](#21-how-it-works)\n  - [2.2 Setup](#22-setup)\n  - [2.3 Collecting Values from Fakepoints](#23-collecting-values-from-fakepoints)\n\n- [Contributing](#contributing)\n- [Code Of Conduct](#code-of-conduct)\n- [License](#license)\n\n## Requirements\n\n- `@msw/data` `^1.0.0` (peer dependency)\n- Vite (if you're using the fakepoints plugin)\n\n## Installation\n\n```bash\npnpm install -D @test-effective/fakes @msw/data\n```\n\n> **Recommended Additional Libraries**\n\nFor the best experience, we recommend installing these additional libraries:\n\n```bash\npnpm install -D @test-effective/fakes @msw/data @faker-js/faker valibot\n```\n\n- **`@faker-js/faker`** - Generate realistic fake data for your faketories\n- **`valibot`** - Schema validation library (but you can use `zod` or any other standard schema implementation)\n\n## 1. Faketories\n\nFaketories are factories for generating fake test data.\n\nBasically, \"factories of fakes\"... \"Faketories\"... yeah, we know, great pun 😅.\n\nThey provide four methods:\n\n- `generateOne()` / `generateMany()` - Generate standalone entities (not stored in DB)\n- `seedOne()` / `seedMany()` - Generate and store entities in your MSW Data collection\n\n### 1.1 Create a Faketory\n\n```typescript\nimport { createFaketory } from '@test-effective/fakes';\nimport { Collection } from '@msw/data';\nimport { faker } from '@faker-js/faker';\nimport * as v from 'valibot';\n\n// Define your fake db table schema (supports all standard schema implementations)\nconst userSchema = v.object({\n  id: v.string(),\n  email: v.string(),\n  name: v.string(),\n});\n\n// Create a MSW data collection, we called it 'store' because it's shorter.\nconst userStore = new Collection({ schema: userSchema });\n\nconst userFaketory = createFaketory(\n  userStore, // MSW Data Store\n  async ({ seedingMode, index, partial }) => {\n    // Return default values\n    // partial is automatically merged - no need to spread it!\n    return {\n      id: faker.string.uuid(),\n      email: faker.internet.email(),\n      name: faker.person.fullName(),\n    };\n  },\n);\n\n// Use it in tests\nconst user = await userFaketory.seedOne({ email: 'test@example.com' });\n\n// Use it in fakepoints\nconst users = userFaketory.store.findMany();\n```\n\n**Props available in your faketory function:**\n\n- `seedingMode` - is 'true' when called with one of the seeding methods.\n- `index` - when creating many entities, this is the index of the entity being created.\n- `partial` - Override default values created by the faketory function\n\n  **Auto-Merge Magic ✨**\n\nPartial data is **automatically merged** with defaults so you don't need to spread `...partial` in the end of your faketory function.\n\n### 1.2 The `generateOne()` Method\n\nGenerates a single standalone entity (**not stored** in the fake DB):\n\n```typescript\n// Single entity with defaults\nconst user = await userFaketory.generateOne();\n\n// Single entity with overrides (auto-merged!)\nconst admin = await userFaketory.generateOne({ email: 'admin@example.com' });\n```\n\n### 1.3 The `generateMany()` Method\n\nGenerates multiple standalone entities (**not stored** in the fake DB):\n\n```typescript\n// Multiple entities (returns array)\nconst users = await userFaketory.generateMany(5);\n\n// Multiple entities with custom data (returns array, auto-merged!)\nconst users = await userFaketory.generateMany([\n  { email: 'one@example.com' },\n  { email: 'two@example.com' },\n]);\n\n// Generate N entities, merge partials by index (auto-merged!)\nconst users = await userFaketory.generateMany(3, [\n  { email: 'first@example.com' },\n]);\n// Creates 3 entities:\n// - users[0] has email: 'first@example.com' (merged with defaults)\n// - users[1] uses all defaults\n// - users[2] uses all defaults\n```\n\n### 1.4 The `seedOne()` Method\n\nCreates and **stores** a single entity in the MSW Data store:\n\n```typescript\n// Single entity (returns T)\nconst user = await userFaketory.seedOne();\n\n// Single entity with overrides (returns T, auto-merged!)\nconst admin = await userFaketory.seedOne({ email: 'admin@example.com' });\n```\n\n### 1.5 The `seedMany()` Method\n\nCreates and **stores** multiple entities in the MSW Data store:\n\n```typescript\n// Multiple entities (returns T[])\nconst users = await userFaketory.seedMany(10);\n\n// Multiple entities with custom data (returns T[], auto-merged!)\nconst users = await userFaketory.seedMany([\n  { email: 'one@example.com' },\n  { email: 'two@example.com' },\n]);\n\n// Seed N entities, merge partials by index (auto-merged!)\nconst users = await userFaketory.seedMany(5, [\n  { email: 'admin@example.com', name: 'Admin' },\n  { email: 'user@example.com' },\n]);\n// Creates 5 entities in the store:\n// - users[0] has email: 'admin@example.com' and name: 'Admin'\n// - users[1] has email: 'user@example.com' (other fields use defaults)\n// - users[2-4] use all defaults\n```\n\n### 1.6 Direct Store Access\n\nNeed to query or update your fake data? No problem!\n\nAccess the MSW Data collection directly via the `store` property.\n\n**Why \"store\" and not \"collection\"?**\n\nHonestly? Because `store` is shorter than `collection` 😊\n\nUnder the hood, `store` is the MSW Data `Collection` instance, giving you full access to all its methods:\n\n```typescript\n// Query all users\nconst allUsers = userFaketory.store.findMany();\n\n// Find specific user\nconst user = userFaketory.store.findFirst(q =>\n  q.where({ email: 'test@example.com' }),\n);\n\n// Update user\nuserFaketory.store.update({\n  where: { id: user.id },\n  data: { name: 'Updated Name' },\n});\n\n// Delete user\nuserFaketory.store.delete({ where: { id: user.id } });\n```\n\n### 1.7 Resetting Data\n\nSometimes you need to hit the reset button (we've all been there):\n\n```typescript\n// Reset a single faketory\nuserFaketory.reset();\n```\n\n### 1.8 ⚠️ IMPORTANT: Preventing Stale Data\n\n**Always call `resetAllFaketories()` in a global `beforeEach` hook** to prevent stale data from previous tests. Without this, entities created in one test can leak into subsequent tests, causing flaky and unpredictable test failures.\n\n```typescript\n// tests-setup.ts\nimport { resetAllFaketories } from '@test-effective/fakes';\nimport { beforeEach } from 'vitest';\n\nbeforeEach(() => {\n  resetAllFaketories(); // Clears all faketory collections before each test\n});\n```\n\n<br/><br/>\n\n## 2. Fakepoints\n\nFakepoints (Fake Endpoints, we're very creative with naming here 🎯) are registration points for setting up the fake remote endpoints layer for your tests.\n\nInstead of manually importing MSW handlers across your test files, fakepoints auto-discover them and let you set them up at a predictable time.\n\n### 2.1 How It Works\n\n1. You create `.fakepoints.ts` files (or use a custom pattern via the `filePattern` option) and use the `registerFakepoints()` function to register your fake endpoints.\n2. The Vite plugin scans your workspace for all matching files and creates a virtual module `collected-fakepoints` that imports them all.\n3. When you call `runAllFakepoints()`, all registered functions run.\n\n**Use cases:**\n\n- Registering MSW handlers\n- Replacing remote services with fake ones\n\n### 2.2 Setup\n\n1. **Add the Vite plugin** to your `vite.config.ts`:\n\n```typescript\nimport { collectFakepointsPlugin } from '@test-effective/fakes';\n\nexport default defineConfig({\n  plugins: [\n    collectFakepointsPlugin({\n      workspaceRoot: '/absolute/path/to/your/project', // Optional, must be absolute when provided\n      rootsToScan: ['libs/feature-a', 'libs/shared'], // Optional, absolute or relative to workspaceRoot\n      filePattern: '.fakepoints.ts', // Optional, file pattern to match (default: '.fakepoints.ts')\n      debug: false, // Optional, enables debug logging\n      watch: true, // Optional, enables file watching for auto test reruns (default: true)\n      ignoreDirs: ['tmp', '.nx', 'coverage'], // Optional, directories to ignore when scanning\n    }),\n  ],\n});\n```\n\n**Configuration Options:**\n\n- **`rootsToScan`** (optional) - Directory paths to scan for fakepoints files. Paths can be absolute, or relative to `workspaceRoot`. This is the most efficient option for monorepos or large workspaces because only listed directories are scanned.\n\n- **`workspaceRoot`** (optional) - Absolute root directory to scan for fakepoints files. Defaults to `process.cwd()` when `rootsToScan` is not provided.\n\n  If `rootsToScan` is provided, `workspaceRoot` is required and is used as the base directory for relative `rootsToScan` entries.\n\n- **`filePattern`** (optional, default: `'.fakepoints.ts'`) - The file pattern to match when scanning for fakepoints files. This allows you to use a custom naming convention for your fakepoints files.\n\n  **Examples:**\n\n  ```typescript\n  filePattern: '.fakes.ts'; // Match *.fakes.ts files\n  filePattern: '.test-data.ts'; // Match *.test-data.ts files\n  filePattern: '.fixtures.ts'; // Match *.fixtures.ts files\n  ```\n\n- **`watch`** (optional, default: `true`) - Enable file watching for fakepoints files. When enabled, adding, deleting, or changing fakepoints files will automatically trigger test reruns. Disable this if you experience performance issues with large workspaces.\n\n- **`ignoreDirs`** (optional) - Array of directory names to ignore when scanning for fakepoints files during initial collection. Note: Vite's watcher automatically ignores `.git`, `node_modules`, `test-results`, cache, and configured out directories. Common directories to add: `'tmp'`, `'.nx'`, `'coverage'`, `'build'`, `'out'`, `'dist'`, `'.cache'`.\n\n- **`debug`** (optional, default: `false`) - Enable debug mode to see detailed logging about plugin operations including:\n  - Watcher ignore patterns being configured\n  - Virtual module loading\n  - Number of fakepoints files loaded\n  - File watcher setup status\n  - All file system events for fakepoints files (add, change, unlink)\n\n  Useful for troubleshooting issues with file discovery, watching, or test reruns.\n\n2. **Create fakepoints files** anywhere in your project (default pattern: `.fakepoints.ts`):\n\n```typescript\n// src/users/user.fakepoints.ts\nimport { registerFakepoints } from '@test-effective/fakes';\nimport { setupUserHandlers } from './handlers';\n\nregisterFakepoints(() => {\n  setupUserHandlers();\n  console.log('✅ User fakepoints registered');\n});\n```\n\n```typescript\n// src/posts/post.fakepoints.ts\nimport { registerFakepoints } from '@test-effective/fakes';\nimport { setupPostHandlers } from './handlers';\n\nregisterFakepoints(() => {\n  setupPostHandlers();\n});\n```\n\n3. **Import the virtual module** in your test setup (this is where the magic happens ✨):\n\n```typescript\n// tests-setup.ts\nimport 'collected-fakepoints'; // Auto-imports all fakepoints files\nimport { runAllFakepoints } from '@test-effective/fakes';\nimport { beforeAll } from 'vitest';\n\nbeforeAll(() => {\n  runAllFakepoints(); // Runs all registered fakepoints\n});\n```\n\n### 2.3 Collecting Values from Fakepoints\n\nFakepoints can also return values that are collected when you call `runAllFakepoints()`. This is especially useful for collecting provider arrays (like in Angular), configuration objects, or any other test setup data that needs to be gathered from multiple files.\n\n#### Basic Example - Collecting Values\n\n```typescript\n// src/users/user.fakepoints.ts\nimport { registerFakepoints } from '@test-effective/fakes';\n\nregisterFakepoints(() => {\n  return { module: 'users', handlers: 3 };\n});\n```\n\n```typescript\n// src/posts/post.fakepoints.ts\nimport { registerFakepoints } from '@test-effective/fakes';\n\nregisterFakepoints(() => {\n  return { module: 'posts', handlers: 2 };\n});\n```\n\n```typescript\n// tests-setup.ts\nimport 'collected-fakepoints';\nimport { runAllFakepoints } from '@test-effective/fakes';\n\ntype ModuleInfo = { module: string; handlers: number };\nconst modules = runAllFakepoints<ModuleInfo>();\n// Result: [{ module: 'users', handlers: 3 }, { module: 'posts', handlers: 2 }]\n```\n\n## Contributing\n\nWant to contribute? Yayy! 🎉\n\nPlease read and follow our [Contributing Guidelines](CONTRIBUTING.md) to learn what are the right steps to take before contributing your time, effort and code.\n\nThanks 🙏\n\n<br/>\n\n## Code Of Conduct\n\nBe kind to each other and please read our [code of conduct](CODE_OF_CONDUCT.md).\n\n<br/>\n\n## License\n\nMIT\n","readmeFilename":"README.md"}