{"_id":"@camcima/finita","_rev":"10-ea57bfc1bad9050f0f8c25a64e1f06ff","name":"@camcima/finita","dist-tags":{"latest":"4.3.0"},"versions":{"1.0.0":{"name":"@camcima/finita","version":"1.0.0","keywords":["statemachine","state machine","fsm","status","process"],"author":{"url":"https://github.com/camcima","name":"camcima"},"license":"MIT","_id":"@camcima/finita@1.0.0","maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"homepage":"https://github.com/camcima/finita","bugs":{"url":"https://github.com/camcima/finita/issues"},"dist":{"shasum":"ca9b6a093f87fadbad18cd0b2450a3b8f2fa5670","tarball":"https://registry.npmjs.org/@camcima/finita/-/finita-1.0.0.tgz","fileCount":294,"integrity":"sha512-1M6cliuJoVlGeZfjxZuYypSSRRIWAYerh1BxDkMdUifGk0zfHnZagpG81R14U61ZlrZXo3ggIy58jlzKxhZ3AA==","signatures":[{"sig":"MEUCIB5ruMOoDpoHpuxzLzTdjPmozV6m1vPH6yoV+cAdkYqRAiEAqfG36Tnak90x62nN8U58XZe1kc7AjkrIjY+CQm6aJDo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178976},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"6f97c95909c40eb680a5b82b0f6ba41bd35fa031","scripts":{"lint":"tsc --noEmit && eslint src/ tests/","test":"vitest run","build":"tsc","format":"prettier --write .","release":"release-it","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml"},"_npmUser":{"name":"camcima","email":"camcima@hotmail.com"},"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"_npmVersion":"11.6.3","description":"A full-featured finite state machine library for TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.1.0","vitest":"^3.0.0","prettier":"^3.8.1","@eslint/js":"^10.0.1","release-it":"^19.2.4","typescript":"^5.7.0","typescript-eslint":"^8.57.2","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/finita_1.0.0_1774401158759_0.3682532385853583","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@camcima/finita","version":"2.0.0","keywords":["statemachine","state machine","fsm","status","process"],"author":{"url":"https://github.com/camcima","name":"camcima"},"license":"MIT","_id":"@camcima/finita@2.0.0","maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"homepage":"https://github.com/camcima/finita","bugs":{"url":"https://github.com/camcima/finita/issues"},"dist":{"shasum":"b8c5a94f64f898612a4c428975a50123962b6a46","tarball":"https://registry.npmjs.org/@camcima/finita/-/finita-2.0.0.tgz","fileCount":294,"integrity":"sha512-R03sqYYNaAKuq6UoQqKzm2T9/9dKt+LjXfCQRNXGTm7NbKlH9P9CYdWHvIdh2vikQ4vI41CRyzwf3F6/QaX0rQ==","signatures":[{"sig":"MEQCIA7dC0sErp4pCOwzFUJ91YLsr35qUrAvxe7r9XiwUw5MAiA+hL4TQXC2cFpMbneU6t+SjxR7pHTy4nDTvrk5RJ1log==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182451},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"d3ffc3c9bff30d1df6d85c22741d780bccf038be","scripts":{"lint":"tsc --noEmit && tsc --project tsconfig.test.json && eslint src/ tests/","test":"vitest run","build":"tsc","format":"prettier --write .","release":"release-it","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml"},"_npmUser":{"name":"camcima","email":"camcima@hotmail.com"},"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"_npmVersion":"11.6.3","description":"A full-featured finite state machine library for TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"eslint":"^10.1.0","vitest":"^3.0.0","prettier":"^3.8.1","@eslint/js":"^10.0.1","release-it":"^19.2.4","typescript":"^5.7.0","typescript-eslint":"^8.57.2","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/finita_2.0.0_1774431440513_0.5028161900291599","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@camcima/finita","version":"2.1.0","keywords":["statemachine","state machine","fsm","status","process"],"author":{"url":"https://github.com/camcima","name":"camcima"},"license":"MIT","_id":"@camcima/finita@2.1.0","maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"homepage":"https://github.com/camcima/finita","bugs":{"url":"https://github.com/camcima/finita/issues"},"dist":{"shasum":"2356bfa43852c79589fcb6f21fdf093737ecf6b3","tarball":"https://registry.npmjs.org/@camcima/finita/-/finita-2.1.0.tgz","fileCount":9,"integrity":"sha512-T0eL+rs+0i0/7vsEPF3CDL3SvLDA0pP0JzMZQfumttNirsevz0zWtxGLT9yVA5dsKZX8ug9Mzx70QMivHw2kOg==","signatures":[{"sig":"MEUCIDZPZDsqigmd2sfu12rFUCZ8E6TqiELWKxOXn54HWRWOAiEAzFvKmpt1cioVsGYFG6K/QD2rKJ/0isZlkxgqCt3k3AE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297676},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"e7f174c5b757eac699d2f36feb3c53489581d82d","scripts":{"lint":"tsc --noEmit && tsc --project tsconfig.test.json && eslint src/ tests/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"lefthook install","release":"release-it","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml"},"_npmUser":{"name":"camcima","email":"camcima@hotmail.com"},"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"_npmVersion":"11.6.3","description":"A full-featured finite state machine library for TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.1.0","vitest":"^3.0.0","lefthook":"^2.1.4","prettier":"^3.8.1","@eslint/js":"^10.0.1","release-it":"^19.2.4","typescript":"^5.7.0","@types/node":"^25.5.2","typescript-eslint":"^8.57.2","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/finita_2.1.0_1775322261037_0.41963416298498024","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@camcima/finita","version":"2.2.0","keywords":["statemachine","state machine","fsm","status","process"],"author":{"url":"https://github.com/camcima","name":"camcima"},"license":"MIT","_id":"@camcima/finita@2.2.0","maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"homepage":"https://github.com/camcima/finita","bugs":{"url":"https://github.com/camcima/finita/issues"},"dist":{"shasum":"4a3e53114b210dfce49d6a33e05eb4a4bdccb531","tarball":"https://registry.npmjs.org/@camcima/finita/-/finita-2.2.0.tgz","fileCount":9,"integrity":"sha512-rBN61P5M2Nl5FcwTgyFGvfCkAw8kW2tF8Tl+hf7KP6CS/s3NJ0P+wPsDeMkjilMTXuquyyKoQQiaTLS0JXAONA==","signatures":[{"sig":"MEUCIGs1YBR1Wk8uHDERUO2xI32nyJozfz1DVEZVGzjHZju9AiEAks7XRI5lwAxYKETpeQpL7bCoMZglXirY3rYbZSrHDu4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298644},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"e5f66ddcb5453622b17a172326ba11b403d184dd","scripts":{"lint":"tsc --noEmit && tsc --project tsconfig.test.json && eslint src/ tests/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"lefthook install","release":"release-it","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml","security:audit":"npm audit","security:secrets":"gitleaks detect --no-banner"},"_npmUser":{"name":"camcima","email":"camcima@hotmail.com"},"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"_npmVersion":"11.6.3","description":"A full-featured finite state machine library for TypeScript","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","eslint":"^10.1.0","vitest":"^3.2.4","lefthook":"^2.1.4","prettier":"^3.8.1","@eslint/js":"^10.0.1","release-it":"^19.2.4","typescript":"^6.0.2","@types/node":"^25.5.2","@commitlint/cli":"^20.5.0","typescript-eslint":"^8.57.2","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/finita_2.2.0_1775487719591_0.2732080396600489","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@camcima/finita","version":"3.0.0","keywords":["statemachine","state machine","fsm","status","process"],"author":{"url":"https://github.com/camcima","name":"camcima"},"license":"MIT","_id":"@camcima/finita@3.0.0","maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"homepage":"https://github.com/camcima/finita","bugs":{"url":"https://github.com/camcima/finita/issues"},"dist":{"shasum":"3f39f8e6ecaa83436ec39c0b2e743f11aa895962","tarball":"https://registry.npmjs.org/@camcima/finita/-/finita-3.0.0.tgz","fileCount":9,"integrity":"sha512-QdCC9zmvUg7e5iMFFvb5UeD0hyNicUEMhi21MmHZwS6Eqtv0TV8mWKaNxaQgtZvjOLsLHGbxM85fR3OQjvZOrg==","signatures":[{"sig":"MEUCIQCbWP90+iUY3XUQIzgBMSO0sa6quwMGAW4iu8Fl6HrmQgIgCtLDA+6nuWjNWeZnVG8ObRpVgMA8X3ow8V3FytMvOIc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372201},"main":"dist/index.cjs","pnpm":{"overrides":{"undici":">=6.24.0"}},"type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"d7c9e8bf91b10ba3bdb8e26840fe6b3cff4320c1","scripts":{"lint":"tsc --noEmit && tsc --project tsconfig.test.json && eslint src/ tests/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"lefthook install","release":"release-it","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml","prepublishOnly":"pnpm run build && pnpm run lint && pnpm test && npm pack --dry-run","security:audit":"pnpm audit","security:secrets":"gitleaks detect --no-banner"},"_npmUser":{"name":"camcima","email":"camcima@hotmail.com"},"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"_npmVersion":"10.9.7","description":"A full-featured finite state machine library for TypeScript","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^10.1.0","vitest":"^3.2.4","lefthook":"^2.1.4","prettier":"^3.8.2","@eslint/js":"^10.0.1","release-it":"^20.0.1","typescript":"^6.0.2","@types/node":"^25.6.0","@commitlint/cli":"^20.5.0","typescript-eslint":"^8.58.1","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8","@commitlint/config-conventional":"^20.5.0"},"_npmOperationalInternal":{"tmp":"tmp/finita_3.0.0_1777631160292_0.7953565197383001","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@camcima/finita","version":"3.0.1","keywords":["statemachine","state machine","fsm","status","process"],"author":{"url":"https://github.com/camcima","name":"camcima"},"license":"MIT","_id":"@camcima/finita@3.0.1","maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"homepage":"https://github.com/camcima/finita","bugs":{"url":"https://github.com/camcima/finita/issues"},"dist":{"shasum":"6640b869176329babcf417c82b24dbbe44504660","tarball":"https://registry.npmjs.org/@camcima/finita/-/finita-3.0.1.tgz","fileCount":9,"integrity":"sha512-PSbHTflnvD3SdZsv3IRyt/IJOd5DTvtlDb7u6Dt18Ta6jZPHRdaq+/WbPbmOdPlFblNYKPS0HJdn7JWAVlt0TQ==","signatures":[{"sig":"MEQCIBrhrTCaUJ/m8S1Kqc3QP+NkW0nWL12stakz3N1jNQK9AiA7hawQeTG8mtuWpJhEVVj20fAXg7R2KtXpA/tCS83IsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372201},"main":"dist/index.cjs","pnpm":{"overrides":{"undici":">=6.24.0"}},"type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"c9b640adade6c17b39c0dd1d43055d9f7c07a4d8","scripts":{"lint":"tsc --noEmit && tsc --project tsconfig.test.json && eslint src/ tests/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"lefthook install","release":"release-it","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml","prepublishOnly":"pnpm run build && pnpm run lint && pnpm test && npm pack --dry-run","security:audit":"pnpm audit","security:secrets":"gitleaks detect --no-banner"},"_npmUser":{"name":"camcima","email":"camcima@hotmail.com"},"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"_npmVersion":"10.9.7","description":"A full-featured finite state machine library for TypeScript","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^10.4.1","vitest":"^3.2.4","lefthook":"^2.1.9","prettier":"^3.8.3","@eslint/js":"^10.0.1","release-it":"^20.2.0","typescript":"^6.0.3","@types/node":"^25.9.1","@commitlint/cli":"^21.0.2","typescript-eslint":"^8.60.0","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8","@commitlint/config-conventional":"^21.0.2"},"_npmOperationalInternal":{"tmp":"tmp/finita_3.0.1_1780177366498_0.8374013306817292","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@camcima/finita","version":"4.0.0","keywords":["statemachine","state machine","fsm","status","process"],"author":{"url":"https://github.com/camcima","name":"camcima"},"license":"MIT","_id":"@camcima/finita@4.0.0","maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"homepage":"https://github.com/camcima/finita","bugs":{"url":"https://github.com/camcima/finita/issues"},"dist":{"shasum":"c73656d6bb494362b8b4bc6c53094ab5d0105e21","tarball":"https://registry.npmjs.org/@camcima/finita/-/finita-4.0.0.tgz","fileCount":9,"integrity":"sha512-1Fq9k4gKw9pIeTFLnVWhHQcLsKpk9lJqDSgUC4ZL4cVvgSt/9FTAnQDY2nvemUpfli+iOB8YM/Pwn9NPqsTxrg==","signatures":[{"sig":"MEYCIQDqMfd+sV8Mc/NlCAfY83WAEal2FQpqhXsfPLgOls79RQIhAJ6zPTQz+x0i41FMPjU+oyU9tP3AuGzq6R16DXUV7eEN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398269},"main":"dist/index.cjs","pnpm":{"overrides":{"undici":">=6.24.0"}},"type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"b53efe38fc402b4dda7d8660866acb21977fb844","scripts":{"lint":"tsc --noEmit && tsc --project tsconfig.test.json && eslint src/ tests/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"lefthook install","release":"release-it","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml","prepublishOnly":"pnpm run build && pnpm run lint && pnpm test && npm pack --dry-run","security:audit":"pnpm audit","security:secrets":"gitleaks detect --no-banner"},"_npmUser":{"name":"camcima","email":"camcima@hotmail.com"},"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"_npmVersion":"10.9.7","description":"A full-featured finite state machine library for TypeScript","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^10.4.1","vitest":"^3.2.6","lefthook":"^2.1.9","prettier":"^3.8.3","@eslint/js":"^10.0.1","release-it":"^20.2.0","typescript":"^6.0.3","@types/node":"^25.9.1","@commitlint/cli":"^21.0.2","typescript-eslint":"^8.60.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8","@commitlint/config-conventional":"^21.0.2"},"_npmOperationalInternal":{"tmp":"tmp/finita_4.0.0_1782204165587_0.21860307807998058","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@camcima/finita","version":"4.1.0","keywords":["statemachine","state machine","fsm","status","process"],"author":{"url":"https://github.com/camcima","name":"camcima"},"license":"MIT","_id":"@camcima/finita@4.1.0","maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"homepage":"https://github.com/camcima/finita","bugs":{"url":"https://github.com/camcima/finita/issues"},"dist":{"shasum":"b18b51364bf72db81fd4b25d170bd53a7f7e5438","tarball":"https://registry.npmjs.org/@camcima/finita/-/finita-4.1.0.tgz","fileCount":9,"integrity":"sha512-5J8MaOvKoU22SBY6E4n12uswGFymmV/FrVLoarBAVvOh/ga7K9+GcTZlyjK/y5NRXTPUyrIlwtx83RpqKq2xUQ==","signatures":[{"sig":"MEUCIAei/Mqq39I1SKba8fGWAlM9BVhVuyvHJh67rcAA9+gFAiEA08fOWC/es3e46azB5LEJUxJkn3j2LE9tezFYqDO1I9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":424557},"main":"dist/index.cjs","pnpm":{"overrides":{"undici":">=6.24.0"}},"type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"1b39bbcb35bf9c9354c2d6c57a0a7811253be97b","scripts":{"lint":"tsc --noEmit && tsc --project tsconfig.test.json && eslint src/ tests/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"lefthook install","release":"release-it","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml","prepublishOnly":"pnpm run build && pnpm run lint && pnpm test && npm pack --dry-run","security:audit":"pnpm audit","security:secrets":"gitleaks detect --no-banner"},"_npmUser":{"name":"camcima","email":"camcima@hotmail.com"},"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"_npmVersion":"10.9.7","description":"A full-featured finite state machine library for TypeScript","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^10.4.1","vitest":"^3.2.6","lefthook":"^2.1.9","prettier":"^3.8.3","@eslint/js":"^10.0.1","release-it":"^20.2.0","typescript":"^6.0.3","@types/node":"^25.9.1","@commitlint/cli":"^21.0.2","typescript-eslint":"^8.60.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8","@commitlint/config-conventional":"^21.0.2"},"_npmOperationalInternal":{"tmp":"tmp/finita_4.1.0_1783645947578_0.6675767099567955","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"name":"@camcima/finita","version":"4.2.0","keywords":["statemachine","state machine","fsm","status","process"],"author":{"url":"https://github.com/camcima","name":"camcima"},"license":"MIT","_id":"@camcima/finita@4.2.0","maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"homepage":"https://github.com/camcima/finita","bugs":{"url":"https://github.com/camcima/finita/issues"},"dist":{"shasum":"ce999496662771dc05a3d2f8325deae94705f461","tarball":"https://registry.npmjs.org/@camcima/finita/-/finita-4.2.0.tgz","fileCount":9,"integrity":"sha512-zvXg+1o880dA5b4ypW6cAiKMpsa21eor7yYTYw+WEEPMw5rNukPcY2yeB8Bx4sk+LV3aRwnSvd6oonUeI3CMGA==","signatures":[{"sig":"MEUCIQDQxp+e7mvunXGDjDrleOoiEH8iBJIUTDPztcpnLS9IcwIgIilyTMgiPWDKvoTFOziziE8kxmxOkW9MH7zpJFDdJtU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":456408},"main":"dist/index.cjs","pnpm":{"overrides":{"undici":">=6.24.0"}},"type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"f67bb127134e2f710cc3d9640705c8b2f3108a0c","scripts":{"lint":"tsc --noEmit && tsc --project tsconfig.test.json && eslint src/ tests/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"lefthook install","release":"release-it","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml","prepublishOnly":"pnpm run build && pnpm run lint && pnpm test && npm pack --dry-run","security:audit":"pnpm audit","security:secrets":"gitleaks detect --no-banner"},"_npmUser":{"name":"camcima","email":"camcima@hotmail.com"},"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"_npmVersion":"10.9.7","description":"A full-featured finite state machine library for TypeScript","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^10.4.1","vitest":"^3.2.6","lefthook":"^2.1.9","prettier":"^3.8.3","@eslint/js":"^10.0.1","release-it":"^21.0.2","typescript":"^6.0.3","@types/node":"^26.0.1","@commitlint/cli":"^21.0.2","typescript-eslint":"^8.60.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8","@commitlint/config-conventional":"^21.0.2"},"_npmOperationalInternal":{"tmp":"tmp/finita_4.2.0_1787137393954_0.9434286270600631","host":"s3://npm-registry-packages-npm-production"}},"4.3.0":{"_id":"@camcima/finita@4.3.0","bugs":{"url":"https://github.com/camcima/finita/issues"},"dist":{"shasum":"d6c1765f93b5002ca3aa21dfe6a07eb262e74b48","tarball":"https://registry.npmjs.org/@camcima/finita/-/finita-4.3.0.tgz","fileCount":10,"integrity":"sha512-AHOMRrTEJZDnssLjiK9WSvX+LbaiWCswHi4JCROA+xD13p4WWQ4aFSZ2DyrXE+Dn6puvVQmZyO4a4xm0KueShA==","signatures":[{"sig":"MEUCIH3V1N9i8ae3dw2Zgf1OUQSgjIWnNP5le/dYCKO2NkWfAiEA42wzwjVYT2u8Eu1XEe6fM/qtES73xvjig+F6HgaDkgg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIE6MHAsEuwxuW7fcXWaZB7yZM9+4KVt/PVCCUMEZehG0AiEAqP29QxhL4LA0EXOZWsAJVOgzKiVZ45Sb6pJUwa/d7EM="}],"unpackedSize":503203},"main":"dist/index.cjs","name":"@camcima/finita","pnpm":{"overrides":{"undici":">=6.24.0"}},"type":"module","types":"dist/index.d.ts","author":{"url":"https://github.com/camcima","name":"camcima"},"module":"dist/index.js","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"d9ab220ae90cf6f8a5a32904c88f858e786c4217","license":"MIT","scripts":{"lint":"tsc --noEmit && tsc --project tsconfig.test.json && eslint src/ tests/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"lefthook install","release":"release-it","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage --reporter=default --reporter=junit --outputFile=test-report.junit.xml","prepublishOnly":"pnpm run build && pnpm run lint && pnpm test && npm pack --dry-run","security:audit":"pnpm audit","security:secrets":"gitleaks detect --no-banner"},"version":"4.3.0","_npmUser":{"name":"camcima","email":"camcima@hotmail.com"},"homepage":"https://github.com/camcima/finita","keywords":["statemachine","state machine","fsm","status","process"],"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"_npmVersion":"10.9.7","description":"A full-featured finite state machine library for TypeScript","directories":{},"maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"_nodeVersion":"22.22.2","contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.0","devDependencies":{"tsup":"^8.5.1","eslint":"^10.4.1","vitest":"^3.2.6","lefthook":"^2.1.9","prettier":"^3.8.3","@eslint/js":"^10.0.1","release-it":"^21.0.2","typescript":"^6.0.3","@types/node":"^26.0.1","@commitlint/cli":"^21.0.2","typescript-eslint":"^8.60.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8","@commitlint/config-conventional":"^21.0.2","@release-it/conventional-changelog":"^12.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/finita_4.3.0_1790508193711_0.12593027694331416"}}},"time":{"created":"2026-03-25T01:12:38.669Z","modified":"2026-09-27T11:23:13.978Z","1.0.0":"2026-03-25T01:12:38.911Z","2.0.0":"2026-03-25T09:37:20.655Z","2.1.0":"2026-04-04T17:04:21.195Z","2.2.0":"2026-04-06T15:01:59.793Z","3.0.0":"2026-05-01T10:26:00.451Z","3.0.1":"2026-05-30T21:42:46.641Z","4.0.0":"2026-06-23T08:42:45.821Z","4.1.0":"2026-07-10T01:12:27.725Z","4.2.0":"2026-08-19T11:03:14.113Z","4.3.0":"2026-09-27T11:23:13.800Z"},"bugs":{"url":"https://github.com/camcima/finita/issues"},"author":{"url":"https://github.com/camcima","name":"camcima"},"license":"MIT","homepage":"https://github.com/camcima/finita","keywords":["statemachine","state machine","fsm","status","process"],"repository":{"url":"git+https://github.com/camcima/finita.git","type":"git"},"description":"A full-featured finite state machine library for TypeScript","contributors":[{"url":"https://github.com/metabor","name":"metabor"}],"maintainers":[{"name":"camcima","email":"camcima@hotmail.com"}],"readme":"<div align=\"center\">\n\n<picture>\n  <img alt=\"finita\" src=\"assets/logo.svg\" width=\"480\">\n</picture>\n\n<br>\n\n[![CI](https://github.com/camcima/finita/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/camcima/finita/actions/workflows/ci.yml)\n[![CodeQL](https://img.shields.io/badge/CodeQL-enabled-brightgreen)](https://github.com/camcima/finita/security/code-scanning)\n[![codecov](https://codecov.io/gh/camcima/finita/graph/badge.svg)](https://codecov.io/gh/camcima/finita)\n[![npm version](https://img.shields.io/npm/v/@camcima/finita)](https://www.npmjs.com/package/@camcima/finita)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/TypeScript-6.0-blue.svg)](https://www.typescriptlang.org/)\n[![Node.js](https://img.shields.io/badge/Node.js-20%20%7C%2022%20%7C%2024-green.svg)](https://nodejs.org/)\n\n</div>\n\nA full-featured finite state machine (FSM) library for TypeScript.\n\nThis library is a TypeScript port of [metabor/statemachine](https://github.com/Metabor/Statemachine), the PHP state machine library created by **Oliver Tischlinger**. The original library was the engine behind _Bob_ -- the backend component of the _Alice & Bob_ retail system that [Rocket Internet](https://www.rocket-internet.com/) used to power its e-commerce ventures worldwide. The author of this TypeScript port and Oliver worked together at Rocket Internet, where the state machine proved itself at scale across multiple global operations.\n\n## Features\n\n- **Type-Safe Subjects** -- generic `TSubject` parameter gives you typed access to the domain object, with `unknown` default for backward compatibility\n- **Async-First** -- all conditions, observers, and mutexes support async operations via `MaybePromise<T>` return types\n- **States, Transitions, Events** -- define complex workflows declaratively\n- **Conditions (Guards)** -- control when transitions are allowed, with composable AND/OR/NOT logic\n- **Observers (Commands)** -- execute side effects when events fire or states change\n- **Automatic Transitions** -- transitions that fire when a condition becomes true, without an explicit event\n- **Transition Selectors** -- pluggable strategies for resolving ambiguous transitions (score-based, weight-based)\n- **Mutex/Locking** -- concurrency control with pluggable lock adapters\n- **Factory Pattern** -- create pre-configured state machines from subject objects\n- **ProcessBuilder** -- fluent, validated API for building frozen, immutable state graphs\n- **Graph Visualization** -- build graph data structures for rendering with GraphViz or other tools\n- **Zero Dependencies** -- no runtime dependencies\n\n## Installation\n\n```bash\npnpm add @camcima/finita\n```\n\n## Quick Start\n\n```mermaid\nstateDiagram-v2\n    [*] --> draft\n    draft --> published : publish\n    published --> archived : archive\n    archived --> draft : reopen\n```\n\n```typescript\nimport { ProcessBuilder, Statemachine } from \"@camcima/finita\";\n\n// Define the process\nconst process = new ProcessBuilder(\"article-workflow\")\n  .addState(\"draft\", { initial: true })\n  .addState(\"published\")\n  .addState(\"archived\")\n  .addTransition(\"draft\", \"published\", { event: \"publish\" })\n  .addTransition(\"published\", \"archived\", { event: \"archive\" })\n  .addTransition(\"archived\", \"draft\", { event: \"reopen\" })\n  .build();\n\n// Create the state machine\nconst article = { title: \"Hello World\" };\nconst sm = new Statemachine(article, process);\n\nconsole.log(sm.getCurrentState().getName()); // 'draft'\n\nawait sm.triggerEvent(\"publish\");\nconsole.log(sm.getCurrentState().getName()); // 'published'\n\nawait sm.triggerEvent(\"archive\");\nconsole.log(sm.getCurrentState().getName()); // 'archived'\n\n// Note: use top-level await (supported in ES modules) or wrap in an async function.\n```\n\n### Typed Usage\n\nUse the `TSubject` generic parameter for type-safe access to your domain object -- no more casts:\n\n```typescript\nimport {\n  ProcessBuilder,\n  Statemachine,\n  CallbackCondition,\n} from \"@camcima/finita\";\n\ninterface Order {\n  id: number;\n  total: number;\n}\n\n// subject is typed as Order -- no cast needed\nconst canApprove = new CallbackCondition<Order>(\n  \"canApprove\",\n  (order) => order.total <= 1000,\n);\n\nconst process = new ProcessBuilder<Order>(\"order\")\n  .addState(\"pending\", { initial: true })\n  .addState(\"approved\")\n  .addTransition(\"pending\", \"approved\", {\n    event: \"review\",\n    condition: canApprove,\n  })\n  .build();\n\nconst sm = new Statemachine<Order>({ id: 1, total: 500 }, process);\n\nconst order = sm.getSubject(); // typed as Order\nconsole.log(order.total); // 500\n```\n\n## Concepts\n\nA state machine consists of:\n\n| Concept          | Description                                                                                                          |\n| ---------------- | -------------------------------------------------------------------------------------------------------------------- |\n| **State**        | A named node in the workflow graph. Holds transitions, events, and metadata.                                         |\n| **Transition**   | A directed edge from one state to another, optionally guarded by a condition and triggered by an event.              |\n| **Event**        | A named trigger attached to a state. When invoked, it fires observers (commands) and initiates transitions.          |\n| **Condition**    | A guard that determines whether a transition is active.                                                              |\n| **Process**      | A named collection of states that defines a complete workflow, starting from an initial state.                       |\n| **Statemachine** | The runtime orchestrator that manages the current state, triggers events, checks conditions, and notifies observers. |\n| **Observer**     | A callback that reacts to events or state changes.                                                                   |\n\n```mermaid\nclassDiagram\n    direction LR\n    Process *-- State : contains\n    State *-- Transition : has outgoing\n    State *-- Event : has named\n    Transition --> State : targets\n    Transition --> Condition : guarded by\n    Event --> Observer : notifies\n    Statemachine --> Process : uses\n    Statemachine --> State : tracks current\n    Statemachine --> Observer : notifies on change\n```\n\n## Documentation\n\nDetailed documentation for every component:\n\n- **[Core](https://github.com/camcima/finita/blob/main/docs/core.md)** -- State, Transition, Event, Process, Statemachine\n- **[Conditions](https://github.com/camcima/finita/blob/main/docs/conditions.md)** -- Tautology, Contradiction, CallbackCondition, Timeout, AndComposite, OrComposite, Not\n- **[Observers](https://github.com/camcima/finita/blob/main/docs/observers.md)** -- CallbackObserver, StatefulStatusChanger, OnEnterObserver, TransitionLogger\n- **[Filters](https://github.com/camcima/finita/blob/main/docs/filters.md)** -- ActiveTransitionFilter, FilterStateByEvent, FilterStateByTransition, FilterStateByFinalState, FilterTransitionByEvent\n- **[Selectors](https://github.com/camcima/finita/blob/main/docs/selectors.md)** -- OneOrNoneActiveTransition, ScoreTransition, WeightTransition\n- **[Mutex](https://github.com/camcima/finita/blob/main/docs/mutex.md)** -- NullMutex, LockAdapterMutex, MutexFactory\n- **[Factory](https://github.com/camcima/finita/blob/main/docs/factory.md)** -- Factory, SingleProcessDetector, AbstractNamedProcessDetector, StatefulStateNameDetector\n- **[Graph](https://github.com/camcima/finita/blob/main/docs/graph.md)** -- GraphBuilder\n- **[Errors](https://github.com/camcima/finita/blob/main/docs/errors.md)** -- WrongEventForStateError, LockCanNotBeAcquiredError, DuplicateStateError, ProcessFinalizedError, GraphValidationError, DuplicateTransitionError\n- **[Interfaces](https://github.com/camcima/finita/blob/main/docs/interfaces.md)** -- All TypeScript interfaces\n- **[Migration Guide](https://github.com/camcima/finita/blob/main/docs/migration/v2-to-v3.md)** -- Upgrading from v2 to v3\n\n## Examples\n\nA complete working example (order processing with prepayment and postpayment workflows) is available in the [finita-example](https://github.com/camcima/finita-example) repository.\n\n## Architecture\n\n```\nsrc/\n  index.ts                 # Barrel export\n  MaybePromise.ts          # MaybePromise<T> = T | Promise<T> utility type\n  ProcessBuilder.ts        # Fluent builder for frozen graph construction\n  Event.ts                 # Event implementation\n  State.ts                 # State implementation (frozen; use ProcessBuilder)\n  Transition.ts            # Transition implementation (frozen; use ProcessBuilder)\n  Process.ts               # Process (workflow definition; use ProcessBuilder)\n  Statemachine.ts          # Runtime state machine\n  interfaces/              # All TypeScript interfaces\n  condition/               # Condition (guard) implementations\n  observer/                # Observer implementations\n  filter/                  # State and transition filters\n  selector/                # Transition selection strategies\n  mutex/                   # Locking implementations\n  factory/                 # State machine factory pattern\n  internal/                # Internal helpers (OperationQueue, InternalConstruction)\n  graph/                   # Graph visualization builder\n  error/                   # Custom error classes\n```\n\n## Security\n\n### CI\n\n- **CodeQL** -- static analysis for security vulnerabilities (push, PR, weekly)\n- **OSV-Scanner** -- dependency vulnerability scanning against the [OSV database](https://osv.dev/) (push, PR, weekly)\n- **Dependabot** -- automated PRs for dependency and GitHub Actions updates (weekly)\n\n### Local (via Lefthook)\n\n- **Gitleaks** -- scans staged files for secrets on every commit (auto-skipped if not installed)\n\n### Manual checks\n\n```bash\npnpm run security:audit    # dependency audit\npnpm run security:secrets  # Scan full repo for secrets (requires gitleaks)\n```\n\nInstall Gitleaks: <https://github.com/gitleaks/gitleaks#installing>\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Run tests\npnpm test\n\n# Run tests in watch mode\npnpm run test:watch\n\n# Type check\npnpm run lint\n\n# Build\npnpm run build\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}