{"_id":"@codeforbreakfast/eventsourcing-testing-contracts","_rev":"12-eb1035435b74643d871b6d1fabff3045","name":"@codeforbreakfast/eventsourcing-testing-contracts","dist-tags":{"latest":"0.3.12"},"versions":{"0.2.2":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.2.2","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","vitest","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.2.2","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"b13165b17f17de53d0e074cbbea0b7744b046d6a","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.2.2.tgz","fileCount":33,"integrity":"sha512-oNTgioHicb8sIAYrtWwd9zPyeeU5yhIHfQbcjDjkoGTAN9v1esjB3h+4NL2Mx8p0IDVp/AavWcuYA1btKv/r4g==","signatures":[{"sig":"MEUCIEQ99SXvVDdmgG7w5ldL68a2hzZz5L1Z2vY1GDLZRXeNAiEAyAFdkrwUQMKytf6yOUnQZ5V76gWPTkDU96Ty9AW3uNo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232673},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"9510ad686c016cbbf486f3572a78ce3b8e031131","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target bun --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc --build --force","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","publish:package":"npm publish --access public"},"_npmUser":{"name":"graemef","email":"graemef@gmail.com"},"repository":{"url":"git+https://github.com/codeforbreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"10.8.2","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-transport-contracts":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.17.14","eslint":"9.36.0","typescript":"5.9.2","@types/node":"24.5.2"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.2.2_1758706997145_0.11315317778484979","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.0","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.0","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"fde836d0e46c354164ef618ff808c9ad61022016","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.0.tgz","fileCount":43,"integrity":"sha512-n8MsmbCMQ8GaKJm5G2/eiZVNBcgUM1CoaYMSkGdk6HxBqYy/O+1qSU0FIBiT0ILtPsr0GIRZX77G+cya8nixUw==","signatures":[{"sig":"MEQCIF/u1XKv/vTMw8Fs4nvHmY93Z7Le4q/av4GJ5fIDUYD+AiAWcXmevIgs6v2fSmyAl4dEqtjDoZIwcMANhEBpE860xA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":355198},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"18e324d0d06e1524923d166cf7f6d84958155b5a","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target bun --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc --build --force","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","publish:package":"npm publish --access public"},"_npmUser":{"name":"graemef","email":"graemef@gmail.com"},"repository":{"url":"git+https://github.com/codeforbreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"10.8.2","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-transport":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.17.14","eslint":"9.36.0","typescript":"5.9.2","@types/node":"24.5.2","@codeforbreakfast/buntest":"workspace:*"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.3.0_1759054233184_0.6309950298785914","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.3","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.3","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"42ab2640ed5e69e8cea9b72fc28f6983d6025b5e","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.3.tgz","fileCount":43,"integrity":"sha512-TNXcUhiVMrdzBGoedbv9paLMl8hgZlGqhFkHwlhS5eCiq/MV490ZOozQdFe0QaNtJLoTmR7y6NElgqBM70Aq8g==","signatures":[{"sig":"MEYCIQCEvQN+Zzw0P1SO2S8Mqie4+VlfL7KtnhZ60Fo54W4h1gIhANX61DHRNYFocvxNovVIrho7KCWKJR7E7lG9utPKyqlP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codeforbreakfast%2feventsourcing-testing-contracts@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":355360},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"b51721207db43b5ba8b9228b79cfa36219146005","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target bun --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc --build --force","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","validate:pack":"bun pm pack --dry-run","publish:package":"npm publish --access public","check:publishable":"npm view $npm_package_name@$npm_package_version version >/dev/null 2>&1 && exit 1 || exit 0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8ce365a-5a77-4d98-a771-f6b76d7811d6"}},"repository":{"url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"11.6.1","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-transport":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.17.14","eslint":"9.36.0","typescript":"5.9.2","@types/node":"24.5.2","@codeforbreakfast/buntest":"workspace:*"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.3.3_1759068014952_0.6486796085896047","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.4","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.4","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"b76be81a3aae1db7aba9714beb11d516d6b989e0","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.4.tgz","fileCount":43,"integrity":"sha512-1v33LDlEqFQSPD32d5Y3NUIPM4Wf2wgXmpMua2UvMi8s5mMr3edpbQ1D7jZdmk6NoJpQgO95g6BTvb4+YCVz0A==","signatures":[{"sig":"MEUCIB+w3Cpf+01vwjvs3VT0pjA+tn5zP7yf9RjclhYpo1QhAiEAgLwXvtIOFDPEetdgNCc196NjKSQPpOEO0J818+rR0uE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codeforbreakfast%2feventsourcing-testing-contracts@0.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":354898},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"35106a1245f942e488807eea940f69a8a8af3b13","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target bun --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc --build --force","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","validate:pack":"bun pm pack --dry-run","publish:package":"npm publish --access public","check:publishable":"npm view $npm_package_name@$npm_package_version version >/dev/null 2>&1 && exit 1 || exit 0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8ce365a-5a77-4d98-a771-f6b76d7811d6"}},"repository":{"url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"11.6.1","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-transport":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.17.14","eslint":"9.36.0","typescript":"5.9.2","@types/node":"24.5.2","@codeforbreakfast/buntest":"workspace:*"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.3.4_1759154766137_0.7979956908388557","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.5","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.5","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"4485fa6cd4064082ac5b13764cc63b84902db8b5","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.5.tgz","fileCount":43,"integrity":"sha512-r2mhtUImJv6fT51qVcrYHFsxAEaowEU1iqBq/YG0ssEtLNnkv6tnDopCPJkERJaCFhhfcDuLZGAVfQ6TpzE7Hg==","signatures":[{"sig":"MEUCIQDuGOIFMmGjDz7O7W1CpBnWScIk0uVvu5O6cT8quMbtywIgWkYDE95p0JRVioV+AAgstogD3hrpghjduv8vb3UmNLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codeforbreakfast%2feventsourcing-testing-contracts@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":381147},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"25c05b1804fe30d707ce5508addc73813ed6ebfc","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target bun --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc --build --force","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","validate:docs":"bun ../../scripts/validate-markdown-examples.ts","validate:pack":"bun pm pack --dry-run","publish:package":"npm publish --access public","check:publishable":"npm view $npm_package_name@$npm_package_version version >/dev/null 2>&1 && exit 1 || exit 0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8ce365a-5a77-4d98-a771-f6b76d7811d6"}},"repository":{"url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"11.6.1","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-transport":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.18.1","eslint":"9.36.0","typescript":"5.9.3","@types/node":"24.6.2","@codeforbreakfast/buntest":"workspace:*"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.3.5_1759677754017_0.37823125285489034","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.6","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.6","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"458655a63708e8f558ff2d5b8274b5c20cc42b95","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.6.tgz","fileCount":39,"integrity":"sha512-0gh8RRoa3+UIJp9tYgSBgP/UZa1Eu4pgzaScl+sPcGE79MUUmBnD9e6Or1D+oU1K5ZrCf41MGXq3Zxs7ipoDEQ==","signatures":[{"sig":"MEUCIHwZumkGwPYJSw0C/MzSYYYF2cKb7LpUWMbFJptW8Q9UAiEAyWME08gNey4oo3Qh60ib37PG1HaQPOEK7LKwtQOb2Z4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codeforbreakfast%2feventsourcing-testing-contracts@0.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":374551},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"6b33e587b5948de08c6fcfd7bebc0f93e22cd24b","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target bun --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc --build","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","validate:docs":"bun ../../scripts/validate-markdown-examples.ts","validate:pack":"bun pm pack --dry-run","publish:package":"npm publish --access public","check:publishable":"npm view $npm_package_name@$npm_package_version version >/dev/null 2>&1 && exit 1 || exit 0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8ce365a-5a77-4d98-a771-f6b76d7811d6"}},"repository":{"url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"11.6.1","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-transport":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.18.4","eslint":"9.36.0","typescript":"5.9.3","@types/node":"24.6.2","@codeforbreakfast/buntest":"workspace:*"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.3.6_1760267626899_0.6090065074009852","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.7","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.7","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"da1bcd6d3d0b02803c3bb300e96ac2678a129c42","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.7.tgz","fileCount":39,"integrity":"sha512-lftY/qAt3oam9gbM2Fe0Visx50bAhh4VU78Wa1KgVueTkgh+tW4XRYI1QiQ8upLLXJY7yXUVa7Qdw/tU5Knykg==","signatures":[{"sig":"MEUCIENdHG5/YQk5HfKapLJ3bJ3qAIheyniKInxCCfy7XHCdAiEAgMEllt2l9ihf423PkWjSmF0J0LySqj93Twj5GllaRQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codeforbreakfast%2feventsourcing-testing-contracts@0.3.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":374544},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"209ef435978ce052d57ea888fdc847b07011a674","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target node --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","validate:docs":"bun ../../scripts/validate-markdown-examples.ts","validate:pack":"bun pm pack --dry-run","publish:package":"npm publish --access public","check:publishable":"npm view $npm_package_name@$npm_package_version version >/dev/null 2>&1 && exit 1 || exit 0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8ce365a-5a77-4d98-a771-f6b76d7811d6"}},"repository":{"url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"11.6.2","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-transport":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.18.4","eslint":"9.37.0","typescript":"5.9.3","@types/node":"24.7.1","@codeforbreakfast/buntest":"workspace:*"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.3.7_1760430179347_0.03570120661628007","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.8","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.8","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"b93f3c2cad6757ad93ad8c2dfc7f666c8ebc40c4","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.8.tgz","fileCount":39,"integrity":"sha512-gZlkWsLwgLEqOejTkWiqyls4Wz1wburIubhrV4956Zo1Nqt0RjX0FeuwUP5N+ciEYvyMK7wtzGTWlVqSGj4/KA==","signatures":[{"sig":"MEUCIQDmJE4Oe7pfN+vQ1M/EUL/lSxxZdNHUKyw+5VNVxs5IsAIgOWJ47p2BXL2URJUqu7FmtExNERTtz2FZ0ICKEiXlCTw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codeforbreakfast%2feventsourcing-testing-contracts@0.3.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":374544},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"b86d91ea14ffcb2c9209ebfcbf6c48b4a9ff5876","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target node --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","validate:docs":"bun ../../scripts/validate-markdown-examples.ts","validate:pack":"bun pm pack --dry-run","publish:package":"npm publish --access public","check:publishable":"npm view $npm_package_name@$npm_package_version version >/dev/null 2>&1 && exit 1 || exit 0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8ce365a-5a77-4d98-a771-f6b76d7811d6"}},"repository":{"url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"11.6.2","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-transport":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.18.4","eslint":"9.37.0","typescript":"5.9.3","@types/node":"24.7.2","@codeforbreakfast/buntest":"workspace:*"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.3.8_1760796634572_0.6631575233522469","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.9","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.9","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"e8b7e8e25dd9094d8249a22a314fc951e7f5cc0f","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.9.tgz","fileCount":49,"integrity":"sha512-urXmV8mxpAm6/h8T30FGl/jV65HFSwYMxrASCiSeys+yQF6B2NwCUZo+XYRr6Mshh5UcNvKYjmBm1SWZ5Dxd4A==","signatures":[{"sig":"MEUCIQDLaVudUdVlXV/JTkUgwBpSBf0XOMMvjZp5VsYEZoK5LwIgEB3Ayhom3lBE0TfXxPagfkGwfmfWW0GcaKIy+7BCWWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codeforbreakfast%2feventsourcing-testing-contracts@0.3.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":399808},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"8aeb86d53d72d178720c7a9543b57a8a85177f25","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target node --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","validate:docs":"bun ../../scripts/validate-markdown-examples.ts","validate:pack":"bun pm pack --dry-run","publish:package":"npm publish --access public","check:publishable":"npm view $npm_package_name@$npm_package_version version >/dev/null 2>&1 && exit 1 || exit 0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8ce365a-5a77-4d98-a771-f6b76d7811d6"}},"repository":{"url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"11.6.2","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-store":"workspace:*","@codeforbreakfast/eventsourcing-transport":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.18.4","eslint":"9.38.0","typescript":"5.9.3","@types/node":"24.9.1","@codeforbreakfast/buntest":"workspace:*"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.3.9_1761488005312_0.4394005949496582","host":"s3://npm-registry-packages-npm-production"}},"0.3.10":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.10","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.10","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"4b12936e0816be022e8221d189bd0472706be163","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.10.tgz","fileCount":49,"integrity":"sha512-ee025flGegMrpxh6C/Zue+inZeyCHVwTdtMhRN3b2Fh/NexlTmwxTL049R2E0jUFWHPdt9H0HAznP25E1bePHg==","signatures":[{"sig":"MEQCIGLuN1zWtIkybFuNO/GxcH6XGRPBivLI+K/jTV+uH7X0AiBfUG3beTPStYCGGQsJkHXV6F9v+OsYgPkYbqneq/F8wQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codeforbreakfast%2feventsourcing-testing-contracts@0.3.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":399809},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"7f67156700fc3a5d4036c8d9fd4f905897e41917","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target node --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","validate:docs":"bun ../../scripts/validate-markdown-examples.ts","validate:pack":"bun pm pack --dry-run","publish:package":"npm publish --access public","check:publishable":"npm view $npm_package_name@$npm_package_version version >/dev/null 2>&1 && exit 1 || exit 0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8ce365a-5a77-4d98-a771-f6b76d7811d6"}},"repository":{"url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"11.6.2","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-store":"workspace:*","@codeforbreakfast/eventsourcing-transport":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.18.4","eslint":"9.38.0","typescript":"5.9.3","@types/node":"24.9.2","@codeforbreakfast/buntest":"workspace:*"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.3.10_1762159722181_0.6729895863441999","host":"s3://npm-registry-packages-npm-production"}},"0.3.11":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.11","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.11","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"dist":{"shasum":"835adc626f76c73c12b7b3263ec879a7528bea9b","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.11.tgz","fileCount":49,"integrity":"sha512-K8Byw1dFD0iqkAPJtWe9QWsabpOff/n6VwRW4GpRmsmN0AaoWtIOINxwx6OYuaTxYQhkOlfKueHyD1U7EeapBw==","signatures":[{"sig":"MEUCIGIJGwzkkdZqP7D/dsf5zReKKtA2IPvKI8biw6z0F1GGAiEA5KDZNQKZU7YXTfWKXhUV81Pa4h/hthQhXXHqiIqpXCg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codeforbreakfast%2feventsourcing-testing-contracts@0.3.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":399949},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"572968daaa6a79b98fb010df951d5f75bcd7f1c7","scripts":{"lint":"eslint . --ext .ts,.tsx","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target node --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"bun test --watch","validate:docs":"bun ../../scripts/validate-markdown-examples.ts","validate:pack":"bun pm pack --dry-run","publish:package":"npm publish --access public","check:publishable":"npm view $npm_package_name@$npm_package_version version >/dev/null 2>&1 && exit 1 || exit 0"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8ce365a-5a77-4d98-a771-f6b76d7811d6"}},"repository":{"url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","type":"git","directory":"packages/eventsourcing-testing-contracts"},"_npmVersion":"11.6.2","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","dependencies":{"@codeforbreakfast/eventsourcing-store":"workspace:*","@codeforbreakfast/eventsourcing-transport":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"effect":"3.18.4","eslint":"9.39.1","typescript":"5.9.3","@types/node":"24.10.0","@codeforbreakfast/bun-test-effect":"workspace:*"},"peerDependencies":{"effect":"^3.17.0"},"_npmOperationalInternal":{"tmp":"tmp/eventsourcing-testing-contracts_0.3.11_1764059358089_0.5954038652512954","host":"s3://npm-registry-packages-npm-production"}},"0.3.12":{"name":"@codeforbreakfast/eventsourcing-testing-contracts","version":"0.3.12","description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"build":"bun build ./src/index.ts --outdir ./dist --target node --format esm --external effect --external @effect/* --external @codeforbreakfast/* && bun x tsc","test":"bun test","test:watch":"bun test --watch","lint":"eslint . --ext .ts,.tsx","typecheck":"tsc --noEmit","clean":"rm -rf dist","publish:package":"npm publish --access public","validate:pack":"bun pm pack --dry-run","check:publishable":"npm view $npm_package_name@$npm_package_version version >/dev/null 2>&1 && exit 1 || exit 0","validate:docs":"bun ../../scripts/validate-markdown-examples.ts"},"keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"author":{"name":"Code for Breakfast"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","directory":"packages/eventsourcing-testing-contracts"},"bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","peerDependencies":{"effect":"^3.17.0"},"dependencies":{"@codeforbreakfast/eventsourcing-store":"workspace:*","@codeforbreakfast/eventsourcing-transport":"workspace:*"},"devDependencies":{"@codeforbreakfast/bun-test-effect":"workspace:*","@types/node":"24.10.0","effect":"3.19.9","typescript":"5.9.3","eslint":"9.39.1"},"publishConfig":{"access":"public"},"sideEffects":false,"engines":{"node":">=18.0.0"},"gitHead":"dc9291553d278cb59572e9fb1569fe0c01194eea","_id":"@codeforbreakfast/eventsourcing-testing-contracts@0.3.12","_nodeVersion":"20.19.6","_npmVersion":"11.6.2","dist":{"integrity":"sha512-t18Fu6S1NUvU5pxMQrvcLxdDCzZkOCXYfaOzgXoyDGolBpY3EXp2M0m+bS/UAZefJ3fc3RZ7xwWUn1ojWyh+Sw==","shasum":"7bd8b3adc5cc9aabd3dfc393614f7a566733485d","tarball":"https://registry.npmjs.org/@codeforbreakfast/eventsourcing-testing-contracts/-/eventsourcing-testing-contracts-0.3.12.tgz","fileCount":49,"unpackedSize":399949,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@codeforbreakfast%2feventsourcing-testing-contracts@0.3.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCDVfNfiTU119JMy2RQoVKcmXWslxOHtcrVnVyuaXjwQQIgOrWXXI7TTJiDWDYkd/piKlz8GhFke6KuYFKjkuvKaoA="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d8ce365a-5a77-4d98-a771-f6b76d7811d6"}},"directories":{},"maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eventsourcing-testing-contracts_0.3.12_1765443331666_0.5791008218400697"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-24T09:43:17.081Z","modified":"2025-12-11T08:55:32.306Z","0.2.2":"2025-09-24T09:43:17.319Z","0.3.0":"2025-09-28T10:10:33.408Z","0.3.3":"2025-09-28T14:00:15.126Z","0.3.4":"2025-09-29T14:06:06.312Z","0.3.5":"2025-10-05T15:22:34.244Z","0.3.6":"2025-10-12T11:13:47.092Z","0.3.7":"2025-10-14T08:22:59.570Z","0.3.8":"2025-10-18T14:10:34.755Z","0.3.9":"2025-10-26T14:13:25.510Z","0.3.10":"2025-11-03T08:48:42.370Z","0.3.11":"2025-11-25T08:29:18.270Z","0.3.12":"2025-12-11T08:55:31.914Z"},"bugs":{"url":"https://github.com/codeforbreakfast/eventsourcing/issues"},"author":{"name":"Code for Breakfast"},"license":"MIT","homepage":"https://github.com/codeforbreakfast/eventsourcing#readme","keywords":["testing","test-contracts","test-utilities","mocks","test-data","event-sourcing","transport","protocol","contracts","validation","compliance","bun-test","jest","effect","effect-ts","functional-programming","fp","typescript","type-safe"],"repository":{"type":"git","url":"git+https://github.com/CodeForBreakfast/eventsourcing.git","directory":"packages/eventsourcing-testing-contracts"},"description":"Comprehensive testing utilities for event sourcing implementations - Test contracts for transport and protocol implementations with mock utilities and test data generators","maintainers":[{"name":"graemef","email":"graemef@gmail.com"}],"readme":"# @codeforbreakfast/eventsourcing-testing-contracts\n\nComprehensive testing utilities for event sourcing implementations. This package provides test contracts, mock implementations, and testing utilities to validate any event sourcing transport or protocol implementation.\n\n## Features\n\n✅ **Complete Test Coverage** - Test contracts for transport, protocol, and integration scenarios\n✅ **Transport Agnostic** - Works with WebSocket, HTTP, SSE, or any custom transport\n✅ **Protocol Agnostic** - Tests core event sourcing behaviors regardless of message format\n✅ **Mock Implementations** - Ready-to-use mocks for testing your implementations\n✅ **Test Data Generators** - Utilities to generate test data and scenarios\n✅ **Best Practices** - Testing patterns and documentation for event sourcing systems\n\n## Installation\n\n```bash\nbun add -D @codeforbreakfast/eventsourcing-testing-contracts\n```\n\n## Test Categories\n\n### 1. Domain Contract Tests\n\nTest pure event sourcing domain behaviors that any implementation must respect.\n\nNote: This package currently focuses on transport-layer testing contracts. For domain-level event sourcing testing, you would need to implement your own test suite based on your aggregate and command handling logic.\n\n**Required Behaviors:**\n\n- Event ordering guarantees within streams\n- Optimistic concurrency control\n- Aggregate consistency and business invariants\n- Atomic command processing (all-or-nothing)\n- Exactly-once command processing semantics\n- No gaps in event numbers\n- Stream isolation\n\n### 2. Transport Contract Tests\n\nTest low-level message transport behaviors using comprehensive contract tests. The transport testing system includes separate contracts for client-side, server-side, and integrated client-server scenarios.\n\n#### Client Transport Contracts\n\nTest client-side transport implementations. For complete working examples, see:\n\n**WebSocket Implementation:**\n\n- `/packages/eventsourcing-transport-websocket/src/tests/integration/client-server.test.ts` (lines 36-116)\n- Shows how to create test context with `WebSocketConnector.connect()`\n- Demonstrates proper scope-based resource management\n- Includes real error handling and random port allocation\n\n**InMemory Implementation:**\n\n- `/packages/eventsourcing-transport-inmemory/src/tests/integration/client-server.test.ts` (lines 35-126)\n- Shows how to handle server instance sharing for in-memory transports\n- Demonstrates direct connection patterns without network protocols\n\n#### Server Transport Contracts\n\nTest server-side transport implementations that handle multiple clients. See the server transport implementations in:\n\n**WebSocket Server Implementation:**\n\n- `/packages/eventsourcing-transport-websocket/src/tests/integration/client-server.test.ts` (lines 45-74)\n- Uses `WebSocketAcceptor.make({ port, host })` with random port allocation\n- Shows proper server startup with scope-based cleanup\n- Demonstrates connection stream mapping to client transport interface\n\n**InMemory Server Implementation:**\n\n- `/packages/eventsourcing-transport-inmemory/src/tests/integration/client-server.test.ts` (lines 44-78)\n- Uses `InMemoryAcceptor.make()` for direct in-memory connections\n- Shows shared server instance pattern for coordinated client-server testing\n- Demonstrates server lifecycle management without network concerns\n\nNote: These examples focus on client-server integration tests. Dedicated server-only contract tests would require separate server test implementations.\n\n#### Client-Server Integration Contracts\n\nTest bidirectional communication between paired client and server transports.\n\n**Real-World Implementations:**\n\n- [WebSocket integration tests](../eventsourcing-transport-websocket/src/tests/integration/client-server.test.ts) - Lines 88-134\n- [InMemory integration tests](../eventsourcing-transport-inmemory/src/tests/integration/client-server.test.ts) - Lines 105-161\n\n**Example: WebSocket Transport Integration**\n\n```typescript\nimport { Effect, Stream, pipe } from 'effect';\nimport {\n  TransportMessage,\n  ConnectionState,\n  makeTransportMessage,\n  Server,\n} from '@codeforbreakfast/eventsourcing-transport';\nimport {\n  runClientServerContractTests,\n  type ClientServerTestContext,\n  type TransportPair,\n  type ClientTransport,\n  type ServerTransport,\n  waitForConnectionState as defaultWaitForConnectionState,\n  collectMessages as defaultCollectMessages,\n} from '@codeforbreakfast/eventsourcing-testing-contracts';\n\ndeclare const WebSocketConnector: {\n  connect: (url: string) => Effect.Effect<\n    {\n      readonly connectionState: Stream.Stream<ConnectionState, never, never>;\n      readonly publish: (msg: TransportMessage) => Effect.Effect<void, Error, never>;\n      readonly subscribe: (\n        filter?: (msg: TransportMessage) => boolean\n      ) => Effect.Effect<Stream.Stream<TransportMessage, never, never>, Error, never>;\n    },\n    Error,\n    never\n  >;\n};\n\ndeclare const WebSocketAcceptor: {\n  make: (config: {\n    port: number;\n    host: string;\n  }) => Effect.Effect<{ start: () => Effect.Effect<Server.Transport, Error, never> }, Error, never>;\n};\n\nconst mapConnectionForContract = (conn: Server.ClientConnection) => ({\n  id: String(conn.clientId),\n  transport: {\n    connectionState: conn.transport.connectionState,\n    publish: (msg: TransportMessage) =>\n      pipe(\n        msg,\n        conn.transport.publish,\n        Effect.mapError(() => new Error('Failed to publish message'))\n      ),\n    subscribe: (filter?: (msg: TransportMessage) => boolean) =>\n      pipe(\n        filter,\n        conn.transport.subscribe,\n        Effect.mapError(() => new Error('Failed to subscribe'))\n      ),\n  } satisfies ClientTransport,\n});\n\nconst mapServerTransportForContract = (transport: Server.Transport): ServerTransport => ({\n  connections: pipe(transport.connections, Stream.map(mapConnectionForContract)),\n  broadcast: (message: TransportMessage) =>\n    pipe(\n      message,\n      transport.broadcast,\n      Effect.mapError(() => new Error('Failed to broadcast'))\n    ),\n});\n\nconst mapClientTransportForContract = (transport: {\n  readonly connectionState: Stream.Stream<ConnectionState, never, never>;\n  readonly publish: (msg: TransportMessage) => Effect.Effect<void, Error, never>;\n  readonly subscribe: (\n    filter?: (msg: TransportMessage) => boolean\n  ) => Effect.Effect<Stream.Stream<TransportMessage, never, never>, Error, never>;\n}): ClientTransport => ({\n  connectionState: transport.connectionState,\n  publish: (msg: TransportMessage) =>\n    pipe(\n      msg,\n      transport.publish,\n      Effect.mapError(() => new Error('Failed to publish message'))\n    ),\n  subscribe: (filter?: (msg: TransportMessage) => boolean) =>\n    pipe(\n      filter,\n      transport.subscribe,\n      Effect.mapError(() => new Error('Failed to subscribe'))\n    ),\n});\n\nconst createWebSocketTestContext = (): Effect.Effect<ClientServerTestContext, never, never> =>\n  Effect.succeed({\n    makeTransportPair: (): TransportPair => {\n      const port = Math.floor(Math.random() * (65535 - 49152) + 49152);\n      const host = 'localhost';\n      const url = `ws://${host}:${port}`;\n\n      return {\n        makeServer: () =>\n          pipe(\n            { port, host },\n            WebSocketAcceptor.make,\n            Effect.flatMap((acceptor) => acceptor.start()),\n            Effect.map(mapServerTransportForContract)\n          ),\n\n        makeClient: () =>\n          pipe(\n            url,\n            WebSocketConnector.connect,\n            Effect.map(mapClientTransportForContract),\n            Effect.mapError(() => new Error('Failed to connect to server'))\n          ),\n      };\n    },\n\n    waitForConnectionState: (\n      transport: ClientTransport,\n      expectedState: ConnectionState,\n      timeoutMs?: number\n    ) => defaultWaitForConnectionState(transport.connectionState, expectedState, timeoutMs),\n\n    collectMessages: defaultCollectMessages,\n\n    makeTestMessage: (type: string, payload: unknown) => {\n      const id = `test-${Date.now()}-${Math.random()}`;\n      return makeTransportMessage(id, type, JSON.stringify(payload));\n    },\n  });\n\nrunClientServerContractTests('WebSocket', createWebSocketTestContext);\n```\n\n**Example: InMemory Transport Integration**\n\n```typescript\nimport { Effect, Stream, pipe } from 'effect';\nimport {\n  TransportMessage,\n  ConnectionState,\n  makeTransportMessage,\n} from '@codeforbreakfast/eventsourcing-transport';\nimport {\n  runClientServerContractTests,\n  type ClientServerTestContext,\n  type TransportPair,\n  type ClientTransport,\n  type ServerTransport,\n  waitForConnectionState as defaultWaitForConnectionState,\n  collectMessages as defaultCollectMessages,\n} from '@codeforbreakfast/eventsourcing-testing-contracts';\n\ntype InMemoryServer = {\n  readonly connections: Stream.Stream<\n    {\n      readonly clientId: string;\n      readonly transport: {\n        readonly connectionState: Stream.Stream<ConnectionState>;\n        readonly publish: (msg: TransportMessage) => Effect.Effect<void, unknown>;\n        readonly subscribe: (\n          filter?: (msg: TransportMessage) => boolean\n        ) => Effect.Effect<Stream.Stream<TransportMessage>, unknown>;\n      };\n    },\n    never,\n    never\n  >;\n  readonly broadcast: (message: TransportMessage) => Effect.Effect<void, unknown>;\n  readonly connector: () => Effect.Effect<\n    {\n      readonly connectionState: Stream.Stream<ConnectionState>;\n      readonly publish: (msg: TransportMessage) => Effect.Effect<void, unknown>;\n      readonly subscribe: (\n        filter?: (msg: TransportMessage) => boolean\n      ) => Effect.Effect<Stream.Stream<TransportMessage>, unknown>;\n    },\n    never,\n    never\n  >;\n};\n\ndeclare const InMemoryAcceptor: {\n  make: () => Effect.Effect<\n    { start: () => Effect.Effect<InMemoryServer, never, never> },\n    never,\n    never\n  >;\n};\n\nconst wrapPublish =\n  (transport: { readonly publish: (msg: TransportMessage) => Effect.Effect<void, unknown> }) =>\n  (msg: TransportMessage) =>\n    pipe(\n      msg,\n      transport.publish,\n      Effect.mapError(() => new Error('Failed to publish message'))\n    );\n\nconst wrapSubscribe =\n  (transport: {\n    readonly subscribe: (\n      filter?: (msg: TransportMessage) => boolean\n    ) => Effect.Effect<Stream.Stream<TransportMessage>, unknown>;\n  }) =>\n  (filter?: (msg: TransportMessage) => boolean) =>\n    pipe(\n      filter,\n      transport.subscribe,\n      Effect.mapError(() => new Error('Failed to subscribe'))\n    );\n\nconst wrapBroadcast =\n  (transport: {\n    readonly broadcast: (message: TransportMessage) => Effect.Effect<void, unknown>;\n  }) =>\n  (message: TransportMessage) =>\n    pipe(\n      message,\n      transport.broadcast,\n      Effect.mapError(() => new Error('Failed to broadcast'))\n    );\n\nconst mapServerConnection = (conn: {\n  readonly clientId: string;\n  readonly transport: {\n    readonly connectionState: Stream.Stream<ConnectionState>;\n    readonly publish: (msg: TransportMessage) => Effect.Effect<void, unknown>;\n    readonly subscribe: (\n      filter?: (msg: TransportMessage) => boolean\n    ) => Effect.Effect<Stream.Stream<TransportMessage>, unknown>;\n  };\n}) => ({\n  id: String(conn.clientId),\n  transport: {\n    connectionState: conn.transport.connectionState,\n    publish: wrapPublish(conn.transport),\n    subscribe: wrapSubscribe(conn.transport),\n  } satisfies ClientTransport,\n});\n\nconst mapServerConnections = (transport: InMemoryServer) =>\n  pipe(transport.connections, Stream.map(mapServerConnection));\n\nconst createServerTransport = (transport: InMemoryServer): ServerTransport => ({\n  connections: mapServerConnections(transport),\n  broadcast: wrapBroadcast(transport),\n});\n\nconst createClientTransport = (transport: {\n  readonly connectionState: Stream.Stream<ConnectionState>;\n  readonly publish: (msg: TransportMessage) => Effect.Effect<void, unknown>;\n  readonly subscribe: (\n    filter?: (msg: TransportMessage) => boolean\n  ) => Effect.Effect<Stream.Stream<TransportMessage>, unknown>;\n}): ClientTransport => ({\n  connectionState: transport.connectionState,\n  publish: wrapPublish(transport),\n  subscribe: wrapSubscribe(transport),\n});\n\nconst createInMemoryTestContext = (): Effect.Effect<ClientServerTestContext, never, never> =>\n  Effect.succeed({\n    makeTransportPair: (): TransportPair => {\n      let serverInstance: InMemoryServer | null = null;\n\n      return {\n        makeServer: () =>\n          pipe(\n            InMemoryAcceptor.make(),\n            Effect.flatMap((acceptor) => acceptor.start()),\n            Effect.tap((server) =>\n              Effect.sync(() => {\n                serverInstance = server;\n              })\n            ),\n            Effect.map(createServerTransport)\n          ),\n\n        makeClient: () =>\n          pipe(\n            () => {\n              if (!serverInstance) {\n                throw new Error('Server must be created before client');\n              }\n              return serverInstance;\n            },\n            Effect.sync,\n            Effect.flatMap((server) => server.connector()),\n            Effect.map(createClientTransport),\n            Effect.mapError(() => new Error('Failed to connect to server'))\n          ),\n      };\n    },\n\n    waitForConnectionState: (\n      transport: ClientTransport,\n      expectedState: ConnectionState,\n      timeoutMs?: number\n    ) => defaultWaitForConnectionState(transport.connectionState, expectedState, timeoutMs),\n\n    collectMessages: defaultCollectMessages,\n\n    makeTestMessage: (type: string, payload: unknown) => {\n      const id = `test-${Date.now()}-${Math.random()}`;\n      return makeTransportMessage(id, type, JSON.stringify(payload));\n    },\n  });\n\nrunClientServerContractTests('InMemory', createInMemoryTestContext);\n```\n\nBoth implementations also include transport-specific tests that verify implementation details beyond the standard contracts.\n\n**Required Client Behaviors:**\n\n- Scope-based connection lifecycle management\n- Message publishing with various payload types\n- Message subscription with optional filtering\n- Connection state monitoring via streams\n- Automatic resource cleanup when scopes close\n\n**Required Server Behaviors:**\n\n- Multiple client connection tracking\n- Message broadcasting to all connected clients\n- Individual client communication\n- Connection counting and lifecycle management\n- Resource cleanup during server shutdown\n\n**For detailed documentation on transport contracts, see:** [`packages/eventsourcing-testing-contracts/src/lib/transport/README.md`](./src/lib/transport/README.md)\n\n### 3. Event Sourcing Transport Tests\n\nExtended transport tests specifically for event sourcing scenarios.\n\nNote: This package currently focuses on generic transport contracts. Event sourcing-specific transport tests would be implemented as part of your event sourcing protocol layer.\n\n**Additional Features:**\n\n- Event stream filtering by pattern\n- Event ordering within streams\n- Event replay from specific positions\n- Transport metrics and monitoring\n- Event sourcing specific error handling\n\n### 4. Integration Test Suite\n\nTest the integration between transport layer and event sourcing concepts.\n\nNote: This package provides the building blocks for transport testing. Integration tests combining transport with event sourcing protocols would be implemented in your protocol layer packages.\n\n## Mock Implementations\n\n### Mock Transport\n\n```typescript\nimport { Effect, pipe } from 'effect';\nimport { makeTransportMessage } from '@codeforbreakfast/eventsourcing-transport';\nimport { makeMockTransport } from '@codeforbreakfast/eventsourcing-testing-contracts';\n\nconst program = Effect.scoped(\n  pipe(\n    makeMockTransport(),\n    Effect.flatMap((transport) => {\n      const testMessage = makeTransportMessage(\n        'msg-123',\n        'test-type',\n        JSON.stringify({ data: 'value' })\n      );\n\n      return pipe(\n        transport.publish(testMessage),\n        Effect.flatMap(() => transport.subscribe()),\n        Effect.map((subscription) => ({ transport, subscription }))\n      );\n    })\n  )\n);\n\nawait Effect.runPromise(program);\n```\n\n## Test Data Generators\n\n```typescript\nimport { makeTransportMessage } from '@codeforbreakfast/eventsourcing-transport';\nimport {\n  generateMessageId,\n  makeTestMessage,\n} from '@codeforbreakfast/eventsourcing-testing-contracts';\n\n// Generate unique message ID\nconst messageId = generateMessageId();\n\n// Create transport message with proper typing\nconst transportMessage = makeTransportMessage(\n  messageId,\n  'UserUpdated',\n  JSON.stringify({ userId: 123, value: 42 })\n);\n\n// Create simple test message\nconst simpleMessage = makeTestMessage('test-type', 'test-payload');\n```\n\n## Test Utilities\n\n### Wait for Conditions\n\n```typescript\nimport { Effect, Ref, pipe } from 'effect';\nimport { waitForCondition } from '@codeforbreakfast/eventsourcing-testing-contracts';\n\nconst program = pipe(\n  Ref.make(false),\n  Effect.flatMap((isConnectedRef) => waitForCondition(() => Ref.get(isConnectedRef), 5000, 100))\n);\n\nawait Effect.runPromise(program);\n```\n\n### Collect Stream with Timeout\n\n```typescript\nimport { Effect, Stream, pipe } from 'effect';\nimport { collectStreamWithTimeout } from '@codeforbreakfast/eventsourcing-testing-contracts';\n\nconst eventStream = Stream.make('event1', 'event2', 'event3');\n\nconst events = await pipe(\n  eventStream,\n  (stream) => collectStreamWithTimeout(stream, 3000),\n  Effect.runPromise\n);\n```\n\n### Common Test Scenarios\n\nFor common test scenarios, refer to the contract test implementations in this package. The contract tests demonstrate best practices for:\n\n- Testing connection lifecycle management\n- Testing message publishing and subscription\n- Testing concurrent operations\n- Testing error handling scenarios\n\n## Complete Example\n\nFor complete working examples of using the transport contract tests, see the actual transport implementations:\n\n**WebSocket Transport Testing:**\n\n- [WebSocket integration tests](../eventsourcing-transport-websocket/src/tests/integration/client-server.test.ts)\n- Full implementation showing `runClientServerContractTests` usage\n- Demonstrates proper scope management and resource cleanup\n- Includes WebSocket-specific tests beyond the standard contracts\n\n**InMemory Transport Testing:**\n\n- [InMemory integration tests](../eventsourcing-transport-inmemory/src/tests/integration/client-server.test.ts)\n- Shows in-memory transport testing patterns\n- Demonstrates shared server instance pattern\n- Includes simpler testing scenarios without network concerns\n\n### Basic Usage Example\n\n```typescript\nimport { describe, it, expect } from 'bun:test';\nimport { Effect, pipe } from 'effect';\nimport { makeTransportMessage } from '@codeforbreakfast/eventsourcing-transport';\nimport {\n  makeMockTransport,\n  collectMessages,\n} from '@codeforbreakfast/eventsourcing-testing-contracts';\n\ndescribe('My Transport', () => {\n  it('should publish and receive messages', async () => {\n    const program = Effect.scoped(\n      pipe(\n        makeMockTransport(),\n        Effect.flatMap((transport) => {\n          const message = makeTransportMessage(\n            'msg-123',\n            'test-type',\n            JSON.stringify({ data: 'value' })\n          );\n\n          return pipe(\n            transport.publish(message),\n            Effect.flatMap(() => transport.subscribe()),\n            Effect.flatMap((messageStream) => collectMessages(messageStream, 1, 1000)),\n            Effect.map((messages) => ({ messages, transport }))\n          );\n        }),\n        Effect.map(({ messages }) => messages)\n      )\n    );\n\n    const messages = await Effect.runPromise(program);\n    expect(messages).toHaveLength(1);\n    expect(messages[0]?.type).toBe('test-type');\n  });\n});\n```\n\n## Best Practices\n\n### 1. Test Organization\n\n- **Separate concerns:** Use domain tests for event sourcing rules, transport tests for message delivery\n- **Feature flags:** Declare which optional behaviors your transport supports\n- **Test isolation:** Each test should be independent with unique stream IDs\n- **Resource cleanup:** Always clean up resources after each test\n\n### 2. Mock Strategies\n\n- **Domain tests:** Mock the event store backend\n- **Transport tests:** Mock the network layer\n- **Integration tests:** Mock the server/backend\n\n### 3. Error Testing\n\n```typescript\nimport { Effect, pipe } from 'effect';\nimport { expectError } from '@codeforbreakfast/eventsourcing-testing-contracts';\n\nclass ValidationError {\n  readonly _tag = 'ValidationError';\n  constructor(readonly message: string) {}\n}\n\nconst invalidOperation = Effect.fail(new ValidationError('validation failed'));\n\nawait pipe(\n  invalidOperation,\n  (effect) => expectError(effect, (error) => error._tag === 'ValidationError'),\n  Effect.runPromise\n);\n```\n\n### 4. Performance Testing\n\n```typescript\nimport { Effect, pipe } from 'effect';\nimport { makeTransportMessage } from '@codeforbreakfast/eventsourcing-transport';\nimport { makeMockTransport } from '@codeforbreakfast/eventsourcing-testing-contracts';\nimport { expect } from 'bun:test';\n\nconst program = Effect.scoped(\n  pipe(\n    makeMockTransport(),\n    Effect.flatMap((transport) => {\n      const messages = Array.from({ length: 100 }, (_, i) =>\n        makeTransportMessage(`perf-test-${i}`, 'perf-test', JSON.stringify({ value: i }))\n      );\n\n      const startTime = Date.now();\n\n      return pipe(\n        Effect.all(\n          messages.map((msg) => transport.publish(msg)),\n          { concurrency: 'unbounded' }\n        ),\n        Effect.map(() => Date.now() - startTime)\n      );\n    })\n  )\n);\n\nconst duration = await Effect.runPromise(program);\nexpect(duration).toBeLessThan(1000);\n```\n\n## Feature Support Matrix\n\n| Feature               | Required | WebSocket | HTTP | SSE |\n| --------------------- | -------- | --------- | ---- | --- |\n| Connection Management | ✅       | ✅        | ✅   | ✅  |\n| Event Subscription    | ✅       | ✅        | ❌   | ✅  |\n| Command Processing    | ✅       | ✅        | ✅   | ❌  |\n\nLegend: ✅ Supported | ❌ Not Supported\n\n## License\n\nMIT - See LICENSE file for details\n","readmeFilename":"README.md"}