diff --git a/package-lock.json b/package-lock.json index 57da241..77c057c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "source-map-support": "^0.5.21", "tsx": "^3.12.7", "typescript": "^5.1.6", - "vitest": "^0.32.4" + "vitest": "^1.2.2" }, "engines": { "node": "^18.17.1", @@ -1268,6 +1268,22 @@ "node": ">=14.6" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -2308,6 +2324,175 @@ "node": ">=12" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@ryansonshine/commitizen": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/@ryansonshine/commitizen/-/commitizen-4.2.8.tgz", @@ -2977,21 +3162,12 @@ "@types/responselike": "^1.0.0" } }, - "node_modules/@types/chai": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", - "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==", + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, - "node_modules/@types/chai-subset": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.5.tgz", - "integrity": "sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", @@ -3286,27 +3462,27 @@ "dev": true }, "node_modules/@vitest/expect": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.32.4.tgz", - "integrity": "sha512-m7EPUqmGIwIeoU763N+ivkFjTzbaBn0n9evsTOcde03ugy2avPs3kZbYmw3DkcH1j5mxhMhdamJkLQ6dM1bk/A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.2.tgz", + "integrity": "sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==", "dev": true, "dependencies": { - "@vitest/spy": "0.32.4", - "@vitest/utils": "0.32.4", - "chai": "^4.3.7" + "@vitest/spy": "1.2.2", + "@vitest/utils": "1.2.2", + "chai": "^4.3.10" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.32.4.tgz", - "integrity": "sha512-cHOVCkiRazobgdKLnczmz2oaKK9GJOw6ZyRcaPdssO1ej+wzHVIkWiCiNacb3TTYPdzMddYkCgMjZ4r8C0JFCw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.2.tgz", + "integrity": "sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==", "dev": true, "dependencies": { - "@vitest/utils": "0.32.4", - "p-limit": "^4.0.0", + "@vitest/utils": "1.2.2", + "p-limit": "^5.0.0", "pathe": "^1.1.1" }, "funding": { @@ -3314,15 +3490,15 @@ } }, "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", "dev": true, "dependencies": { "yocto-queue": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3341,40 +3517,41 @@ } }, "node_modules/@vitest/snapshot": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.32.4.tgz", - "integrity": "sha512-IRpyqn9t14uqsFlVI2d7DFMImGMs1Q9218of40bdQQgMePwVdmix33yMNnebXcTzDU5eiV3eUsoxxH5v0x/IQA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.2.tgz", + "integrity": "sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==", "dev": true, "dependencies": { - "magic-string": "^0.30.0", + "magic-string": "^0.30.5", "pathe": "^1.1.1", - "pretty-format": "^29.5.0" + "pretty-format": "^29.7.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.32.4.tgz", - "integrity": "sha512-oA7rCOqVOOpE6rEoXuCOADX7Lla1LIa4hljI2MSccbpec54q+oifhziZIJXxlE/CvI2E+ElhBHzVu0VEvJGQKQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.2.tgz", + "integrity": "sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==", "dev": true, "dependencies": { - "tinyspy": "^2.1.1" + "tinyspy": "^2.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.32.4.tgz", - "integrity": "sha512-Gwnl8dhd1uJ+HXrYyV0eRqfmk9ek1ASE/LWfTCuWMw+d07ogHqp4hEAV28NiecimK6UY9DpSEPh+pXBA5gtTBg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.2.tgz", + "integrity": "sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==", "dev": true, "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -6153,6 +6330,15 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -8317,10 +8503,14 @@ } }, "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, "engines": { "node": ">=14" }, @@ -13916,18 +14106,34 @@ } }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", "fsevents": "~2.3.2" } }, @@ -15007,9 +15213,9 @@ "dev": true }, "node_modules/tinypool": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz", - "integrity": "sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", "dev": true, "engines": { "node": ">=14.0.0" @@ -15494,29 +15700,29 @@ } }, "node_modules/vite": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", - "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", "dev": true, "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -15549,82 +15755,469 @@ } }, "node_modules/vite-node": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.32.4.tgz", - "integrity": "sha512-L2gIw+dCxO0LK14QnUMoqSYpa9XRGnTTTDjW2h19Mr+GR0EFj4vx52W41gFXfMLqpA00eK4ZjOVYo1Xk//LFEw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.2.tgz", + "integrity": "sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==", "dev": true, "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", - "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" + "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, "node_modules/vitest": { - "version": "0.32.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.32.4.tgz", - "integrity": "sha512-3czFm8RnrsWwIzVDu/Ca48Y/M+qh3vOnF16czJm98Q/AN1y3B6PBsyV8Re91Ty5s7txKNjEhpgtGPcfdbh2MZg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.2.tgz", + "integrity": "sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==", "dev": true, "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.32.4", - "@vitest/runner": "0.32.4", - "@vitest/snapshot": "0.32.4", - "@vitest/spy": "0.32.4", - "@vitest/utils": "0.32.4", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", + "@vitest/expect": "1.2.2", + "@vitest/runner": "1.2.2", + "@vitest/snapshot": "1.2.2", + "@vitest/spy": "1.2.2", + "@vitest/utils": "1.2.2", + "acorn-walk": "^8.3.2", "cac": "^6.7.14", - "chai": "^4.3.7", + "chai": "^4.3.10", "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.0", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.5.0", - "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.32.4", + "std-env": "^3.5.0", + "strip-literal": "^1.3.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.2", + "vite": "^5.0.0", + "vite-node": "1.2.2", "why-is-node-running": "^2.2.2" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "^1.0.0", + "@vitest/ui": "^1.0.0", "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" + "jsdom": "*" }, "peerDependenciesMeta": { "@edge-runtime/vm": { "optional": true }, + "@types/node": { + "optional": true + }, "@vitest/browser": { "optional": true }, @@ -15636,15 +16229,6 @@ }, "jsdom": { "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true } } }, diff --git a/package.json b/package.json index 1f8f763..400ed8e 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "source-map-support": "^0.5.21", "tsx": "^3.12.7", "typescript": "^5.1.6", - "vitest": "^0.32.4" + "vitest": "^1.2.2" }, "dependencies": { "effect": "^2.2.1", diff --git a/src/__tests__/workflows/__snapshots__/or-split-join-explicit-default-condition.test.ts.snap b/src/__tests__/workflows/__snapshots__/or-split-join-explicit-default-condition.test.ts.snap new file mode 100644 index 0000000..fb13f3e --- /dev/null +++ b/src/__tests__/workflows/__snapshots__/or-split-join-explicit-default-condition.test.ts.snap @@ -0,0 +1,1891 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 1`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 0, + "name": "register", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": true, + "shouldBookFlight": true, + }, + "id": "workflow-1", + "name": "or-split-join", + "parent": null, + "state": "initialized", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 2`] = ` +{ + "conditions": [ + { + "marking": 1, + "name": "start", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 0, + "name": "register", + "state": "enabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": true, + "shouldBookFlight": true, + }, + "id": "workflow-1", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 3`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "register->book_hotel", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:register->book_flight", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:register->book_car", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "enabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "enabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "enabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": true, + "shouldBookFlight": true, + }, + "id": "workflow-1", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 4`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "register->book_hotel", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:register->book_car", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_flight", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "enabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "enabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": true, + "shouldBookFlight": true, + }, + "id": "workflow-1", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 5`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "register->book_hotel", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:book_car->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_flight", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "enabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_car", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": true, + "shouldBookFlight": true, + }, + "id": "workflow-1", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 6`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:book_car->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_flight", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_hotel", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_car", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "enabled", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": true, + "shouldBookFlight": true, + }, + "id": "workflow-1", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 7`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "end", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_flight", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_hotel", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_car", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "pay", + "state": "completed", + "workflowId": "workflow-1", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": true, + "shouldBookFlight": true, + }, + "id": "workflow-1", + "name": "or-split-join", + "parent": null, + "state": "completed", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 8`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 0, + "name": "register", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": true, + }, + "id": "workflow-2", + "name": "or-split-join", + "parent": null, + "state": "initialized", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 9`] = ` +{ + "conditions": [ + { + "marking": 1, + "name": "start", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 0, + "name": "register", + "state": "enabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": true, + }, + "id": "workflow-2", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 10`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "register->book_hotel", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:register->book_flight", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "enabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "enabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": true, + }, + "id": "workflow-2", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 11`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "register->book_hotel", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_flight", + "state": "completed", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "enabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": true, + }, + "id": "workflow-2", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 12`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_flight", + "state": "completed", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_hotel", + "state": "completed", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "enabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": true, + }, + "id": "workflow-2", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 13`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "end", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_flight", + "state": "completed", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_hotel", + "state": "completed", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "pay", + "state": "completed", + "workflowId": "workflow-2", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": true, + }, + "id": "workflow-2", + "name": "or-split-join", + "parent": null, + "state": "completed", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 14`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 0, + "name": "register", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": false, + }, + "id": "workflow-3", + "name": "or-split-join", + "parent": null, + "state": "initialized", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 15`] = ` +{ + "conditions": [ + { + "marking": 1, + "name": "start", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 0, + "name": "register", + "state": "enabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": false, + }, + "id": "workflow-3", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 16`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "register->book_hotel", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_hotel", + "state": "enabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": false, + }, + "id": "workflow-3", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 17`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "end", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_hotel", + "state": "completed", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "pay", + "state": "enabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": false, + }, + "id": "workflow-3", + "name": "or-split-join", + "parent": null, + "state": "started", + }, + ], +} +`; + +exports[`runs a net with "or" split and "or" join (with using explicit condition for default or split target) 18`] = ` +{ + "conditions": [ + { + "marking": 0, + "name": "start", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "register->book_hotel", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 1, + "name": "end", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_flight", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:register->book_car", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_flight->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_hotel->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "marking": 0, + "name": "implicit:book_car->pay", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + ], + "tasks": [ + { + "generation": 1, + "name": "register", + "state": "completed", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_flight", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "book_hotel", + "state": "completed", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 0, + "name": "book_car", + "state": "disabled", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + { + "generation": 1, + "name": "pay", + "state": "completed", + "workflowId": "workflow-3", + "workflowName": "or-split-join", + }, + ], + "workItems": [], + "workflows": [ + { + "context": { + "shouldBookCar": false, + "shouldBookFlight": false, + }, + "id": "workflow-3", + "name": "or-split-join", + "parent": null, + "state": "completed", + }, + ], +} +`; diff --git a/src/__tests__/workflows/or-split-join-explicit-default-condition.test.ts b/src/__tests__/workflows/or-split-join-explicit-default-condition.test.ts new file mode 100644 index 0000000..7727dd0 --- /dev/null +++ b/src/__tests__/workflows/or-split-join-explicit-default-condition.test.ts @@ -0,0 +1,165 @@ +import { Effect } from 'effect'; +import { it } from 'vitest'; + +import { Builder, IdGenerator, Service } from '../../index.js'; +import { getEnabledTaskNames, makeIdGenerator } from '../shared.js'; + +it('runs a net with "or" split and "or" join (with using explicit condition for default or split target)', ({ + expect, +}) => { + const workflowDefinition = Builder.workflow<{ + shouldBookFlight: boolean; + shouldBookCar: boolean; + }>() + .withName('or-split-join') + .startCondition('start') + .task('register', Builder.emptyTask().withSplitType('or')) + .task('book_flight', Builder.emptyTask()) + .task('book_hotel', Builder.emptyTask()) + .task('book_car', Builder.emptyTask()) + .task('pay', Builder.emptyTask().withJoinType('or')) + .condition('register->book_hotel') + .endCondition('end') + .connectCondition('start', (to) => to.task('register')) + .connectTask('register', (to) => + to + .task('book_flight', ({ context }) => + Effect.succeed(context.shouldBookFlight) + ) + .task('book_car', ({ context }) => + Effect.succeed(context.shouldBookCar) + ) + .defaultCondition('register->book_hotel') + ) + .connectCondition('register->book_hotel', (to) => to.task('book_hotel')) + .connectTask('book_flight', (to) => to.task('pay')) + .connectTask('book_hotel', (to) => to.task('pay')) + .connectTask('book_car', (to) => to.task('pay')) + .connectTask('pay', (to) => to.condition('end')); + + const program = Effect.gen(function* ($) { + const idGenerator = makeIdGenerator(); + + const service1 = yield* $( + workflowDefinition.build(), + Effect.flatMap((workflow) => + Service.initialize(workflow, { + shouldBookFlight: true, + shouldBookCar: true, + }) + ), + Effect.provideService(IdGenerator, idGenerator) + ); + + expect(yield* $(service1.getState())).toMatchSnapshot(); + + yield* $(service1.start()); + const state1_1 = yield* $(service1.getState()); + expect(state1_1).toMatchSnapshot(); + expect(getEnabledTaskNames(state1_1)).toEqual(new Set(['register'])); + + yield* $(service1.startTask('register')); + const state1_2 = yield* $(service1.getState()); + expect(state1_2).toMatchSnapshot(); + expect(getEnabledTaskNames(state1_2)).toEqual( + new Set(['book_flight', 'book_car', 'book_hotel']) + ); + + yield* $(service1.startTask('book_flight')); + const state1_3 = yield* $(service1.getState()); + expect(state1_3).toMatchSnapshot(); + expect(getEnabledTaskNames(state1_3)).toEqual( + new Set(['book_car', 'book_hotel']) + ); + + yield* $(service1.startTask('book_car')); + const state1_4 = yield* $(service1.getState()); + expect(state1_4).toMatchSnapshot(); + expect(getEnabledTaskNames(state1_4)).toEqual(new Set(['book_hotel'])); + + yield* $(service1.startTask('book_hotel')); + const state1_5 = yield* $(service1.getState()); + expect(state1_5).toMatchSnapshot(); + expect(getEnabledTaskNames(state1_5)).toEqual(new Set(['pay'])); + + yield* $(service1.startTask('pay')); + const state1_6 = yield* $(service1.getState()); + expect(state1_6).toMatchSnapshot(); + expect(state1_6.workflows[0]?.state).toBe('completed'); + + const service2 = yield* $( + workflowDefinition.build(), + Effect.flatMap((workflow) => + Service.initialize(workflow, { + shouldBookFlight: true, + shouldBookCar: false, + }) + ), + Effect.provideService(IdGenerator, idGenerator) + ); + + expect(yield* $(service2.getState())).toMatchSnapshot(); + + yield* $(service2.start()); + const state2_1 = yield* $(service2.getState()); + expect(state2_1).toMatchSnapshot(); + expect(getEnabledTaskNames(state2_1)).toEqual(new Set(['register'])); + + yield* $(service2.startTask('register')); + const state2_2 = yield* $(service2.getState()); + expect(state2_2).toMatchSnapshot(); + expect(getEnabledTaskNames(state2_2)).toEqual( + new Set(['book_flight', 'book_hotel']) + ); + + yield* $(service2.startTask('book_flight')); + const state2_3 = yield* $(service2.getState()); + expect(state2_3).toMatchSnapshot(); + expect(getEnabledTaskNames(state2_3)).toEqual(new Set(['book_hotel'])); + + yield* $(service2.startTask('book_hotel')); + const state2_4 = yield* $(service2.getState()); + expect(state2_4).toMatchSnapshot(); + expect(getEnabledTaskNames(state2_4)).toEqual(new Set(['pay'])); + + yield* $(service2.startTask('pay')); + const state2_5 = yield* $(service2.getState()); + expect(state2_5).toMatchSnapshot(); + expect(state2_5.workflows[0]?.state).toBe('completed'); + + const service3 = yield* $( + workflowDefinition.build(), + Effect.flatMap((workflow) => + Service.initialize(workflow, { + shouldBookFlight: false, + shouldBookCar: false, + }) + ), + Effect.provideService(IdGenerator, idGenerator) + ); + + expect(yield* $(service3.getState())).toMatchSnapshot(); + + yield* $(service3.start()); + const state3_1 = yield* $(service3.getState()); + expect(state3_1).toMatchSnapshot(); + expect(getEnabledTaskNames(state3_1)).toEqual(new Set(['register'])); + + yield* $(service3.startTask('register')); + const state3_2 = yield* $(service3.getState()); + expect(state3_2).toMatchSnapshot(); + expect(getEnabledTaskNames(state3_2)).toEqual(new Set(['book_hotel'])); + + yield* $(service3.startTask('book_hotel')); + const state3_3 = yield* $(service3.getState()); + expect(state3_3).toMatchSnapshot(); + expect(getEnabledTaskNames(state3_3)).toEqual(new Set(['pay'])); + + yield* $(service3.startTask('pay')); + const state3_4 = yield* $(service3.getState()); + expect(state3_4).toMatchSnapshot(); + expect(state3_4.workflows[0]?.state).toBe('completed'); + }); + + Effect.runSync(program); +}); diff --git a/src/builder/FlowBuilder.ts b/src/builder/FlowBuilder.ts index 3aea103..c2b5154 100644 --- a/src/builder/FlowBuilder.ts +++ b/src/builder/FlowBuilder.ts @@ -233,7 +233,10 @@ export class OrXorTaskFlowBuilder< toTask.addIncomingFlow(rightFlow); } else if (defaultFlow?.type === 'condition') { const condition = yield* $(workflow.getCondition(defaultFlow.name)); - const flow = new TaskToConditionFlow(task, condition); + const flow = new TaskToConditionFlow(task, condition, { + order: Infinity, + isDefault: true, + }); condition.addIncomingFlow(flow); task.addOutgoingFlow(flow); }